試用MyBatis框架
1.<b>下面以“MyCinema”數據庫作為示範來講解MyBatis的使用</b>
2.在項目中導入MyBatis框架jar包
使用MyBatis開發數據訪問層,只需要導入mybatis-3.x.x.jar和對應的JDBC驅動即可。以下使用兩種方式導入相關依賴。
(1)直接導入
(2)使用Maven
<dependencies>
<!-- JDBC MySQL 驅動 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.8</version>
</dependency>
<!-- MyBatis 核心依賴 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.5</version>
</dependency>
</dependencies>
3.設置MyBatis框架的配置信息
MyBatis框架需要兩種配置文件:“主配置文件”和“查詢映射配置文件”。
主配置文件(mybatis.xml),用於配置“數據庫會話工廠”,主要作包括:1)數據庫連接(連接池)信息;2)指定其他查詢映射配置文件的位置。
查詢映射配置文件(CategoryMapper.xml),一般用於配置某實體類(Category.java)的CURD操作所涉及的SQL語句。
如果是Maven項目,這些配置信息都應該放在Resources目錄中。
(1)創建“MyBatis主配置文件”
在“類目錄”下創建名為mybatis.xml(文件名可自定)的文件,配置內容如下:
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/MyCinema" />
<property name="username" value="root" />
<property name="password" value="1234" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/CategoryMapper.xml" />
</mappers>
</configuration>
其中,“紅色字體”部份用於配置數據庫的連接信息(JDBC驅動、數據庫url、用戶名和密碼);而“藍色字體”部分用於指定針對實體類的查詢映射配置文件的位置。
(2)創建查詢映射配置文件
創建數據實體類Category.java和實體映射文件CategoryMapper.xml。
以下實體類表示電影分類,與數據庫的Category表對應。
public class Category {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Category的查詢映射文件的結構如下所示:
<?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="mycinema.dao.CategoryMapper">
<select id="fetchById" parameterType="int" resultType="mycinema.entity.Category">
select * from Category where id=#{id}
</select>
</mapper>
每添加一個實體配置文件,就應該在主配置文件(mybatis.xml)中加入一個<mapper>元素,以告知框架要把該實體加入到映射中,詳見上一節mybatis.xml配置中的藍色字體部份。
註意點:
1)mapper元素的namespace與select元素的id共同決定了一個SQL語句的“坐標”,在MyBatis框架執行查詢時,使用坐標標識所調用的SQL
2)SQL語句中的參數通過“#{參數名}”的方式聲明,而參數類型需要通過select元素的parameterType來聲明
3)select元素通過resultType來聲明返回類型(實體對象)
4.創建MyBatis數據庫會話(SqlSession)並執行查詢
InputStream is = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
SqlSession session = factory.openSession();
try {
Category c = (Category)session.selectOne("mycinema.dao.CategoryMapper.fetchById",1);
System.out.println(c.getName());
} finally {
session.close();
}
5.使用映射器(Mapper)接口操作SQL語句
上述的查詢中,使用映射語句“mycinema.dao.CategoryMapper.fetchById”指定要執行的SQL,這種弱類型的使用方式容易出問題:缺乏編程提示和編譯檢查。為此,MyBatis還提供了強類型的使用方式——映射器(Mapper)方式。
實際上,MyBatis中所謂的“映射器”接口就是我們所說的“數據訪問對象”(DAO)接口。
該使用方式的具體做法如下:
(1)在查詢配置文件CategoryMapper.xml中,把mapper元的namespace屬性指定為一個映射器接口(CategoryMapper)的完全限定類名。
<?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="mycinema.dao.CategoryMapper">
<select id="fetchById" parameterType="int" resultType="mycinema.entity.Category">
select * from Category where id = #{id}
</select>
</mapper>
(2)在映射器接口(mycinema.dao.CategoryMapper)中聲明方法(fetchById),該方法的簽名與配置文件的select元素匹配(方法名與select元素id相同,返回值類型和參數類型也必須對應)。
public interface CategoryMapper {
public Category fetchById(int id);
}
(3)按上設置後,我們就可以通過CategoryMapper接口實現前面的查詢了:
SqlSession session = factory.openSession();
try {
CategoryMapper mapper = session.getMapper(CategoryMapper.class);
Category c = mapper.fetchById(1);
System.out.println(c.getName());
} finally {
session.close();
}
這種調用方式是通過接口動態代理來實現的,並不需要為接口添加實現類。映射器的調用方式是強類型的,符合對象化思想,不容易出錯,在實際中更為常用。
試用MyBatis框架