Mybatis-Plus


1、Mybatis-Plus 簡介

1.1、什么是 Mybatis-Plus

  Mybatis-Plus(簡稱 MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

1.2、Mybatis-Plus有什么用?

  使用 Mybatis-Plus 工具,我們只需要將我們定義的抽象接口,繼承一個公用的 BaseMapper<T> 接口,就可以獲得一組通用的 crud 方法來操作數據庫!!!

  使用 Mybatis-Plus 時,甚至不需要任何的 xml 映射文件或者接口方法注解,真正的 dao 層零實現。

1.3、Mybatis-Plus 小結

  Mybatis-Plus 只是在 Mybatis 的基礎上,實現了功能增強,讓開發更加簡潔高效。

  Mybatis-Plus 並沒有修改 Mybatis 的任何特性。

 

2 入門示例

2.1、需求

  使用 Mybatis-Plus 實現對用戶的 crud 操作

2.2、配置步驟說明

(1)搭建環境(創建項目、導入包)

(2)配置 Mybatis-Plus(基於 Spring 實現)

(3)編寫測試代碼

2.3、配置步驟

2.3.1、第一步:搭建環境

2.3.1.1 前提

  已經創建好了數據庫環境:

  

  建表語句:

CREATE TABLE `tb_user` (
  `id` bigint(20) NOT NULL COMMENT '主鍵ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年齡',
  `email` varchar(50) DEFAULT NULL COMMENT '郵箱',
  PRIMARY KEY (`id`)
)

2.3.1.2 說明

(1)Mybatis-Plus 並沒有提供單獨的 jar 包,而是通過 Maven(或者 gradle)來管理 jar 依賴。本示例使用 Maven 來構建項目。

(2)Mybatis-Plus 是基於 Spring 框架實現的,因此使用 Mybatis-Plus,必須導入 Spring 相關依賴。

2.3.1.3 創建項目

2.3.1.4 添加依賴

  修改 pom.xml 文件,添加 Mybatis-Plus 相關依賴:

<dependencies>
      <!-- Spring的支撐包 -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>4.3.23.RELEASE</version>
      </dependency>
      <!-- MySQL -->
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.47</version>
      </dependency>
      <!-- 連接池 -->
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>
      <!-- 測試 -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>4.3.23.RELEASE</version>
          <scope>test</scope>
      </dependency>
      <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
      </dependency>
      <!-- 導入切面依賴包 -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
    <!-- mybatis-plus -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>2.3</version>
    </dependency>
    <!-- spring-jdbc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.3.23.RELEASE</version>
    </dependency>
  </dependencies>

2.3.2  第二步:創建 User 實體類

  說明:使用 Mybatis-Plus 可以不使用 xml 文件,而是基於一組注解來解決實體類和數據庫表映射問題。

@TableName(value="tb_user") 指定對應的表,表名和類名一致時,可以省略 value 屬性。
@TableId 指定表的主鍵。Value 屬性指定表的主鍵字段,和屬性名一致時,可以省略。Type指定主鍵的增長策略。
@TableField 指定類的屬性映射的表字段,名稱一致時可以省略該注解。

   User 類如下:

package cn.mgy.pojo;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;

@TableName("tb_user")
public class User {

//    @TableId(value="id",type=IdType.AUTO)
    private Long id;// bigint(20) NOT NULL COMMENT '主鍵ID',
    @TableField(value="name")
    private String name;// varchar(30) DEFAULT NULL COMMENT '姓名',
    private Integer age;// int(11) DEFAULT NULL COMMENT '年齡',
    private String email;// varchar(50) DEFAULT NULL COMMENT '郵箱',

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

2.3.3 第三步:創建 UserMapper 接口

  說明:繼承 BaseMapper 公共接口即可。

package cn.mgy.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;

import cn.mgy.pojo.User;

public interface UserMapper extends BaseMapper<User> {

}

2.3.4 第四步:Mybatis-Plus 整合 Spring

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 掃描包 -->
    <context:component-scan base-package="cn.mgy" />
    
    <!-- 1、創建數據源 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <!-- 四要素 -->
        <property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis_plus" />
        <property name="username" value="root" />
        <property name="password" value="root" />
        <!-- 其他元素 -->
        <property name="maxActive" value="20" />
        <property name="minIdle" value="5" />
    </bean>

    <!-- 
        2、mybatits-plus 整合 Spring
        任何的數據庫的框架,要使用 Spring 的事務代理,必須使用 Spring 提供
        的數據源,必須整合 Spring 才可以使用 
     -->
     <bean name="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
         <!-- 加載數據源 -->
         <property name="dataSource" ref="dataSource" />
         <!-- 指定 pojo 目錄 -->
         <property name="typeAliasesPackage" value="cn.mgy.pojo" />
         <!-- 配置 mybatis-plus 插件 -->
         <property name="plugins">
             <list>
                 <!-- 配置分頁插件 -->
                 <bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" />
                 <!-- 配置攔截器屬性 -->
                 <bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor" >
                     <!-- 配置 sql 響應時間,開發階段方便做調優 -->
                     <property name="maxTime" value="1000" />
                     <!-- 配置 sql 語句的格式化 -->
                     <property name="format" value="true" />
                 </bean>
             </list>
         </property>
         <property name="globalConfig" ref="globalConfiguration" />
     </bean>
     <!-- 配置 mybatis-plus 全局屬性 -->
     <!-- 定義 MybatisPlus 的全局策略配置 -->
     <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
         <!-- 在 2.3 版本以后,dbColumnUnderline 默認值是 true,即 pojo 屬性開啟駝峰標識 -->
         <property name="dbColumnUnderline" value="true" />
         <!-- 全局的主鍵策略 -->
         <!-- 
             AUTO ->`0`("數據庫ID自增")
             INPUT ->`1`("用戶輸入ID")
             ID_WORKER ->`2`("全局唯一ID")
             UUID ->`3`("全局唯一ID")
          -->
          <!-- <property name="idType" value="0" /> -->
          <!-- 全局的表前綴策略配置 -->
          <property name="tablePrefix" value="tb_" />
     </bean>
     
     <!-- 3、配置 mybatis 的動態代理 -->
     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
         <property name="basePackage" value="cn.mgy.mapper" />
     </bean>
     
     <!-- 4、配置事務代理管理器 -->
     <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
         <property name="dataSource" ref="dataSource" />
     </bean>
     
     <!-- 5、開啟注解聲明式事務 -->
     <tx:annotation-driven/>
</beans>

2.3.5  第五步:編寫測試代碼

package cn.mgy.test;

import java.util.List;

import org.apache.ibatis.session.RowBounds;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.baomidou.mybatisplus.mapper.EntityWrapper;

import cn.mgy.mapper.UserMapper;
import cn.mgy.pojo.User;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:config.xml"})
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;
    
    //插入一條記錄
    @Test
    public void insert(){
        User user = new User();
        user.setAge(18);
        user.setEmail("zhangsan@163.com");
        user.setName("張三");
        
        userMapper.insert(user);
    }
    
    //根據id查詢
    @Test
    public void selectById(){
        User user = userMapper.selectById(1);
        
        System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail());
    }
    
    //根據用戶名查找
    @Test
    public void selectByName(){
        
        EntityWrapper<User> wrapper = new EntityWrapper<User>();
        wrapper.eq("name", "張三");
        
        List<User> users = userMapper.selectList(wrapper);
        
        for (User user : users) {
            System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail());
        }
    }
    
    //查詢用戶列表
    @Test
    public void selectAll(){
        List<User> users = userMapper.selectList(null);
        for (User user : users) {
            System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail());
        }
    }
    
    //分頁查詢,第2頁,每頁3條
    @Test
    public void selectAndPage(){
        
        RowBounds rowBounds = new RowBounds((2-1)*3, 3);
        
        List<User> users = userMapper.selectPage(rowBounds, null);
        
        for (User user : users) {
            System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail());
        }
    }
    
    //模糊查詢 
    @Test
    public void selectByLike(){
        
        EntityWrapper<User> wrapper = new EntityWrapper<User>();
        wrapper.like("name", "%張%");
        
        List<User> users = userMapper.selectList(wrapper);
        for (User user : users) {
            
            System.out.println("用戶id:"+user.getId()+",用戶姓名:"+user.getName()+",用戶郵箱:"+user.getEmail());
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM