MyBatis框架簡介
MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和實體類映射成數據庫中的記錄。
爲了和數據庫進行交互,通常的做法是將SQL語句寫在Java代碼中,SQL語句和Java代碼耦合在一起不利於後期維護修改,而MyBatis能夠幫助我們將SQL語句和Java代碼分離,方便了後期因需求變動而對SQL語句進行修改。
MyBatis框架的使用
1、導入MyBatis所需的jar包:
這其中包括了MyBatis核心包、Mysql連接驅動包。
2、創建一個測試表:
數據庫中的表數據如下:
3、在 src 下創建包和接口:
這裏包名爲“cn.jingpengchong.flower.dao”,接口爲IFlowerDao:
package cn.jingpengchong.flower.dao;
public interface IFlowerDao {
int count();
}
3、在 src 下創建xml全局配置文件:
這裏叫做“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>
<!-- default:默認引用environment的id,當前所使用的環境 -->
<environments default="default">
<!-- 聲明可以使用的環境 -->
<environment id="default">
<!-- 使用原生JDBC事務 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 使用數據庫連接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/ssm"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 這裏指定映射的xml文件 -->
</mappers>
</configuration>
<transactionManager/>的type 屬性可取值:
- JDBC:事務管理使用 JDBC 原生事務管理方式
- MANAGED:把事務管理轉交給其他容器,原生JDBC事務setAutoMapping(false)
<dataSouce/>的type 屬性可取值:
- POOLED:使用數據庫連接池
- UNPOOLED:不實用數據庫連接池,和直接使用 JDBC 一樣
- JNDI:java 命名目錄接口技術
4、創建對應模塊的xml映射文件:
在src下創建名爲“flower.xml”的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="cn.jingpengchong.pojo.Flower">
<!--
id:方法名
parameterType:參數類型
resultType:返回值類型
-->
<!-- 查詢數據總條數的方法 -->
<select id="count" resultType="int">
select count(*) from flower
</select>
</mapper>
namespace用於作爲該文件在項目中的唯一標識,並且指明其關聯的接口。
5、將映射文件“flower.xml”添加到“mybatis.xml”文件中的<mappers>標籤中,如下:
<mappers>
<mapper resource="flower.xml"/>
</mappers>
6、測試(後期用框架實現):
這裏新建一個包“cn.jingpengchong.test”,在其中新建一個文件“Test.java”:
new SqlSessionFactoryBuilder().build(is)執行之後,mybatis會先讀取mybatis.xml文件對應的InputStream,然後根據mybatis.xml文件中的mappers標籤找到user_info.xml文件,然後再根據user_info.xml文件找到對應的Dao層接口IUserInfoDao,並且生成代理對象。
package cn.jingpengchong.test;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.jingpengchong.flower.dao.IFlowerDao;
public class Test {
public static void main(String[] args) throws IOException {
//加載配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//獲取SqlSessionFactory對象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//獲取SqlSession對象,代表與數據庫的一次會話,用完需要關閉。注意:由於SqlSession爲非線程安全的,所以該變量應定義爲局部變量,不要定義成全局變量
SqlSession session = factory.openSession();
//獲取IFlowerDao接口實現類對象
IFlowerDao mapper = session.getMapper(IFlowerDao.class);
//調用count方法獲取表中記錄的總數
int count = mapper.count();
System.out.println(count);
session.close();
}
}
運行結果爲:5
附:Mybatis的DTD文件下載地址: