每 一 個 MyBatis 的 應 用 程 序 都 以 一 個 SqlSessionFactory 對 象 的 實 例 爲 核 心 。SqlSessionFactory自己是由SqlSessionFactoryBuilder建立的,通常而言,在一個應用中,一個數據庫只會對應一個SqlSessionFactory,因此通常咱們都把SqlSessionFactory定義成單例模式,或經過Spring等進行注入。java
SqlSessionFactoryBuilder建立SqlSessionFactory的方法有:sql
SqlSessionFactory build(InputStream inputStream) apache
SqlSessionFactory build(InputStream inputStream, String environment) 安全
SqlSessionFactory build(InputStream inputStream, Properties properties) 服務器
SqlSessionFactory build(InputStream inputStream, String env, Properties props) session
SqlSessionFactory build(Configuration config) mybatis
這些方法主要設計到的參數有InputStream,environment,properties,其中InputStream是從配置文件中獲取的一個輸入流;environment表示在配置文件裏面配置的衆多的environment中,當前要使用的是哪個environment,包括數據源和事務,缺省則使用默認的environment;使用properties,MyBatis則會加載對應的屬性或文件,它們能夠在配置文件中使用。 app
從XML中構建SqlSessionFactoryide
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的配置文件通常包括以下幾個部分:
properties:properties用於定義或導入屬性,而後在後面的環境中使用
settings:settings用於設置一些mybatis在運行時的行爲方式,具體的設置信息能夠查看mybatis的文檔
typeAliases:typeAliases是爲系統中的Java類型指定一個較短的別名
environments:MyBatis 能夠配置多種環境。這會幫助你將 SQL 映射應用於多種數據庫之中。
<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能夠配置多個environment,因此能夠在建立SqlSessionFactory的時候指定具體的環境來建立特定的環境下的SqlSessionFactory, 不指定則使用默認的環境。
transactionManager
在 MyBatis 中有兩種事務管理器類型(也就是 type=」[JDBC|MANAGED]」):
JDBC – 這個配置直接簡單使用了 JDBC 的提交和回滾設置。 它依賴於從數據源得 到的鏈接來管理事務範圍。
MANAGED – 這個配置幾乎沒作什麼。它歷來不提交或回滾一個鏈接。而它會讓 容器來管理事務的整個生命週期(好比 Spring 或 JEE 應用服務器的上下文) 默認 狀況下它會關閉鏈接。 然而一些容器並不但願這樣, 所以若是你須要從鏈接中中止 它,將 closeConnection 屬性設置爲 false。
dataSource
dataSource 元素使用基本的 JDBC 數據源接口來配置 JDBC 鏈接對象的資源。
許多 MyBatis 的應用程序將會按示例中的例子來配置數據源。 然而它並非必須的。 要知道爲了方便使用延遲加載,數據源纔是必須的。
有三種內建的數據源類型(也就是 type=」???」):
UNPOOLED – 這個數據源的實現是每次被請求時簡單打開和關閉鏈接。它有一點慢, 這是對簡單應用程序的一個很好的選擇, 由於它不須要及時的可用鏈接。 不一樣的數據庫對這 個的表現也是不同的, 因此對某些數據庫來講配置數據源並不重要, 這個配置也是閒置的。 UNPOOLED 類型的數據源僅僅用來配置如下 5 種屬性:
driver – 這是 JDBC 驅動的 Java 類的徹底限定名(若是你的驅動包含,它也不是 數據源類)。
url – 這是數據庫的 JDBC URL 地址。
username – 登陸數據庫的用戶名。
password – 登陸數據庫的密碼。
defaultTransactionIsolationLevel – 默認的鏈接事務隔離級別。
做爲可選項,你能夠傳遞數據庫驅動的屬性。要這樣作,屬性的前綴是以「driver.」開 頭的,例如:
driver.encoding=UTF8
這 樣 就 會 傳 遞 以 值 「 UTF8 」 來 傳 遞 屬 性 「 encoding 」, 它 是 通 過 DriverManager.getConnection(url,driverProperties)方法傳遞給數據庫驅動。
POOLED – 這是 JDBC 鏈接對象的數據源鏈接池的實現,用來避免建立新的鏈接實例 時必要的初始鏈接和認證時間。這是一種當前 Web 應用程序用來快速響應請求很流行的方 法。
除了上述(UNPOOLED)的屬性以外,還有不少屬性能夠用來配置 POOLED 數據源:
poolMaximumActiveConnections – 在任意時間存在的活動(也就是正在使用)連 接的數量。默認值:10
poolMaximumIdleConnections – 任意時間存在的空閒鏈接數。
poolMaximumCheckoutTime – 在被強制返回以前,池中鏈接被檢查的時間。默認 值:20000 毫秒(也就是 20 秒)
poolTimeToWait – 這是給鏈接池一個打印日誌狀態機會的低層次設置,還有從新 嘗試得到鏈接, 這些狀況下每每須要很長時間 爲了不鏈接池沒有配置時靜默失 敗)。默認值:20000 毫秒(也就是 20 秒)
poolPingQuery – 發送到數據的偵測查詢,用來驗證鏈接是否正常工做,而且準備 接受請求。默認是「NO PING QUERY SET」 ,這會引發許多數據庫驅動鏈接由一 個錯誤信息而致使失敗。
poolPingEnabled – 這是開啓或禁用偵測查詢。若是開啓,你必須用一個合法的 SQL 語句(最好是很快速的)設置 poolPingQuery 屬性。默認值:false。
poolPingConnectionsNotUsedFor – 這是用來配置 poolPingQuery 屢次時間被用一次。 這能夠被設置匹配標準的數據庫鏈接超時時間, 來避免沒必要要的偵測。 默認值: 0(也就是全部鏈接每一時刻都被偵測-但僅僅當 poolPingEnabled 爲 true 時適用)。
JNDI – 這個數據源的實現是爲了使用如 Spring 或應用服務器這類的容器, 容器能夠集 中或在外部配置數據源,而後放置一個 JNDI 上下文的引用。這個數據源配置只須要兩個屬 性:
initial_context – 這 個 屬 性 用 來 從 初 始 上 下 文 中 尋 找 環 境 ( 也 就 是 initialContext.lookup(initial——context) 。這是個可選屬性,若是被忽略,那麼 data_source 屬性將會直接以 initialContext 爲背景再次尋找。
data_source – 這是引用數據源實例位置的上下文的路徑。它會以由 initial_context 查詢返回的環境爲背景來查找,若是 initial_context 沒有返回結果時,直接以初始 上下文爲環境來查找。
再以後就是Mapper了,Mapper就是映射SQL語句的,首先要告訴mybatis要到哪裏去找這些SQL語句,即指定資源位置。
<mappers>
<mapper resource="com/tiantian/mybatis/model/BlogMapper.xml"/>
</mappers>
下面是我在測試過程當中的一個簡單的配置文件:
<?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>
在上面配置文件中導入了一個外部的屬性文件,MyBatis配置文件中的屬性引入能夠是直接包含在properties元素中的,也能夠是利用properties元素從外部引入的,還能夠是在建立SqlSessionFactory的時候,做爲一個參數properties傳入。既然MyBatis配置文件中的屬性能夠從這麼多地方引入,那就牽涉到一個優先級的問題,MyBatis將會按照下面的順序來尋找它們:
先是配置文件中,properties元素體中的屬性被讀取
再是利用properties元素從外部引入的屬性文件中的屬性被讀取,會覆蓋前面讀取的相同的屬性
最後是建立SqlSessionFactory時傳入的properties中的屬性被讀取,一樣會覆蓋前面相同的屬性
在有了SqlSessionFactory以後就是獲取特定的SqlSession了,在使用mybatis的過程當中每個操做都是離不開SqlSession的,因此獲取SqlSession是至關重要的。此外,SqlSession是不能被共享、線程不安全的,因此在每次須要SqlSession的時候都應該打開一個,而後在用完了以後再把它關上。
SqlSession session = sqlSessionFactory.openSession();
SqlSessionFactory中湖區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();
它們的主要區別在於:
Transaction (事務): 你想爲 session 使用事務或者使用自動提交
Connection (鏈接): 你想 MyBatis 得到來自配置的數據源的鏈接仍是提供你本身
Execution (執行): 你想 MyBatis 複用預處理語句和/或批量更新語句(包括插入和 刪除)
默認的opensession方法沒有參數,它會建立有以下特性的SqlSession:
會開啓一個事務,也就是不自動提交
鏈接對象會從當前正在使用的environment中的數據源中獲得
事務隔離級別將會使用驅動或數據源的默認值
預處理語句不會被複用,也不會批量更新語句
ExecutorType有三個值:
ExecutorType.SIMPLE 它會爲每一個語句的執行建立一個新的預處理語句
ExecutorType.REUSE 它會複用預處理語句
ExecutorType.BATCH 這個執行器會批量執行更新語句
mybatis的基本操做就是增、刪、改、查,即insert、delete、update和select。在進行這些基本的操做的時候能夠直接利用SqlSession訪問Mapper配置文件裏面的映射來進行,也能夠利用與Mapper配置文件相對應的Mapper接口來進行操做,條件是Mapper接口中定義的方法的參數和返回值要與Mapper配置文件中定義的參數和返回值相同。此外,在使用Mapper接口的時候,對應的SQL語句是能夠寫在Mapper配置文件中的,也能夠直接利用對應的註解在Mapper接口中對應的方法上進行標明,這將在下面的示例代碼中看到。
下面是一系列的示例代碼:
先貼一個用於獲取SqlSessionFactory的工具類:
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的配置文件:
<?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
<?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="com.tiantian.mybatis.model.BlogMapper">
<!-- 新增記錄 -->
<insert id="insertBlog" parameterType="Blog">
insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})
</insert>
<!-- 查詢單條記錄 -->
<select id="selectBlog" parameterType="int" resultType="Blog">
select * from t_blog where id = #{id}
</select>
<!-- 修改記錄 -->
<update id="updateBlog" parameterType="Blog">
update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id}
</update>
<!-- 查詢全部記錄,查詢多條記錄即返回結果是一個集合的時候,resultType不是集合類型,而是集合所包含的類型 -->
<select id="selectAll" resultType="Blog">
select * from t_blog
</select>
<!-- 模糊查詢 -->
<select id="fuzzyQuery" resultType="Blog" parameterType="java.lang.String">
select * from t_blog where title like "%"#{title}"%"
</select>
<!-- 刪除記錄 -->
<delete id="deleteBlog" parameterType="int">
delete from t_blog where id = #{id}
</delete>
</mapper>
SQL映射語句中一些應該注意的問題:
resultType的值應該是返回類型的徹底名或別名,當返回的結果是一個集合的時候,resultType應爲集合中所包含的類型,而不是集合類型,如上面的Blog
resultType和resultMap都是表示指定返回結果的,但二者不能同時使用
對於Insert映射語句有一個useGeneratedKeys屬性,該屬性的默認值爲false,當該屬性的值爲true時,在進行插入操做時,mybatis會取到當前正在插入的記錄在數據庫中的自動遞增的主鍵值,並把它設置給指定的實體的屬性,這就須要設置一個keyProperty屬性,用於指定實體中表示主鍵的屬性
Blog.java
package com.tiantian.mybatis.model;
public class Blog {
private int id;
private String title;
private String content;
private String owner;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getOwner() {
return owner;
}
public void setOwner(String owner) {
this.owner = owner;
}
@Override
public String toString() {
return "id: " + id + ", title: " + title + ", content: " + content
+ ", owner: " + owner;
}
}
BlogMapper.java
package com.tiantian.mybatis.model;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
/**
* 如下的操做1都是把SQL寫在配置文件裏面的,而操做2都是直接用註解標明要執行的SQL語句
* 由於該Mapper的全名跟BlogMapper.xml文件裏面的namespace是同樣的,因此不能在這裏面
* 用註解定義一個與BlogMapper.xml文件裏面同名的映射
* @author andy
*
*/
public interface BlogMapper {
public Blog selectBlog(int id);
@Select ("select * from t_blog where id = #{id}")
public Blog selectBlog2(int id);
public void insertBlog(Blog blog);
@Insert("insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})")
public void insertBlog2(Blog blog);
public void updateBlog(Blog blog);
@Update ("update t_blog set title=#{title},content=#{content},owner=#{owner} where id=#{id}")
public void updateBlog2(Blog blog);
public void deleteBlog(int id);
@Delete("delete from t_blog where id = #{id}")
public void deleteBlog2(int id);
public List<Blog> selectAll();
@Select("select * from t_blog")
public List<Blog> selectAll2();
public List<Blog> fuzzyQuery(String title);
@Select("select * from t_blog where title like \"%\"#{title}\"%\"")
public List<Blog> fuzzyQuery2(String title);
}
Test1.java
package com.tiantian.mybatis.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.tiantian.mybatis.model.Blog;
import com.tiantian.mybatis.util.Util;
/**
* 該系列操做是經過把SQL寫在配置文件裏面,
* 而後利用SqlSession進行操做的
* @author andy
*
*/
public class Test1 {
/**
* 新增記錄
*/
@Test
public void testInsertBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
Blog blog = new Blog();
blog.setTitle("中國人");
blog.setContent("五千年的風和雨啊藏了多少夢");
blog.setOwner("每天");
session.insert("com.tiantian.mybatis.model.BlogMapper.insertBlog", blog);
session.commit();
session.close();
}
/**
* 查詢單條記錄
*/
@Test
public void testSelectOne() {
SqlSession session = Util.getSqlSessionFactory().openSession();
Blog blog = (Blog)session.selectOne("com.tiantian.mybatis.model.BlogMapper.selectBlog", 8);
System.out.println(blog);
session.close();
}
/**
* 修改記錄
*/
@Test
public void testUpdateBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
Blog blog = new Blog();
blog.setId(7);//須要修改的Blog的id
blog.setTitle("中國人2");//修改Title
blog.setContent("黃色的臉,黑色的眼,不變是笑容");//修改Content
blog.setOwner("每天2");//修改Owner
session.update("com.tiantian.mybatis.model.BlogMapper.updateBlog", blog);
session.commit();
session.close();
}
/**
* 查詢全部的記錄
*/
@Test
public void testSelectAll() {
SqlSession session = Util.getSqlSessionFactory().openSession();
List<Blog> blogs = session.selectList("com.tiantian.mybatis.model.BlogMapper.selectAll");
for (Blog blog:blogs)
System.out.println(blog);
session.close();
}
/**
* 模糊查詢
*/
@Test
public void testFuzzyQuery() {
SqlSession session = Util.getSqlSessionFactory().openSession();
String title = "中國";
List<Blog> blogs = session.selectList("com.tiantian.mybatis.model.BlogMapper.fuzzyQuery", title);
for (Blog blog:blogs)
System.out.println(blog);
session.close();
}
/**
* 刪除記錄
*/
@Test
public void testDeleteBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
session.delete("com.tiantian.mybatis.model.BlogMapper.deleteBlog", 8);
session.commit();
session.close();
}
}
Test2.java
package com.tiantian.mybatis.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.tiantian.mybatis.model.Blog;
import com.tiantian.mybatis.model.BlogMapper;
import com.tiantian.mybatis.util.Util;
/**
* 該系列操做是將SQL語句寫在配置文件裏面,
* 而後經過對應Mapper接口來進行操做的
* @author andy
*
*/
public class Test2 {
/**
* 新增記錄
*/
@Test
public void testInsertBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
Blog blog = new Blog();
blog.setTitle("中國人");
blog.setContent("五千年的風和雨啊藏了多少夢");
blog.setOwner("每天");
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
blogMapper.insertBlog(blog);
session.commit();
session.close();
}
/**
* 查詢單條記錄
*/
@Test
public void testSelectOne() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog = blogMapper.selectBlog(7);
System.out.println(blog);
session.close();
}
/**
* 修改記錄
*/
@Test
public void testUpdateBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
Blog blog = new Blog();
blog.setId(9);// 須要修改的Blog的id
blog.setTitle("中國人2");// 修改Title
blog.setContent("黃色的臉,黑色的眼,不變是笑容");// 修改Content
blog.setOwner("每天2");// 修改Owner
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
blogMapper.updateBlog(blog);
session.commit();
session.close();
}
/**
* 查詢全部記錄
*/
@Test
public void testSelectAll() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Blog> blogs = blogMapper.selectAll();
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}
/**
* 模糊查詢
*/
@Test
public void testFuzzyQuery() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
String title = "中國";
List<Blog> blogs = blogMapper.fuzzyQuery(title);
for (Blog blog : blogs)
System.out.println(blog);
session.close();
}
/**
* 刪除記錄
*/
@Test
public void testDeleteBlog() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
blogMapper.deleteBlog(10);
session.commit();
session.close();
}
}
Test3.java
package com.tiantian.mybatis.test;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.tiantian.mybatis.model.Blog;
import com.tiantian.mybatis.model.BlogMapper;
import com.tiantian.mybatis.util.Util;
/**
* 該系列操做是利用Mapper接口來進行的
* ,然而其相應的SQL語句是經過對應的
* 註解Annotation在Mapper中對應的方法上定義的
* @author andy
*
*/
public class Test3 {
/**
* 新增記錄
*/
@Test
public void testInsert() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog = new Blog();
blog.setTitle("title2");
blog.setContent("content2");
blog.setOwner("owner2");
blogMapper.insertBlog2(blog);
session.commit();
session.close();
}
/**
* 查找單條記錄
*/
@Test
public void testSelectOne() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog = blogMapper.selectBlog2(1);
System.out.println(blog);
session.close();
}
/**
* 查找多條記錄,返回結果爲一集合
*/
@Test
public void testSelectAll() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Blog> blogs = blogMapper.selectAll2();
for (Blog blog:blogs)
System.out.println(blog);
session.close();
}
/**
* 修改某條記錄
*/
@Test
public void testUpdate() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
Blog blog = new Blog();
blog.setId(3);
blog.setTitle("title3");
blog.setContent("content3");
blog.setOwner("owner3");
blogMapper.updateBlog2(blog);
session.commit();
session.close();
}
/**
* 刪除記錄
*/
@Test
public void testDelete() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
blogMapper.deleteBlog2(5);
session.commit();
session.close();
}
@Test
public void testFuzzyQuery() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
List<Blog> blogs = blogMapper.fuzzyQuery2("中國");
for (Blog blog:blogs)
System.out.println(blog);
session.close();
}
}
對應的建表語句:
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`)
)