国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 整理Java的MyBatis框架中一些重要的功能及基本使用示例

整理Java的MyBatis框架中一些重要的功能及基本使用示例

2020-04-16 14:04234390216 JAVA教程

這篇文章主要介紹了Java的MyBatis框架中一些重要的功能及基本使用示例整理,MyBatis可以幫助Java程序進(jìn)行強(qiáng)大的數(shù)據(jù)庫(kù)操作,需要的朋友可以參考下

基本用法回顧:
SQL語(yǔ)句存儲(chǔ)在XML文件或Java 注解中。一個(gè)MaBatis映射的示例(其中用到了Java接口和MyBatis注解):

?
1
2
3
4
5
6
package org.mybatis.example;
 
public interface BlogMapper {
  @Select("select * from Blog where id = #{id}")
  Blog selectBlog(int id);
}

執(zhí)行的示例:

?
1
2
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);

SQL語(yǔ)句和映射也可以外化到一個(gè)XML文件中:

?
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" parameterType="int" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>

也可以使用MyBatis API執(zhí)行語(yǔ)句:

?
1
Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

詳細(xì)信息可以參考MyBatis網(wǎng)站所提供的用戶手冊(cè)。


與Spring集成
MyBatis與Spring Framework集成。Spring Framework允許MyBatis參與Spring事務(wù),創(chuàng)建了MyBatis映射器和會(huì)話,并把他們注入到其他bean中。

如下是一個(gè)基本的XML配置示例:創(chuàng)建了映射器,并注入到“BlogService”bean中。

?
1
2
3
4
5
6
7
8
9
10
11
12
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
</bean>
 
<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
  <property name="mapperInterface" value="org.mybatis.example.BlogMapper" />
</bean>
 
<bean id="blogService" class="org.mybatis.example.BlogServiceImpl">
  <property name="blogMapper" ref="blogMapper" />
</bean>

現(xiàn)在調(diào)用MyBatis只需要調(diào)用一個(gè)bean:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class BlogServiceImpl implements BlogService {
 
  private BlogMapper blogMapper;
 
  public void setBlogMapper(BlogMapper blogMapper) {
    this.blogMapper = blogMapper;
  }
 
  public void doSomethingWithABlog(int blogId) {
    Blog blog = blogMapper.selectBlog(blogId);
    ...
  }
}

SqlSessionFactory
每 一 個(gè) MyBatis 的 應(yīng) 用 程 序 都 以 一 個(gè) SqlSessionFactory 對(duì) 象 的 實(shí) 例 為 核 心 。SqlSessionFactory本身是由SqlSessionFactoryBuilder創(chuàng)建的,一般而言,在一個(gè)應(yīng)用中,一個(gè)數(shù)據(jù)庫(kù)只會(huì)對(duì)應(yīng)一個(gè)SqlSessionFactory,所以一般我們都把SqlSessionFactory定義成單例模式,或通過(guò)Spring等進(jìn)行注入。
SqlSessionFactoryBuilder創(chuàng)建SqlSessionFactory的方法有:

  • SqlSessionFactory build(InputStream inputStream) 
  • SqlSessionFactory build(InputStream inputStream, String environment) 
  • SqlSessionFactory build(InputStream inputStream, Properties properties) 
  • SqlSessionFactory build(InputStream inputStream, String env, Properties props) 
  • SqlSessionFactory build(Configuration config)  

這些方法主要設(shè)計(jì)到的參數(shù)有InputStream,environment,properties,其中InputStream是從配置文件中獲取的一個(gè)輸入流;environment表示在配置文件里面配置的眾多的environment中,當(dāng)前要使用的是哪一個(gè)environment,包括數(shù)據(jù)源和事務(wù),缺省則使用默認(rèn)的environment;使用properties,MyBatis則會(huì)加載對(duì)應(yīng)的屬性或文件,它們可以在配置文件中使用。 
 
 
從XML中構(gòu)建SqlSessionFactory

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private static SqlSessionFactory sqlSessionFactory = null;
   
  static {
    try {
      InputStream is = Resources.getResourceAsStream("config/mybatis_config.xml");
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
     
  }
   
  public static SqlSessionFactory getSqlSessionFactory() {
    return sqlSessionFactory;
  }

 
下面講講配置文件的基本結(jié)構(gòu):
mybatis的配置文件一般包括如下幾個(gè)部分:

  • properties:properties用于定義或?qū)雽傩裕缓笤诤竺娴沫h(huán)境中使用
  • settings:settings用于設(shè)置一些mybatis在運(yùn)行時(shí)的行為方式,具體的設(shè)置信息可以查看mybatis的文檔
  • typeAliases:typeAliases是為系統(tǒng)中的Java類型指定一個(gè)較短的別名
  • environments:MyBatis 可以配置多種環(huán)境。這會(huì)幫助你將 SQL 映射應(yīng)用于多種數(shù)據(jù)庫(kù)之中。
?
1
2
3
4
5
6
7
8
9
10
11
<environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
      </dataSource>
    </environment>
  </environments>

由于MyBatis可以配置多個(gè)environment,所以可以在創(chuàng)建SqlSessionFactory的時(shí)候指定具體的環(huán)境來(lái)創(chuàng)建特定的環(huán)境下的SqlSessionFactory,  不指定則使用默認(rèn)的環(huán)境。
transactionManager

在 MyBatis 中有兩種事務(wù)管理器類型(也就是 type=”[JDBC|MANAGED]”):

JDBC – 這個(gè)配置直接簡(jiǎn)單使用了 JDBC 的提交和回滾設(shè)置。 它依賴于從數(shù)據(jù)源得 到的連接來(lái)管理事務(wù)范圍。
MANAGED – 這個(gè)配置幾乎沒(méi)做什么。它從來(lái)不提交或回滾一個(gè)連接。而它會(huì)讓 容器來(lái)管理事務(wù)的整個(gè)生命周期(比如 Spring 或 JEE 應(yīng)用服務(wù)器的上下文) 默認(rèn) 情況下它會(huì)關(guān)閉連接。 然而一些容器并不希望這樣, 因此如果你需要從連接中停止 它,將 closeConnection 屬性設(shè)置為 false。
dataSource

dataSource 元素使用基本的 JDBC 數(shù)據(jù)源接口來(lái)配置 JDBC 連接對(duì)象的資源。

許多 MyBatis 的應(yīng)用程序?qū)?huì)按示例中的例子來(lái)配置數(shù)據(jù)源。 然而它并不是必須的。 要知道為了方便使用延遲加載,數(shù)據(jù)源才是必須的。
有三種內(nèi)建的數(shù)據(jù)源類型(也就是 type=”???”):

UNPOOLED – 這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)是每次被請(qǐng)求時(shí)簡(jiǎn)單打開(kāi)和關(guān)閉連接。它有一點(diǎn)慢, 這是對(duì)簡(jiǎn)單應(yīng)用程序的一個(gè)很好的選擇, 因?yàn)樗恍枰皶r(shí)的可用連接。 不同的數(shù)據(jù)庫(kù)對(duì)這 個(gè)的表現(xiàn)也是不一樣的, 所以對(duì)某些數(shù)據(jù)庫(kù)來(lái)說(shuō)配置數(shù)據(jù)源并不重要, 這個(gè)配置也是閑置的。 UNPOOLED 類型的數(shù)據(jù)源僅僅用來(lái)配置以下 5 種屬性:

  • driver – 這是 JDBC 驅(qū)動(dòng)的 Java 類的完全限定名(如果你的驅(qū)動(dòng)包含,它也不是 數(shù)據(jù)源類)。
  • url – 這是數(shù)據(jù)庫(kù)的 JDBC URL 地址。
  • username – 登錄數(shù)據(jù)庫(kù)的用戶名。
  • password – 登錄數(shù)據(jù)庫(kù)的密碼。
  • defaultTransactionIsolationLevel – 默認(rèn)的連接事務(wù)隔離級(jí)別。

作為可選項(xiàng),你可以傳遞數(shù)據(jù)庫(kù)驅(qū)動(dòng)的屬性。要這樣做,屬性的前綴是以“driver.”開(kāi) 頭的,例如:

?
1
driver.encoding=UTF8

這 樣 就 會(huì) 傳 遞 以 值 “ UTF8 ” 來(lái) 傳 遞 屬 性 “ encoding ”, 它 是 通 過(guò) DriverManager.getConnection(url,driverProperties)方法傳遞給數(shù)據(jù)庫(kù)驅(qū)動(dòng)。

POOLED – 這是 JDBC 連接對(duì)象的數(shù)據(jù)源連接池的實(shí)現(xiàn),用來(lái)避免創(chuàng)建新的連接實(shí)例 時(shí)必要的初始連接和認(rèn)證時(shí)間。這是一種當(dāng)前 Web 應(yīng)用程序用來(lái)快速響應(yīng)請(qǐng)求很流行的方 法。

除了上述(UNPOOLED)的屬性之外,還有很多屬性可以用來(lái)配置 POOLED 數(shù)據(jù)源:

  • poolMaximumActiveConnections – 在任意時(shí)間存在的活動(dòng)(也就是正在使用)連 接的數(shù)量。默認(rèn)值:10
  • poolMaximumIdleConnections – 任意時(shí)間存在的空閑連接數(shù)。
  • poolMaximumCheckoutTime – 在被強(qiáng)制返回之前,池中連接被檢查的時(shí)間。默認(rèn) 值:20000 毫秒(也就是 20 秒)
  • poolTimeToWait – 這是給連接池一個(gè)打印日志狀態(tài)機(jī)會(huì)的低層次設(shè)置,還有重新 嘗試獲得連接, 這些情況下往往需要很長(zhǎng)時(shí)間 為了避免連接池沒(méi)有配置時(shí)靜默失 敗)。默認(rèn)值:20000 毫秒(也就是 20 秒)
  • poolPingQuery – 發(fā)送到數(shù)據(jù)的偵測(cè)查詢,用來(lái)驗(yàn)證連接是否正常工作,并且準(zhǔn)備 接受請(qǐng)求。默認(rèn)是“NO PING QUERY SET” ,這會(huì)引起許多數(shù)據(jù)庫(kù)驅(qū)動(dòng)連接由一 個(gè)錯(cuò)誤信息而導(dǎo)致失敗。
  • poolPingEnabled – 這是開(kāi)啟或禁用偵測(cè)查詢。如果開(kāi)啟,你必須用一個(gè)合法的 SQL 語(yǔ)句(最好是很快速的)設(shè)置 poolPingQuery 屬性。默認(rèn)值:false。
  • poolPingConnectionsNotUsedFor – 這是用來(lái)配置 poolPingQuery 多次時(shí)間被用一次。 這可以被設(shè)置匹配標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)連接超時(shí)時(shí)間, 來(lái)避免不必要的偵測(cè)。 默認(rèn)值: 0(也就是所有連接每一時(shí)刻都被偵測(cè)-但僅僅當(dāng) poolPingEnabled 為 true 時(shí)適用)。
  • JNDI – 這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)是為了使用如 Spring 或應(yīng)用服務(wù)器這類的容器, 容器可以集 中或在外部配置數(shù)據(jù)源,然后放置一個(gè) JNDI 上下文的引用。

其中JNDI 這個(gè)數(shù)據(jù)源配置只需要兩個(gè)屬 性:

(1)initial_context – 這 個(gè) 屬 性 用 來(lái) 從 初 始 上 下 文 中 尋 找 環(huán) 境 ( 也 就 是 initialContext.lookup(initial——context) 。這是個(gè)可選屬性,如果被忽略,那么 data_source 屬性將會(huì)直接以 initialContext 為背景再次尋找。
(2)data_source – 這是引用數(shù)據(jù)源實(shí)例位置的上下文的路徑。它會(huì)以由 initial_context 查詢返回的環(huán)境為背景來(lái)查找,如果 initial_context 沒(méi)有返回結(jié)果時(shí),直接以初始 上下文為環(huán)境來(lái)查找。
再之后就是Mapper了,Mapper就是映射SQL語(yǔ)句的,首先要告訴mybatis要到哪里去找這些SQL語(yǔ)句,即指定資源位置。

?
1
2
3
<mappers>
    <mapper resource="com/tiantian/mybatis/model/BlogMapper.xml"/>
  </mappers

下面是我在測(cè)試過(guò)程中的一個(gè)簡(jiǎn)單的配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties resource="config/jdbc.properties"></properties>
  <typeAliases>
    <typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/>
  </typeAliases>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/tiantian/mybatis/model/BlogMapper.xml"/>
  </mappers>
</configuration>

 
在上面配置文件中導(dǎo)入了一個(gè)外部的屬性文件,MyBatis配置文件中的屬性引入可以是直接包含在properties元素中的,也可以是利用properties元素從外部引入的,還可以是在創(chuàng)建SqlSessionFactory的時(shí)候,作為一個(gè)參數(shù)properties傳入。既然MyBatis配置文件中的屬性可以從這么多地方引入,那就牽涉到一個(gè)優(yōu)先級(jí)的問(wèn)題,MyBatis將會(huì)按照下面的順序來(lái)尋找它們:
先是配置文件中,properties元素體中的屬性被讀取
再是利用properties元素從外部引入的屬性文件中的屬性被讀取,會(huì)覆蓋前面讀取的相同的屬性
最后是創(chuàng)建SqlSessionFactory時(shí)傳入的properties中的屬性被讀取,同樣會(huì)覆蓋前面相同的屬性

在有了SqlSessionFactory之后就是獲取特定的SqlSession了,在使用mybatis的過(guò)程中每一個(gè)操作都是離不開(kāi)SqlSession的,所以獲取SqlSession是相當(dāng)重要的。此外,SqlSession是不能被共享、線程不安全的,所以在每次需要SqlSession的時(shí)候都應(yīng)該打開(kāi)一個(gè),然后在用完了之后再把它關(guān)上。

?
1
SqlSession session = sqlSessionFactory.openSession();

 
SqlSessionFactory中湖區(qū)SqlSession的方法有:

  • SqlSession openSession() 
  • SqlSession openSession(boolean autoCommit) 
  • SqlSession openSession(Connection connection) 
  • SqlSession openSession(TransactionIsolationLevel level) 
  • SqlSession openSession(ExecutorType execType,TransactionIsolationLevel level) 
  • SqlSession openSession(ExecutorType execType) 
  • SqlSession openSession(ExecutorType execType, boolean autoCommit) 
  • SqlSession openSession(ExecutorType execType, Connection connection) 
  • Configuration getConfiguration(); 

它們的主要區(qū)別在于:

  • Transaction (事務(wù)): 你想為 session 使用事務(wù)或者使用自動(dòng)提交
  • Connection (連接): 你想 MyBatis 獲得來(lái)自配置的數(shù)據(jù)源的連接還是提供你自己
  • Execution (執(zhí)行): 你想 MyBatis 復(fù)用預(yù)處理語(yǔ)句和/或批量更新語(yǔ)句(包括插入和 刪除)

 默認(rèn)的opensession方法沒(méi)有參數(shù),它會(huì)創(chuàng)建有如下特性的SqlSession:

  • 會(huì)開(kāi)啟一個(gè)事務(wù),也就是不自動(dòng)提交
  • 連接對(duì)象會(huì)從當(dāng)前正在使用的environment中的數(shù)據(jù)源中得到
  • 事務(wù)隔離級(jí)別將會(huì)使用驅(qū)動(dòng)或數(shù)據(jù)源的默認(rèn)值
  • 預(yù)處理語(yǔ)句不會(huì)被復(fù)用,也不會(huì)批量更新語(yǔ)句

ExecutorType有三個(gè)值:

  • ExecutorType.SIMPLE 它會(huì)為每個(gè)語(yǔ)句的執(zhí)行創(chuàng)建一個(gè)新的預(yù)處理語(yǔ)句
  • ExecutorType.REUSE 它會(huì)復(fù)用預(yù)處理語(yǔ)句
  • ExecutorType.BATCH 這個(gè)執(zhí)行器會(huì)批量執(zhí)行更新語(yǔ)句

mybatis的基本操作就是增、刪、改、查,即insert、delete、update和select。在進(jìn)行這些基本的操作的時(shí)候可以直接利用SqlSession訪問(wèn)Mapper配置文件里面的映射來(lái)進(jìn)行,也可以利用與Mapper配置文件相對(duì)應(yīng)的Mapper接口來(lái)進(jìn)行操作,條件是Mapper接口中定義的方法的參數(shù)和返回值要與Mapper配置文件中定義的參數(shù)和返回值相同。此外,在使用Mapper接口的時(shí)候,對(duì)應(yīng)的SQL語(yǔ)句是可以寫在Mapper配置文件中的,也可以直接利用對(duì)應(yīng)的注解在Mapper接口中對(duì)應(yīng)的方法上進(jìn)行標(biāo)明,這將在下面的示例代碼中看到。

下面是一系列的示例代碼:
先貼一個(gè)用于獲取SqlSessionFactory的工具類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.io.IOException;
import java.io.InputStream;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
public class Util {
   
  private static SqlSessionFactory sqlSessionFactory = null;
   
  static {
    try {
      InputStream is = Resources.getResourceAsStream("config/mybatis_config.xml");
      sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
     
  }
   
  public static SqlSessionFactory getSqlSessionFactory() {
    return sqlSessionFactory;
  }
   
}

 
mybatis的配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <properties resource="config/jdbc.properties"></properties>
  <typeAliases>
    <typeAlias alias="Blog" type="com.tiantian.mybatis.model.Blog"/>
  </typeAliases>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/tiantian/mybatis/model/BlogMapper.xml"/>
  </mappers>
</configuration>

 
BlogMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?> 
  2. <!DOCTYPE mapper 
  3.  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
  4.  "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  5.   
  6. <mapper namespace="com.tiantian.mybatis.model.BlogMapper"
  7. <!-- 新增記錄 --> 
  8.   <insert id="insertBlog" parameterType="Blog"
  9.     insert into t_blog(title,content,owner) values(#{title},#{content},#{owner}) 
  10.   </insert> 
  11. <!-- 查詢單條記錄 --> 
  12.   <select id="selectBlog" parameterType="int" resultType="Blog"
  13.     select * from t_blog where id = #{id} 
  14.   </select> 
  15. <!-- 修改記錄  --> 
  16.   <update id="updateBlog" parameterType="Blog"
  17.     update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id} 
  18.   </update> 
  19. <!-- 查詢所有記錄,查詢多條記錄即返回結(jié)果是一個(gè)集合的時(shí)候,resultType不是集合類型,而是集合所包含的類型 --> 
  20.   <select id="selectAll" resultType="Blog"
  21.     select * from t_blog 
  22.   </select> 
  23. <!-- 模糊查詢  --> 
  24.   <select id="fuzzyQuery" resultType="Blog" parameterType="java.lang.String"
  25.     select * from t_blog where title like "%"#{title}"%" 
  26.   </select> 
  27. <!-- 刪除記錄  --> 
  28.   <delete id="deleteBlog" parameterType="int"
  29.     delete from t_blog where id = #{id} 
  30.   </delete
  31. </mapper> 

SQL映射語(yǔ)句中一些應(yīng)該注意的問(wèn)題:

  •  resultType的值應(yīng)該是返回類型的完全名或別名,當(dāng)返回的結(jié)果是一個(gè)集合的時(shí)候,resultType應(yīng)為集合中所包含的類型,而不是集合類型,如上面的Blog
  • resultType和resultMap都是表示指定返回結(jié)果的,但兩者不能同時(shí)使用
  • 對(duì)于Insert映射語(yǔ)句有一個(gè)useGeneratedKeys屬性,該屬性的默認(rèn)值為false,當(dāng)該屬性的值為true時(shí),在進(jìn)行插入操作時(shí),mybatis會(huì)取到當(dāng)前正在插入的記錄在數(shù)據(jù)庫(kù)中的自動(dòng)遞增的主鍵值,并把它設(shè)置給指定的實(shí)體的屬性,這就需要設(shè)置一個(gè)keyProperty屬性,用于指定實(shí)體中表示主鍵的屬性

Blog.java

  1. package com.tiantian.mybatis.model; 
  2.   
  3. public class Blog { 
  4.   
  5.   private int id; 
  6.   
  7.   private String title; 
  8.   
  9.   private String content; 
  10.   
  11.   private String owner; 
  12.   
  13.   public int getId() { 
  14.     return id; 
  15.   } 
  16.   
  17.   public void setId(int id) { 
  18.     this.id = id; 
  19.   } 
  20.   
  21.   public String getTitle() { 
  22.     return title; 
  23.   } 
  24.   
  25.   public void setTitle(String title) { 
  26.     this.title = title; 
  27.   } 
  28.   
  29.   public String getContent() { 
  30.     return content; 
  31.   } 
  32.   
  33.   public void setContent(String content) { 
  34.     this.content = content; 
  35.   } 
  36.   
  37.   public String getOwner() { 
  38.     return owner; 
  39.   } 
  40.   
  41.   public void setOwner(String owner) { 
  42.     this.owner = owner; 
  43.   } 
  44.   
  45.   @Override 
  46.   public String toString() { 
  47.     return "id: " + id + ", title: " + title + ", content: " + content  
  48.         + ", owner: " + owner; 
  49.   } 
  50.   

 
BlogMapper.java

  1. package com.tiantian.mybatis.model; 
  2.   
  3. import java.util.List; 
  4.   
  5. import org.apache.ibatis.annotations.Delete; 
  6. import org.apache.ibatis.annotations.Insert; 
  7. import org.apache.ibatis.annotations.Select; 
  8. import org.apache.ibatis.annotations.Update; 
  9.   
  10. /** 
  11.  * 以下的操作1都是把SQL寫在配置文件里面的,而操作2都是直接用注解標(biāo)明要執(zhí)行的SQL語(yǔ)句 
  12.  * 因?yàn)樵揗apper的全名跟BlogMapper.xml文件里面的namespace是一樣的,所以不能在這里面 
  13.  * 用注解定義一個(gè)與BlogMapper.xml文件里面同名的映射 
  14.  * @author andy 
  15.  * 
  16.  */ 
  17. public interface BlogMapper { 
  18.   
  19.   public Blog selectBlog(int id); 
  20.     
  21.   @Select("select * from t_blog where id = #{id}"
  22.   public Blog selectBlog2(int id); 
  23.     
  24.   public void insertBlog(Blog blog); 
  25.     
  26.   @Insert("insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})"
  27.   public void insertBlog2(Blog blog); 
  28.     
  29.   public void updateBlog(Blog blog); 
  30.     
  31.   @Update("update t_blog set title=#{title},content=#{content},owner=#{owner} where id=#{id}")  
  32.   public void updateBlog2(Blog blog); 
  33.     
  34.   public void deleteBlog(int id);  
  35.     
  36.   @Delete("delete from t_blog where id = #{id}"
  37.   public void deleteBlog2(int id); 
  38.     
  39.   public List<Blog> selectAll(); 
  40.     
  41.   @Select("select * from t_blog"
  42.   public List<Blog> selectAll2(); 
  43.     
  44.   public List<Blog> fuzzyQuery(String title); 
  45.     
  46.   @Select("select * from t_blog where title like "%"#{title}"%""
  47.   public List<Blog> fuzzyQuery2(String title); 
  48.     

 
Test1.java

  1. package com.tiantian.mybatis.test; 
  2.   
  3. import java.util.List; 
  4.   
  5. import org.apache.ibatis.session.SqlSession; 
  6. import org.junit.Test; 
  7.   
  8. import com.tiantian.mybatis.model.Blog; 
  9. import com.tiantian.mybatis.util.Util; 
  10.   
  11. /** 
  12.  * 該系列操作是通過(guò)把SQL寫在配置文件里面, 
  13.  * 然后利用SqlSession進(jìn)行操作的 
  14.  * @author andy 
  15.  * 
  16.  */ 
  17. public class Test1 { 
  18.   
  19.   /** 
  20.    * 新增記錄 
  21.    */ 
  22.   @Test 
  23.   public void testInsertBlog() { 
  24.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  25.     Blog blog = new Blog(); 
  26.     blog.setTitle("中國(guó)人"); 
  27.     blog.setContent("五千年的風(fēng)和雨啊藏了多少夢(mèng)"); 
  28.     blog.setOwner("天天"); 
  29.     session.insert("com.tiantian.mybatis.model.BlogMapper.insertBlog", blog); 
  30.     session.commit(); 
  31.     session.close(); 
  32.   } 
  33.     
  34.   /** 
  35.    * 查詢單條記錄 
  36.    */ 
  37.   @Test 
  38.   public void testSelectOne() { 
  39.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  40.     Blog blog = (Blog)session.selectOne("com.tiantian.mybatis.model.BlogMapper.selectBlog", 8); 
  41.     System.out.println(blog); 
  42.     session.close(); 
  43.   } 
  44.     
  45.   /** 
  46.    * 修改記錄 
  47.    */ 
  48.   @Test 
  49.   public void testUpdateBlog() { 
  50.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  51.     Blog blog = new Blog(); 
  52.     blog.setId(7);//需要修改的Blog的id 
  53.     blog.setTitle("中國(guó)人2");//修改Title 
  54.     blog.setContent("黃色的臉,黑色的眼,不變是笑容");//修改Content 
  55.     blog.setOwner("天天2");//修改Owner 
  56.     session.update("com.tiantian.mybatis.model.BlogMapper.updateBlog", blog); 
  57.     session.commit(); 
  58.     session.close(); 
  59.   } 
  60.     
  61.   /** 
  62.    * 查詢所有的記錄 
  63.    */ 
  64.   @Test 
  65.   public void testSelectAll() { 
  66.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  67.     List<Blog> blogs = session.selectList("com.tiantian.mybatis.model.BlogMapper.selectAll"); 
  68.     for (Blog blog:blogs) 
  69.       System.out.println(blog); 
  70.     session.close(); 
  71.   } 
  72.     
  73.   /** 
  74.    * 模糊查詢 
  75.    */ 
  76.   @Test 
  77.   public void testFuzzyQuery() { 
  78.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  79.     String title = "中國(guó)"
  80.     List<Blog> blogs = session.selectList("com.tiantian.mybatis.model.BlogMapper.fuzzyQuery", title);  
  81.     for (Blog blog:blogs) 
  82.       System.out.println(blog); 
  83.     session.close(); 
  84.   } 
  85.     
  86.   /** 
  87.    * 刪除記錄 
  88.    */ 
  89.   @Test 
  90.   public void testDeleteBlog() { 
  91.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  92.     session.delete("com.tiantian.mybatis.model.BlogMapper.deleteBlog", 8); 
  93.     session.commit(); 
  94.     session.close(); 
  95.   } 
  96.     

 
Test2.java

  1. package com.tiantian.mybatis.test; 
  2.   
  3. import java.util.List; 
  4.   
  5. import org.apache.ibatis.session.SqlSession; 
  6. import org.junit.Test; 
  7.   
  8. import com.tiantian.mybatis.model.Blog; 
  9. import com.tiantian.mybatis.model.BlogMapper; 
  10. import com.tiantian.mybatis.util.Util; 
  11.   
  12. /** 
  13.  * 該系列操作是將SQL語(yǔ)句寫在配置文件里面, 
  14.  * 然后通過(guò)對(duì)應(yīng)Mapper接口來(lái)進(jìn)行操作的 
  15.  * @author andy 
  16.  * 
  17.  */ 
  18. public class Test2 { 
  19.   
  20.   /** 
  21.    * 新增記錄 
  22.    */ 
  23.   @Test 
  24.   public void testInsertBlog() { 
  25.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  26.     Blog blog = new Blog(); 
  27.     blog.setTitle("中國(guó)人"); 
  28.     blog.setContent("五千年的風(fēng)和雨啊藏了多少夢(mèng)"); 
  29.     blog.setOwner("天天"); 
  30.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  31.     blogMapper.insertBlog(blog); 
  32.     session.commit(); 
  33.     session.close(); 
  34.   } 
  35.   
  36.   /** 
  37.    * 查詢單條記錄 
  38.    */ 
  39.   @Test 
  40.   public void testSelectOne() { 
  41.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  42.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  43.     Blog blog = blogMapper.selectBlog(7); 
  44.     System.out.println(blog); 
  45.     session.close(); 
  46.   } 
  47.   
  48.   /** 
  49.    * 修改記錄 
  50.    */ 
  51.   @Test 
  52.   public void testUpdateBlog() { 
  53.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  54.     Blog blog = new Blog(); 
  55.     blog.setId(9);// 需要修改的Blog的id 
  56.     blog.setTitle("中國(guó)人2");// 修改Title 
  57.     blog.setContent("黃色的臉,黑色的眼,不變是笑容");// 修改Content  
  58.     blog.setOwner("天天2");// 修改Owner 
  59.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  60.     blogMapper.updateBlog(blog); 
  61.     session.commit(); 
  62.     session.close(); 
  63.   } 
  64.   
  65.   /** 
  66.    * 查詢所有記錄 
  67.    */ 
  68.   @Test 
  69.   public void testSelectAll() { 
  70.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  71.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  72.     List<Blog> blogs = blogMapper.selectAll(); 
  73.     for (Blog blog : blogs) 
  74.       System.out.println(blog); 
  75.     session.close(); 
  76.   } 
  77.   
  78.   /** 
  79.    * 模糊查詢 
  80.    */ 
  81.   @Test 
  82.   public void testFuzzyQuery() { 
  83.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  84.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  85.     String title = "中國(guó)"
  86.     List<Blog> blogs = blogMapper.fuzzyQuery(title); 
  87.     for (Blog blog : blogs) 
  88.       System.out.println(blog); 
  89.     session.close(); 
  90.   } 
  91.   
  92.   /** 
  93.    * 刪除記錄 
  94.    */ 
  95.   @Test 
  96.   public void testDeleteBlog() { 
  97.     SqlSession session = Util.getSqlSessionFactory().openSession(); 
  98.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  99.     blogMapper.deleteBlog(10); 
  100.     session.commit(); 
  101.     session.close(); 
  102.   } 
  103.   

 
Test3.java

  1. package com.tiantian.mybatis.test; 
  2.   
  3. import java.util.List; 
  4.   
  5. import org.apache.ibatis.session.SqlSession; 
  6. import org.junit.Test; 
  7.   
  8. import com.tiantian.mybatis.model.Blog; 
  9. import com.tiantian.mybatis.model.BlogMapper; 
  10. import com.tiantian.mybatis.util.Util; 
  11.   
  12. /** 
  13.  * 該系列操作是利用Mapper接口來(lái)進(jìn)行的 
  14.  * ,然而其相應(yīng)的SQL語(yǔ)句是通過(guò)對(duì)應(yīng)的 
  15.  * 注解Annotation在Mapper中對(duì)應(yīng)的方法上定義的 
  16.  * @author andy 
  17.  * 
  18.  */ 
  19. public class Test3 { 
  20.   
  21.   /** 
  22.    * 新增記錄 
  23.    */ 
  24.   @Test 
  25.   public void testInsert() { 
  26.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  27.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  28.     Blog blog = new Blog(); 
  29.     blog.setTitle("title2"); 
  30.     blog.setContent("content2"); 
  31.     blog.setOwner("owner2"); 
  32.     blogMapper.insertBlog2(blog); 
  33.     session.commit(); 
  34.     session.close(); 
  35.   } 
  36.     
  37.   /** 
  38.    * 查找單條記錄 
  39.    */ 
  40.   @Test 
  41.   public void testSelectOne() { 
  42.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  43.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  44.     Blog blog = blogMapper.selectBlog2(1); 
  45.     System.out.println(blog); 
  46.     session.close(); 
  47.   } 
  48.     
  49.   /** 
  50.    * 查找多條記錄,返回結(jié)果為一集合 
  51.    */ 
  52.   @Test 
  53.   public void testSelectAll() { 
  54.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  55.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  56.     List<Blog> blogs = blogMapper.selectAll2(); 
  57.     for (Blog blog:blogs) 
  58.       System.out.println(blog); 
  59.     session.close(); 
  60.   } 
  61.     
  62.   /** 
  63.    * 修改某條記錄 
  64.    */ 
  65.   @Test 
  66.   public void testUpdate() { 
  67.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  68.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  69.     Blog blog = new Blog(); 
  70.     blog.setId(3); 
  71.     blog.setTitle("title3"); 
  72.     blog.setContent("content3"); 
  73.     blog.setOwner("owner3"); 
  74.     blogMapper.updateBlog2(blog); 
  75.     session.commit(); 
  76.     session.close(); 
  77.   } 
  78.     
  79.   /** 
  80.    * 刪除記錄 
  81.    */ 
  82.   @Test 
  83.   public void testDelete() { 
  84.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  85.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  86.     blogMapper.deleteBlog2(5); 
  87.     session.commit(); 
  88.     session.close(); 
  89.   } 
  90.     
  91.   @Test 
  92.   public void testFuzzyQuery() { 
  93.     SqlSession session = Util.getSqlSessionFactory().openSession();  
  94.     BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
  95.     List<Blog> blogs = blogMapper.fuzzyQuery2("中國(guó)"); 
  96.     for (Blog blog:blogs) 
  97.       System.out.println(blog); 
  98.     session.close(); 
  99.   } 
  100.     

對(duì)應(yīng)的建表語(yǔ)句:

?
1
2
3
4
5
6
7
CREATE TABLE `t_blog` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `title` varchar(255) DEFAULT NULL,
 `content` varchar(255) DEFAULT NULL,
 `owner` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`id`)
)

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九热在线视频 | 久久综合久久综合久久 | 久久国产精品二区 | 四虎新网站 | 国产一区二区视频在线观看 | 91免费视频 | 日本黄色免费播放 | 精品国产一区二区三区性色av | 国产成人网 | 久久伊人网视频 | 日日操天天爽 | 久久综合激情 | 国产一区免费 | 毛片免费电影 | 亚洲免费视频网 | 国产a视频 | 国产欧美久久久久久 | 亚洲欧美一区二区三区在线 | 国产欧美一区二区精品性色 | 久久综合一区二区三区 | 精品久久99 | 久久久久久久av | 中文字幕在线视频观看 | 激情视频网 | 国产精品久久久久久 | 久久国产精品久久国产精品 | 日韩亚洲一区二区 | 久久国产精品一区二区 | 九九久久国产 | 午夜免费福利视频 | 91久久精品国产91久久 | 久久久久综合 | 精品一区二区三区免费视频 | 成人免费视频网站在线观看 | 亚洲高清视频在线 | 国产美女久久久 | 亚洲精品在线视频 | 久久精选 | 成人免费视频网站在线观看 | 免费一区| 国产欧美日韩一区二区三区四区 |