MyBatis 概述與使用

目錄


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 表

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. 編寫測試代碼

  1. 加載核心配置文件(SqlMapConfig.xml)
  2. 構建 SqlSessionFactory 工廠對象
  3. 通過工廠創建 SqlSession 會話對象(Connection)
  4. 執行 SQL 語句
  5. 釋放資源
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. 知識小結

  1. 插入語句 insert 標籤
  2. 在映射文件中使用 parameterType 屬性指定插入數據類型
  3. SQL 語句 #{實體屬性名} 表示 ? 佔位符
  4. 插入操作 API 是 sqlSession.insert("命名空間.id", 實體對象);
  5. 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. 知識小結

  1. 修改操作使用 update 標籤
  2. 修改操作的 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. 知識小結

  1. 刪除語句使用 delete 標籤
  2. 如果 parameterType 是引用數據類型 #{實體屬性名}
  3. 如果 parameterType 是簡單數據類型 #{見名知意}
  4. 刪除操作 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 標籤

  • 用於數據庫環境的配置,支持多環境配置
    在這裏插入圖片描述
  1. 其中,事務管理器(transactionManager)類型有兩種:
    • JDBC:
      這個配置就是直接使用了 JDBC 的提交和回滾設置,它依賴於從數據源得到的連接來管理事務作用域。
    • MANAGED:
      這個配置幾乎沒做什麼。它從來不提交或回滾一個連接,而是讓容器來管理事務的整個生命週期。
      例如:MyBatis 與 Spring 整合後,事務交給 Spring 容器管理。
  2. 其中,數據源(dataSource)常用類型有二種:
    • UNPOOLED:
      這個數據源的實現只是每次被請求時打開和關閉連接。
    • POOLED:
      這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來。

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 標籤

  • 用於加載映射文件,加載方式有如下幾種,選擇一種即可:
    1. 加載指定的 src 目錄下的映射文件。例如:快速入門中使用的
      <mapper resource="com/regino/mapper/UserMapper.xml"/>
      注意:使用 mapper 標籤引入 xml 文件 時要使用斜杆 /,不能使用 .
    2. 加載指定接口的全限定名。例如:註解開發時會使用的
      <mapper class="com.regino.mapper.UserMapper"/>
    3. 加載並掃描指定包下所有的接口。例如:基於接口掃描方式加載時會使用的
      <package name="com.regino.mapper"/>

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. 知識小結

  1. 編寫 UserMapper 接口
  2. 編寫 UserMapperImpl 實現類
  3. 編寫 UserMapper.xml 映射

b. 接口代理開發方式

  • 採用 Mybatis 的基於接口代理方式實現 持久層 的開發,這種方式是企業開發的主流。
  • 基於接口代理方式的開發只需要編寫接口和映射文件,Mybatis 框架會自動、動態地生成實現類的對象。

i. 接口開發規範(重點)

  1. Mapper 映射文件的 namespace 與 Mapper 接口 全限定名 (全路徑)一致
  2. Mapper 接口的方法名與 id 的屬性名一致
    在這裏插入圖片描述
  3. 方法的參數類型與 parameterType 屬性類型一致(全限定名或別名,核心配置文件 SqlMapConfig.xml 設置了 typeAliases,則可以使用別名。parameterType 屬性代表的是方法所需要的參數類型,可以省略。 )
  4. 方法的返回值類型與 resultType 屬性類型一致(全限定名或別名)
    在這裏插入圖片描述
    在這裏插入圖片描述
    在這裏插入圖片描述
  5. 映射文件需要與接口在同一個包下,文件名和接口名相同。核心配置文件 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);
    }
}

原文鏈接:https://qwert.blog.csdn.net/article/details/106025708

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章