目錄
- MyBatis
- 1. 框架簡介
- 2. Mybatis 簡介
- 3. Mybatis 快速入門
- a. 主要需求
- b. 步驟分析
- c. 代碼實現
- i. 創建 mybatis_db 數據庫和 user 表
- ii. 創建 Java 項目,導入 Jar 包
- iii. 創建 User 實體類
- iv. 編寫映射文件 UserMapper.xml
- v. 編寫核心配置文件 SqlMapConfig.xml
- vi. 編寫測試代碼
- d. 日誌包的作用
- 4. Mybatis 映射文件概述
- 5. Mybatis 增刪改查
- 6. 抽取工具類
- 7. Mybatis 核心文件概述
- 8. Mybatis 的 API 概述
- 9. Mybatis 實現 Dao 層
- a. 傳統開發方式
- i. 將快速入門 Java 工程複製一份
- ii. 編寫 UserMapper 接口
- iii. 編寫 UserMapper 實現類
- iv. 編寫 UserMapper.xml 映射文件
- v. 模擬 service 測試
- vi. 知識小結
- b. 接口代理開發方式
- 10. 接口代理的增刪改查
MyBatis
1. 框架簡介
- 學習框架,可以簡化代碼,提高效率。
2. Mybatis 簡介
a. ORM 概述
- ORM(Object Relational Mapping)對象關係映射
- 常用 ORM 框架有:Hibernate(全自動 ORM 映射)、MyBatis(半自動 ORM 映射)、JPA
b. Mybatis 介紹
i. 歷史
- MyBatis 本是 Apache 的一個開源項目,名爲 iBatis。
- 2010 年這個項目由 Apache 遷移到了 Google,並且改名爲 MyBatis。
- 2013 年遷移到 Github。
ii. 簡介
- MyBatis 官網地址:http://www.mybatis.org/mybatis-3/
- MyBatis 是一款優秀的持久層框架,他不需要項 JDBC 繁瑣編寫代碼,只需要開發人員關注(接口 + SQL)
- 它採用了簡單的 xml 配置 + 接口方式實現增刪改查,開發者只需要關注 SQL 本身。
3. Mybatis 快速入門
a. 主要需求
- 查詢數據庫 User 表的所有記錄,封裝到 User 對象中。
b. 步驟分析
- ① 創建 mybatis_db 數據庫和 user 表
- ② 創建 Java 項目,導入 jar 包
(mysql 驅動、連接池用的是 Mybatis 內置的連接池、log4j 日誌) - ③ 創建 User 實體類
- ④ 編寫映射文件 UserMapper.xml
- ⑤ 編寫核心文件 SqlMapConfig.xml
- ⑥ 編寫測試代碼
c. 代碼實現
i. 創建 mybatis_db 數據庫和 user 表
- 執行 SQL 腳本,創建庫,創建表
- 相關材料已上傳至 CSDN:MyBatis 概述與使用資料包。
ii. 創建 Java 項目,導入 Jar 包
iii. 創建 User 實體類
- domain 包中,成員變量名要與表中的字段名一一對應。
public class User {
private Integer id;// 空值返回null,而不是0
private String username;
private Date birthday;
private String sex;
private String address;
// 省略 getter、setter、toString
}
iv. 編寫映射文件 UserMapper.xml
- 推薦放在 DAO 層(或其中的 Mapper 層)的包中。
<?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="UserMapper">
<!--查詢所有-->
<select id="findAll" resultType="com.regino.domain.User">
select * from user
</select>
</mapper>
v. 編寫核心配置文件 SqlMapConfig.xml
- src 根目錄下,方便加載。
<?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="mysql">
<!--使用MySQL環境-->
<environment id="mysql">
<!--事務管理器:JDBC類型-->
<transactionManager type="JDBC"></transactionManager>
<!--連接池:內置POOLED-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_db"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
<!--加載映射文件-->
<mappers>
<mapper resource="com/regino/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
vi. 編寫測試代碼
- 加載核心配置文件(SqlMapConfig.xml)
- 構建 SqlSessionFactory 工廠對象
- 通過工廠創建 SqlSession 會話對象(Connection)
- 執行 SQL 語句
- 釋放資源
package com.regino.test;
import com.regino.domain.User;
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 org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class UserMapperTest {
// 查詢所有
@Test
public void testFindAll() throws Exception {
// 1.加載核心配置文件(SqlMapConfig.xml)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建SqlSessionFactory工廠對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.通過工廠創建SqlSession會話對象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.執行sql語句 (命名空間+id)
List<User> list = sqlSession.selectList("UserMapper.findAll");
for (User user : list) {
System.out.println(user);
}
// 5.釋放資源
sqlSession.close();
// in會自動關閉
}
}
d. 日誌包的作用
4. Mybatis 映射文件概述
5. Mybatis 增刪改查
a. 新增
i. 編寫映射文件 UserMapper.xml
#{}
爲固定格式,其中參數跟 User 類屬性一一對應。
<!--新增-->
<insert id="save" parameterType="com.regino.domain.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
ii. 編寫測試代碼
// 新增
@Test
public void testSave()throws Exception{
// 1.加載核心配置文件(SqlMapConfig.xml)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建SqlSessionFactory工廠對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.通過工廠創建SqlSession會話對象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.執行sql語句
User user = new User();
user.setUsername("regino");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("北京");
int i = sqlSession.insert("UserMapper.save", user);
if (i>0) {
System.out.println("添加成功");
}
// 注意:mybatis需要手動提交事務(DML),否則回滾rollback
sqlSession.commit();
// 5.釋放資源
sqlSession.close();
}
iii. 知識小結
- 插入語句 insert 標籤
- 在映射文件中使用 parameterType 屬性指定插入數據類型
- SQL 語句
#{實體屬性名}
表示?
佔位符 - 插入操作 API 是
sqlSession.insert("命名空間.id", 實體對象);
- DML 類型語句 MyBatis 需要手動提交事務
sqlSession.commit();
b. 修改
i. 編寫映射文件 UserMapper.xml
<!--修改-->
<update id="update" parameterType="com.regino.domain.User">
update user set username = #{username},birthday = #{birthday},sex = #{sex},
address = #{address} where id = #{id}
</update>
ii. 編寫測試代碼
// 修改
@Test
public void testUpdate()throws Exception{
// 1.加載核心配置文件(SqlMapConfig.xml)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建SqlSessionFactory工廠對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.通過工廠創建SqlSession會話對象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.執行sql語句
User user = new User();
user.setId(50);
user.setUsername("lucy");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("上海");
sqlSession.update("UserMapper.update", user);
// DML語句,手動提交事務
sqlSession.commit();
// 5.釋放資源
sqlSession.close();
}
iii. 知識小結
- 修改操作使用 update 標籤
- 修改操作的 API 使用的
sqlSession.update("命名空間.id", 實體對象);
c. 刪除
i. 編寫映射文件 UserMapper.xml
- 一般是根據 id 刪除,parameterType 設爲 "int"或 “java.lang.Integer”(包裝類全限定名)都可以。
<!--刪除-->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
- 如果傳遞的只是一個簡單類型(如上例所示),
#{}
中的內容不做要求,但是一般要見名知意。
ii. 編寫測試代碼
// 刪除
@Test
public void testDelete() throws Exception {
// 1.加載核心配置文件(SqlMapConfig.xml)
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建SqlSessionFactory工廠對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.通過工廠創建SqlSession會話對象(Connection)
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.執行sql語句
sqlSession.delete("UserMapper.delete", 50);
// 提交事務
sqlSession.commit();
// 5.釋放資源
sqlSession.close();
}
iii. 知識小結
- 刪除語句使用 delete 標籤
- 如果 parameterType 是引用數據類型
#{實體屬性名}
- 如果 parameterType 是簡單數據類型
#{見名知意}
- 刪除操作 API:
sqlSession.delete("命名空間.id", Object);
d. 知識總結
- 注意 UserMapper.xml 中 parameterType 和 resultType 的使用。
<?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="UserMapper">
<!--查詢所有-->
<select id="findAll" resultType="com.regino.domain.User">
select * from user
</select>
<!--新增-->
<insert id="save" parameterType="com.regino.domain.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!--修改-->
<update id="update" parameterType="com.regino.domain.User">
update user set username = #{username},birthday = #{birthday},sex = #{sex},
address = #{address} where id = #{id}
</update>
<!--刪除-->
<delete id="delete" parameterType="java.lang.Integer">
delete from user where id = #{id}
</delete>
</mapper>
6. 抽取工具類
- 將 MyBatis 測試代碼的通用部分進行抽取,簡化書寫提高效率。
package com.regino.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
// 在靜態代碼塊中(1.加載核心配置文件 2.構建工廠對象)
static {
try {
// 1.加載核心配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建工廠對象
sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 提供獲取sqlSession的靜態方法
public static SqlSession openSession() {
return sqlSessionFactory.openSession();
}
// 提供提交事務和釋放資源方法
public static void close(SqlSession sqlSession){
// 提交事務
sqlSession.commit();
// 釋放資源
sqlSession.close();
}
}
a. 主要需求
- 根據指定 id,查詢 User 對象。
b. 編寫映射文件 UserMapper.xml
<!--查詢一個-->
<select id="findById" parameterType="java.lang.Integer" resultType="com.regino.domain.User">
select * from user where id = #{id}
</select>
c. 編寫測試代碼
// 查詢一個
@Test
public void testFindById() throws Exception {
// 1.獲取sqlSession(根據工具類)
SqlSession sqlSession = MyBatisUtils.openSession();
// 2.執行sql
User user = sqlSession.selectOne("UserMapper.findById", 41);
System.out.println(user);
// 3.關閉sqlSession
MyBatisUtils.close(sqlSession);
}
7. Mybatis 核心文件概述
a. 核心配置文件層級關係
b. 常用配置標籤解析
i. environments 標籤
- 用於數據庫環境的配置,支持多環境配置
- 其中,事務管理器(transactionManager)類型有兩種:
- JDBC:
這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源得到的連接來管理事務作用域。 - MANAGED:
這個配置幾乎沒做什麼。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期。
例如:MyBatis 與 Spring 整合後,事務交給 Spring 容器管理。
- JDBC:
- 其中,數據源(dataSource)常用類型有二種:
- UNPOOLED:
這個數據源的實現只是每次被請求時打開和關閉連接。 - POOLED:
這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來。
- UNPOOLED:
ii. properties 標籤
- 用於加載外置的 properties 配置文件
- jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/regino
jdbc.username=root
jdbc.password=root
- SqlMapConfig.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>
<!--加載外部的properties配置-->
<properties resource="jdbc.properties"></properties>
<!--數據庫環境配置-->
<environments default="mysql">
<!--使用MySQL環境-->
<environment id="mysql">
<!--事務管理器:JDBC類型-->
<transactionManager type="JDBC"></transactionManager>
<!--連接池:內置POOLED-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</dataSource>
</environment>
</environments>
<!--加載映射文件-->
<mappers>
<mapper resource="com/regino/dao/UserMapper.xml"></mapper>
</mappers>
</configuration>
iii. typeAliases 標籤
- MyBatis 框架內置了一些 Java 類型的別名:
- 可以通過 typeAliases 標籤爲 Java 類型自定義一個類型別名
- SqlMapConfig.xml:
<!--設置Java類型別名-->
<typeAliases>
<!--設置一個Java類型的別名-->
<!-- <typeAlias type="com.regino.domain.User" alias="User"></typeAlias>-->
<!--將整個包下所有的類名設置了別名-->
<package name="com.regino.domain"></package>
</typeAliases>
- UserMapper.xml:
iv. mappers 標籤
- 用於加載映射文件,加載方式有如下幾種,選擇一種即可:
- 加載指定的 src 目錄下的映射文件。例如:快速入門中使用的
<mapper resource="com/regino/mapper/UserMapper.xml"/>
注意:使用 mapper 標籤引入 xml 文件 時要使用斜杆/
,不能使用.
- 加載指定接口的全限定名。例如:註解開發時會使用的
<mapper class="com.regino.mapper.UserMapper"/>
- 加載並掃描指定包下所有的接口。例如:基於接口掃描方式加載時會使用的
<package name="com.regino.mapper"/>
- 加載指定的 src 目錄下的映射文件。例如:快速入門中使用的
c. MyBatis 文件的關係介紹
d. 核心配置文件標籤順序
- DTD 約束限制標籤 Configuration 的子標籤順序一定,亂序會報錯:
8. Mybatis 的 API 概述
a. API 介紹
i. Resources
- 加載 Mybatis 的核心配置文件
// 加載Mybatis的核心配置文件,獲取io流
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
ii. SqlSessionFactoryBuilder
- 根據 Mybatis 的核心配置文件構建出 SqlSessionFactory 工廠對象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
iii. SqlSessionFactory
- 用於創建 SqlSession 會話對象(相當於 Connection 對象)
- 這是一個工廠對象,對於這種創建和銷燬都非常耗費資源,一個項目中只需要存在一個即可。
// DML類型語句,需要手動提交事務
SqlSession openSession();
// 設置是否開啓自動提交事務的會話對象,如果設置true,自動提交
// 如果是true,就不需要commit,但是因爲不能進行一個事務管理,所以一般不會用
SqlSession openSession(boolean autoCommit);
iv. SqlSession
- 這是 Mybatis 的一個 核心對象。我們基於這個對象可以實現對數據的 CRUD 操作。
- 對於這個對象應做到 每個線程獨有,每次用時打開,用完關閉(線程不安全,這樣做防止多個 SQL 存在關聯性)。
- 執行語句的方法主要有:
<T> T selectOne(String statement, Object parameter);
<E> List<E> selectList(String statement, Object parameter);
int insert(String statement, Object parameter);
int update(String statement, Object parameter);
int delete(String statement, Object parameter);
- 操作事務的方法主要有:
void commit();
void roolback();
b. Mybatis 工作原理
9. Mybatis 實現 Dao 層
a. 傳統開發方式
i. 將快速入門 Java 工程複製一份
- 進入項目真實路徑後複製要導入的項目,F2 改名。導入模塊詳見:IDEA 導入模塊。導入完成後刪掉 UserMapperTest.java。
ii. 編寫 UserMapper 接口
package com.regino.dao;
import com.regino.domain.User;
import java.util.List;
public interface UserMapper {
// 查詢所有
public List<User> findAll();
}
iii. 編寫 UserMapper 實現類
package com.regino.dao;
import com.regino.domain.User;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class UserMapperImpl implements UserMapper {
@Override
public List<User> findAll() {
try {
// 1.加載核心配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
// 2.構建工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3.創建會話
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.執行sql
List<User> list = sqlSession.selectList("UserMapper.findAll");
// 5.釋放資源
sqlSession.close();
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
iv. 編寫 UserMapper.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="UserMapper">
<!--查詢所有-->
<select id="findAll" resultType="User">
select * from user
</select>
</mapper>
v. 模擬 service 測試
package com.regino.service;
import com.regino.dao.UserMapper;
import com.regino.dao.UserMapperImpl;
import com.regino.domain.User;
import org.junit.Test;
import java.util.List;
public class UserMapperTest {
// 模擬service
@Test
public void test01() throws Exception {
// 調用dao層代碼
UserMapper userMapper = new UserMapperImpl();
List<User> list = userMapper.findAll();
System.out.println(list);
}
}
vi. 知識小結
- 編寫 UserMapper 接口
- 編寫 UserMapperImpl 實現類
- 編寫 UserMapper.xml 映射
b. 接口代理開發方式
- 採用 Mybatis 的基於接口代理方式實現 持久層 的開發,這種方式是企業開發的主流。
- 基於接口代理方式的開發只需要編寫接口和映射文件,Mybatis 框架會自動、動態地生成實現類的對象。
i. 接口開發規範(重點)
- Mapper 映射文件的 namespace 與 Mapper 接口 全限定名 (全路徑)一致
- Mapper 接口的方法名與 id 的屬性名一致
- 方法的參數類型與 parameterType 屬性類型一致(全限定名或別名,核心配置文件 SqlMapConfig.xml 設置了 typeAliases,則可以使用別名。parameterType 屬性代表的是方法所需要的參數類型,可以省略。 )
- 方法的返回值類型與 resultType 屬性類型一致(全限定名或別名)
- 映射文件需要與接口在同一個包下,文件名和接口名相同。核心配置文件 SqlMapConfig.xml 中必須要掃描包,加載所有的映射文件
<package name="com.regino.dao"></package>
ii. 修改 UserMapper.xml 映射文件
iii. 修改模擬 service 測試
// 模擬service測試
@Test
public void test01() throws Exception {
// 需要通過MyBatis幫你根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
List<User> list = userMapper.findAll();
System.out.println(list);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
v. 基於接口代理方式的內部執行原理
- 使用了 JDK 動態代理技術創建了接口的實現類,底層還是執行
SqlSession.insert() | update()
10. 接口代理的增刪改查
a. UserMapper 接口
public interface UserMapper {
// 查詢所有
public List<User> findAll();
// 新增
public void save(User user);
// 修改
public void update(User user);
// 刪除
public void delete(Integer id);
// 查詢一個
public User findById(Integer id);
}
b. UserMapper.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.regino.dao.UserMapper">
<!--查詢所有-->
<select id="findAll" resultType="User">
select * from user
</select>
<!--新增-->
<insert id="save" parameterType="User">
insert into user (username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!--修改-->
<update id="update" parameterType="User">
update user set username = #{username},birthday = #{birthday},sex = #{sex},
address = #{address} where id = #{id}
</update>
<!--刪除-->
<delete id="delete" parameterType="int">
delete from user where id = #{id}
</delete>
<!--查詢一個-->
<select id="findById" parameterType="int" resultType="User">
select * from user where id = #{id}
</select>
</mapper>
c. 測試代碼
package com.regino.service;
import com.regino.dao.UserMapper;
import com.regino.domain.User;
import com.regino.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.Date;
import java.util.List;
public class UserMapperTest {
// 模擬service測試
// 查詢所有
@Test
public void testFindAll() throws Exception {
// 通過MyBatis根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
List<User> list = userMapper.findAll();
System.out.println(list);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
// 新增
@Test
public void testSave()throws Exception{
// 通過MyBatis根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
User user = new User();
user.setUsername("Regino");
user.setSex("男");
user.setAddress("CSDN");
user.setBirthday(new Date());
userMapper.save(user);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
// 修改
@Test
public void testUpdate()throws Exception{
// 通過MyBatis根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
User user = new User();
user.setId(51);
user.setUsername("Regina");
user.setSex("女");
user.setAddress("CSDN");
user.setBirthday(new Date());
userMapper.update(user);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
// 刪除
@Test
public void testDelete()throws Exception{
// 通過MyBatis根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
userMapper.delete(50);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
// 查詢一個
@Test
public void testFindById()throws Exception{
// 通過MyBatis根據接口規範創建實現類
SqlSession sqlSession = MyBatisUtils.openSession();
// 創建代理對象(實現類)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 執行SQL
User user = userMapper.findById(41);
System.out.println(user);
// 關閉會話
MyBatisUtils.close(sqlSession);
}
}