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());
        }
    }

}
原文地址:https://www.cnblogs.com/maigy/p/10959702.html