1. 程式人生 > >試用MyBatis框架

試用MyBatis框架

class getname use face 包括 弱類型 常用 部分 urn

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框架