Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

封面:洛小汐
做者:潘潘java

封面圖

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

在理解中執行,在執行中理解,學習技術也循此道。mysql

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

前言

上一篇文章 《Mybatis系列全解(二):Mybatis簡介與環境搭建》 ,咱們對 Mybatis 作了初步講解,並搭建了一套基本環境,共同完成了一次查詢操做。因此本篇文章咱們在此基礎上,繼續拓展了插入、修改、刪除三種操做,把咱們的CRUD基礎操做進行完善。git

Mybaits系列全解 (持續更新)

  • Mybatis系列全解(一):手寫一套持久層框架
  • Mybatis系列全解(二):Mybatis簡介與環境搭建
  • Mybatis系列全解(三):Mybatis簡單CRUD使用介紹
  • Mybatis系列全解(四):全網最全!Mybatis配置文件XML全貌詳解
  • Mybatis系列全解(五):全網最全!詳解Mybatis的Mapper映射文件
  • Mybatis系列全解(六):Mybatis最硬核的API你知道幾個?
  • Mybatis系列全解(七):全息視角看Dao層兩種實現方式之傳統方式與代理方式
  • Mybatis系列全解(八):Mybatis的動態SQL
  • Mybatis系列全解(九):Mybatis的複雜映射
  • Mybatis系列全解(十):Mybatis註解開發
  • Mybatis系列全解(十一):Mybatis緩存全解
  • Mybatis系列全解(十二):Mybatis插件開發
  • Mybatis系列全解(十三):Mybatis代碼生成器
  • Mybatis系列全解(十四):Spring集成Mybatis
  • Mybatis系列全解(十五):SpringBoot集成Mybatis
  • Mybatis系列全解(十六):Mybatis源碼剖析

目錄

一、Mybatis查詢操做回顧github

二、插入操做sql

三、修改操做數據庫

四、刪除操做apache

五、總結緩存

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

Mybatis查詢操做回顧

默認已安裝 Java 開發環境、Mysql數據庫、Maven 環境。微信

Mybatis 的查詢分爲7個步驟:session

一、建立 maven 工程

二、添加 MyBatis 倉庫座標(非maven項目則引入jar包)

三、建立user數據表

四、編寫User實體類

五、編寫映射文件UserMapper.xml

六、編寫核心文件SqlMapConfig.xml

七、編寫測試類

一、建立 maven 工程

建立maven工程

二、添加 MyBatis 倉庫座標

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <!--mybatis座標-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <!--mysql驅動座標-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>

        <!--單元測試座標-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--日誌座標-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

    </dependencies>

三、建立user數據表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `birthday` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

User表數據

四、編寫User實體類

package com.panshenlian.pojo;

/**
 * @Author: panshenlian
 * @Description: 用戶實體
 * @Date: Create in 2:08 2020/11/28
 */
public class User {
    private int id;
    private String username;
    private String password;
    private String birthday;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }
}

五、編寫映射文件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="com.panshenlian.pojo.User">
        select * from User
    </select>

</mapper>

六、編寫核心文件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>
    <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/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="/UserMapper.xml" />
    </mappers>
</configuration>

七、編寫測試類

package com.panshenlian.service;

import com.panshenlian.pojo.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.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Author: panshenlian
 * @Description: 體驗測試類
 * @Date: Create in 2:21 2020/11/28
 */
public class MybatisTest {

    @Test
    public void testQueryUser01() throws IOException {

        //加載核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 得到sqlSession工廠對象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

        //得到sqlSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 執行sql語句
        List<User> userList = sqlSession.selectList("userMapper.findAll");

        // 打印結果
        for (User user : userList) {
            System.out.println(user);
        }

        // 釋放資源
        sqlSession.close();
    }

}

最終經過 Junit 單元測試,運行結果符合預期

Junit單元測試運行結果

工程結構參考

工程結構參考

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

插入操做

Mybatis的插入數據操做,咱們一共須要兩步:

  1. 在映射文件UserMapper.xml中添加插入語句
<!-- 插入用戶操做 -->
    <insert id="insertUser" 
        parameterType="com.panshenlian.pojo.User" >

        insert into user(username,password,birthday) 
        values ( #{username}, #{password},#{birthday})

    </insert>
  1. 編寫插入User實體對象的 Java 代碼
@Test
    public void testInsertUser01() throws IOException {

        //加載核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 得到sqlSession工廠對象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

        //得到sqlSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // 準備插入數據庫的對象
        User insertUser = new User();
        insertUser.setBirthday("2020-12-01");
        insertUser.setUsername("panpan");
        insertUser.setPassword("888");

        // 執行sql語句
        int rows = sqlSession.insert("userMapper.insertUser",insertUser);

        // 打印結果
        System.out.println(rows);

        // 提交事務
        sqlSession.commit();

        // 釋放資源
        sqlSession.close();
    }

注意:當 sqlSession 執行插入、更新、刪除操做時,須要提交事務,若是 openSession() 的時候使用無參構造函數,那麼須要手動調用 commit() 進行事務提交,對應的插入、更新、刪除操做才最終執行成功,若是是使用 openSession(true) 來打開session ,那麼則表示事務自動提交,無需手工再調用 commit() 。

插入操做時,在映射文件中咱們沒有配置 resultType參數,即返回結果類型咱們沒有配置,Mybatis 默認返回 int 類型,表示插入操做影響的記錄數。

上例插入操做執行結果爲:1 ,表示插入成功,影響記錄數量爲1條。

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

插入操做注意問題

一、插入語句使用 insert 標籤

二、在映射文件中使用 parameterType 屬性指定要插入的數據類型

三、Sql語句中使用#{實體屬性名}方式引用實體中的屬性值

四、插入操做使用的API是sqlSession.insert(「命名空間.id」,實體對象);

五、插入操做涉及數據庫數據變化,因此要使用sqlSession對象顯示的提交事務,即sqlSession.commit()

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

修改操做

Mybatis的修改數據操做,同插入操做,也是須要兩步:

  1. 在映射文件UserMapper.xml中添加修改語句
<!-- 修改用戶操做 -->
    <insert id="updateUser" parameterType="com.panshenlian.pojo.User" >

        update  user set username =#{username} where id = #{id}

    </insert>
  1. 編寫修改User實體對象的 Java 代碼
@Test
    public void testUpdateUser01() throws IOException {

        //加載核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 得到sqlSession工廠對象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

        //得到sqlSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User updateUser = new User();
        updateUser.setUsername("新的用戶名PanPan");
        updateUser.setId(1); 

        // 執行sql語句
        int rows = sqlSession.update("userMapper.updateUser",updateUser);

        // 打印結果
        System.out.println(rows);

        // 提交事務
        sqlSession.commit();

        // 釋放資源
        sqlSession.close();
    }

執行結果以下,成功修改 id =1 的數據記錄,新用戶名爲 新的用戶名PanPan

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

修改操做注意問題

一、修改語句使用update標籤

二、修改操做使用的API是sqlSession.update(「命名空間.id」,實體對象);

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

刪除操做

Mybatis的刪除數據操做,同以上插入與修改操做,也是須要兩步:

  1. 在映射文件UserMapper.xml中添加刪除語句
<!-- 刪除用戶操做 -->
    <insert id="deleteUser" parameterType="com.panshenlian.pojo.User" >

        delete from  user where id=#{id} and username = #{username}

    </insert>
  1. 編寫刪除User實體對象的 Java 代碼
@Test
    public void testDeleteUser01() throws IOException {

        //加載核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 得到sqlSession工廠對象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

        //得到sqlSession對象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        User deleteUser = new User();
        deleteUser.setUsername("新的用戶名PanPan");
        deleteUser.setId(1);

        // 執行sql語句
        int rows = sqlSession.delete("userMapper.deleteUser",deleteUser);

        // 打印結果
        System.out.println(rows);

        // 提交事務
        sqlSession.commit();

        // 釋放資源
        sqlSession.close();
    }

執行結果以下,成功刪除 id =1 ,username=新的用戶名PanPan的數據記錄。

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

刪除操做注意問題

一、刪除語句使用 delete 標籤

二、Sql語句中使用#{實體屬性名}引用傳遞的對象屬性

三、刪除操做使用的API是sqlSession.delete(「命名空間.id」,Object);

刪除操做也能夠經過執行id的方式進行刪除,例如在映射文件中把參數設置爲parameterType="java.lang.Integer",實際 API 是sqlSession.delete("命名空間.id",1);

總結

咱們經過本文介紹,基本掌握了 Mybatis 最基礎的 CRUD 操做,後續,咱們逐步深刻。

本篇完,本系列下一篇咱們講《 Mybatis系列全解(四):XML配置文件與API介紹 》。

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

Mybatis系列全解(三):Mybatis簡單CRUD使用介紹

BIU ~ 文章持續更新,微信搜索「潘潘和他的朋友們」第一時間閱讀,隨時有驚喜。本文會在 GitHub https://github.com/JavaWorld 收錄,熱騰騰的技術、框架、面經、解決方案,咱們都會以最美的姿式第一時間送達,歡迎 Star。

相關文章
相關標籤/搜索