Mybits的CRUD入門操作

Mybatis框架簡單介紹

mybatis 是一個優秀的基於 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身而不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的過程。 mybatis 通過 xml 或註解的方式將要執行的各 statement 配置起來,並通過 java 對象和 statement 中 sql 的動態參數進行映射生成最終執行的 sq 語句,最後由 mybatis 框架執行 sql 並將結果映射爲 java 對象並 返回。 採用 ORM 思想解決了實體和數據庫映射的問題,dbc 進行了封裝,屏蔽了 jdbc api 底層訪問細節,使我 們不用與 jdbc api 打交道,就可以完成對數據庫的持久化操作。

這裏附上源碼(可以下載參考使用): https://download.csdn.net/download/qq_43230007/12173926

Mybatis框架實現簡單的CRUD操作實現步驟

步驟一:前期資源準備

  1. 創建maven工程,同時創建數據庫表
	DROP DATABASE IF EXISTS demo;
	CREATE DATABASE IF NOT EXISTS demo;
	USE demo;
	DROP TABLE IF EXISTS `user`;
	SELECT DATABASE();
	CREATE TABLE `user` (
	  `id` INT(11) NOT NULL AUTO_INCREMENT,
	  `username` VARCHAR(32) NOT NULL COMMENT '用戶名稱',
	  `birthday` DATETIME DEFAULT NULL COMMENT '生日',
	  `sex` CHAR(1) DEFAULT NULL COMMENT '性別',
	  `address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
	  PRIMARY KEY  (`id`)
	) ENGINE=INNODB DEFAULT CHARSET=utf8;
	
	INSERT  INTO `user`(`id`,`username`,`birthday`,`sex`,`address`) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','寧波'),(43,'小二王','2018-03-04 11:34:34','女','杭州'),(45,'張三','2018-03-04 12:04:06','男','天津'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'馬七','2018-03-08 11:44:00','女','河南');
	
	SELECT * FROM USER;

在這裏插入圖片描述

  1. 配置pom.xml,導入相關依賴座標
    <dependencies>
        <!--Mybatis包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--日誌包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <!--測試類包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--JDBC驅動包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>
  1. 完善目錄結構

  2. 創建Dao層接口

package com.demo.dao;

import com.demo.domain.User;

import java.util.List;

/**
 * CRUD 這個是一個數據庫最基礎的操作
 *  增刪改
 *  查詢
 *  模糊查詢
 *  聚合函數查詢
 * @author Ye
 */
public interface UserDao {
    /**
     * 爲什麼我下面的參數選擇user,因爲這樣就方便選擇user
     * 屬性中的任意屬性進行數據庫表的操作
     * @param user
     */
    void updateUser(User user);

    /**
     * 插入操作
     * @param user
     */
    void insertUser(User user);

    /**
     * 刪除操作
     * @param user
     */
    void deleteUser(User user);

    /**
     * 查詢所有
     * @return
     */
    List<User> findAll();

    /**
     * 通過名稱查找
     * @param user
     * @return
     */
    List<User> findUserByName(User user);

    /**
     * 通過關鍵字查找
     * @param user
     * @return
     */
    List<User> findByKeyWord(User user);

    /**
     * 查詢總數
     * @param user
     * @return
     */
    Integer findTotalCount(User user);


}
  1. 創建數據模型User對應數據庫的User表
package com.demo.domain;

import java.util.Date;

/**
 * 定義的User類,對應了數據庫中的User表
 */
public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public Date getBirthday() {
        return birthday;
    }

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

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
  1. 配置文件的準備
    在這裏插入圖片描述

步驟二

  1. 測試類準備
package com.demo.test;

import com.demo.dao.UserDao;
import com.demo.domain.User;
import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserTest {

    private InputStream in;
    private SqlSession sqlSession;
    private UserDao userDao;

    /**
     * 初始化資源
     * @throws IOException
     */
    @Before
    public void init() throws IOException {
        //1.讀取配置文件,生成字節輸入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.獲取SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.獲取SqlSession對象
        sqlSession = factory.openSession(true);
        //4.獲取dao的代理對象
        userDao = sqlSession.getMapper(UserDao.class);
    }

    /**
     * 關閉資源
     * @throws Exception
     */
    @After
    public void destroy() throws Exception {
        //關閉資源
        sqlSession.close();
        in.close();
    }

    /**
     * 插入操作
     */
    @Test
    public void insertUser() {
        User user = new User();
        user.setUsername("李四");
        userDao.insertUser(user);
    }

    /**
     * 更新操作
     */
    @Test
    public void updateUser() {
        User user = new User();
        user.setUsername("張三2");
        userDao.updateUser(user);
    }

    /**
     * 刪除操作
     */
    @Test
    public void deleteUser() {
        User user = new User();
        user.setUsername("李四");
        userDao.deleteUser(user);
    }

    /**
     * 查詢所有操作
     */
    @Test
    public void findAll() {
        User user = new User();
        user.setUsername("張三");
        List<User> li = userDao.findAll();
        for (User user1 : li) {
            System.out.println(user);
        }
    }

    /**
     * 通過姓名查詢
     */
    @Test
    public void findUserByName() {
        User user = new User();
        user.setUsername("老王");
        List<User> li = userDao.findUserByName(user);
        for (User user1 : li) {
            System.out.println(user);
        }
    }

    /**
     * 關鍵字模糊查詢
     */
    @Test
    public void findByKeyWord() {
        User user = new User();
        //模糊查詢需要傳入帶通配符的參數,例如下面就是查詢姓名中包含"王"的用戶
        user.setUsername("%王%");
        List<User> li = userDao.findByKeyWord(user);
        for (User u : li) {
            System.out.println(u);
        }
    }

    /**
     * 查詢總數
     */
    @Test
    public void findTotalCount() {        User user = new User();
        user.setUsername("小二王");
        Integer li = userDao.findTotalCount(user);
        System.out.println("查詢到小二王的數量是:"+li);

    }
}
  1. 完善相關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.demo.dao.UserDao">

    <!-- 定義User類的返回值模板 resultMap-->
    <!--1.id是user對象的模板
        2.type是指指定的模板類名稱爲User
        -->
    <resultMap id="userMap" type="User">
        <!--<id>是主鍵字段別名標籤:如果User類中的id字段對應數
            據庫中的id字段是帶有主鍵約束的話,那麼就需要使用<id>標籤-->
        <!--<result>標籤是非對應主鍵字段所使用的標籤-->
        <!--屬性:
                property:指定的是User類中的字段名稱
                column:指定的是數據庫表的字段名稱
                -->
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="address" column="address"></result>
        <result property="sex" column="sex"></result>
        <result property="birthday" column="birthday"></result>
    </resultMap>
    <!--
        說明:以下都是數據庫查詢語句的標籤內容,其實質就是在寫數據庫操作的方法,
            只不過就是通過標籤的形式書寫代碼而已。
        標籤介紹:對應的就是CRUD操作
            <insert>
            <delete>
            <update>
            <select>
        屬性介紹:
            id:對應實現的接口的方法名,這裏實現了接口"com.demo.dao.UserDao"
            parameterType:對應了方法中的參數,這裏主要使用的參數都是user
            resultType:返回值類型屬性賦值,可以賦值全類名或者已經配置的別名
            resultMap:返回值類型,一些引用類型對象的返回值使用這個標籤,通常配合<resultMap>標籤使用

        -->
    <!--增、刪、改操作,因爲這些操作-->
    <!--新增用戶-->
    <insert id="insertUser" parameterType="user">
        insert into user(username) values(#{username});
    </insert>
    <!--刪除用戶-->
    <delete id="deleteUser" parameterType="user">
        DELETE FROM USER WHERE username=#{username};
    </delete>
    <!--更新用戶-->
    <update id="updateUser" parameterType="user">
        UPDATE USER SET username=#{username} WHERE username='張三';
    </update>
    <!--普通查詢、模糊查詢、聚合查詢-->
    <!--查詢所有-->
    <select id="findAll" resultMap="userMap">
        SELECT * FROM USER;
    </select>
    <!--通過名稱查詢-->
    <select id="findUserByName" parameterType="user" resultMap="userMap">
   SELECT * FROM USER WHERE username=#{username};
    </select>
    <!--模糊查詢-->
    <select id="findByKeyWord" parameterType="user" resultMap="userMap">
        SELECT * FROM USER WHERE username LIKE #{username};
    </select>
    <!--聚合函數查詢-->
    <select id="findTotalCount" parameterType="user" resultType="Integer">
       SELECT COUNT(*) FROM USER WHERE username=#{username};
    </select>
</mapper>
  1. 測試
    在這裏插入圖片描述### 總結

Mybatis框架極大的方便了我們對數據庫的操作,只需要學習其中的標籤,我們就可以非常方便的通過對xml配置文件的修改從而改變對數據庫的操作,而不是去修改java源碼,這樣就方便了對程序的維護和測試。

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