Mybatis增強工具——MyBatis-Plus


1.概念:

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

  b.支持數據庫:mysql 、mariadb、oracle、db2、h2、hsql、sqlite、postgresql、sqlserver

 

2.使用:

  a.導入Maven依賴

  <properties>

    ......

    <!-- spring -->
    <spring.version>5.1.1.RELEASE</spring.version>
    <!-- jackson-json -->
    <jackson.version>2.9.4</jackson.version>
    <!-- log4j -->
    <slf4j.version>1.7.18</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>

  <dependencies>
    <!-- spring -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- Jackson -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <!-- AOP -->
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.6</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.6</version>
    </dependency>

    <!-- 日志相關 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
    </dependency>

    <!-- spring-jdbc -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!-- MySQL -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <!-- 連接池 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.12</version>
    </dependency>

    <!-- mp 依賴 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>3.2.0</version>
    </dependency>
  </dependencies>

 

  b.書寫 spring.xml 和 jdbc.properties 配置文件

<?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:aop="http://www.springframework.org/schema/aop"
       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/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 引入外部properties -->
    <context:property-placeholder location="classpath:jdbc.properties" />
    <!-- 掃描包 -->
    <context:component-scan base-package="com.wode" />
    <!-- 開啟AOP代理 -->
    <aop:aspectj-autoproxy proxy-target-class="true" />
    <!-- 開啟注解處理器 -->
    <context:annotation-config />
    <!-- 開啟注解聲明式事務 -->
    <tx:annotation-driven/>

    <!-- 數據源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- mybatits-plus 整合 Spring -->
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        <!-- 加載數據源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 指定 pojo 目錄 -->
        <property name="typeAliasesPackage" value="com.wode.entity"/>
        <!-- mybatis-plus 插件 -->
        <property name="plugins">
            <array>
                <!-- 分頁插件 -->
                <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></bean>
            </array>
        </property>
        <!-- 加載 mybatis-plus 全局屬性 -->
        <property name="globalConfig" ref="globalConfig" />
    </bean>

    <!-- 配置和 mybatis-plus 全局屬性 -->
    <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig" ref="dbConfig"/>
    </bean>
    <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
        <!--
             AUTO -> 數據庫ID自增
             INPUT -> 用戶輸入ID
             ID_WORKER -> 全局唯一ID
             UUID -> 全局唯一ID
          -->
        <property name="idType" value="UUID"/>
        <!-- 全局的表前綴策略配置 -->
        <property name="tablePrefix" value="tb_" />
    </bean>

    <!-- mybatis 的動態代理 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.wode.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!-- 事務代理管理器 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>

 

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mytest?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

 

  c.在數據庫創建`tb_user`用戶表

-- 用戶表
CREATE TABLE `tb_user` (
  `id` varchar(255) NOT NULL,
  `user_name` varchar(255) NOT NULL,
  `user_code` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

 

  d.創建User用戶實體類

@TableName("tb_user")
public class User {

    @TableId
    private String id;
    private String userName;
    private int userCode;

    public String getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserCode() {
        return userCode;
    }

    public void setUserCode(int userCode) {
        this.userCode = userCode;
    }

    @Override
    public String toString() {
        return "User(id[" + id + "], userName[" + userName + "], userCode[" + userCode + "])";
    }
}

 

  e.創建 UserMapper 接口繼承 BaseMapper

public interface UserMapper extends BaseMapper<User> {

}

 

  f.使用

    -------------------------------------------------------------新增-------------------------------------------------------------

    1)新增

        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        UserMapper userMapper = (UserMapper) context.getBean("userMapper");

        User user = new User();
        user.setUserCode(509);
        user.setUserName("趙九");
        userMapper.insert(user);

 

    -------------------------------------------------------------修改-------------------------------------------------------------

    2)修改(根據ID)

        User user = new User();
        user.setId("000a03f373eb563789e8311225eeee87");
        user.setUserCode(502);
        userMapper.updateById(user);

    3)修改(根據Wrapper)

        User user = new User();
        user.setUserCode(504);

        UpdateWrapper<User> wrapper = new UpdateWrapper<>();
        wrapper.ge("user_code", 503);
        wrapper.eq("user_name", "李四");

        userMapper.update(user, wrapper);

 

    -------------------------------------------------------------刪除-------------------------------------------------------------

    4)刪除(根據ID)

        userMapper.deleteById("5f9f4315153a422c33af8a671c999812");

    5)刪除(根據ID集合)

        List<String> ids = new ArrayList<>();
        ids.add("24cc20d8453e61dad42c1be0df356807");
        ids.add("7edb2acaa7b8cacb08b7e25a947979eb");
        ids.add("e4faed134b055ef80fb1d5e8382b9373");
        userMapper.deleteBatchIds(ids);

    6)刪除(根據Map)

        Map<String, Object> filter = new HashMap<>();
        filter.put("user_name", "趙七");
        userMapper.deleteByMap(filter);

    7)刪除(根據Wrapper)

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name", "趙八");
        userMapper.delete(wrapper);

 

    -------------------------------------------------------------查詢一條-------------------------------------------------------------

    8)查詢一條(根據ID)

        User user = userMapper.selectById("000a03f373eb563789e8311225eeee87");
        System.out.println(user);

    9)查詢一條(根據Wrapper)

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.eq("user_name", "張三");
        User user = userMapper.selectOne(wrapper);
        System.out.println(user);

 

    -------------------------------------------------------------查詢多條-------------------------------------------------------------

    10)查詢(根據ID集合)

        List<String> ids = new ArrayList<>();
        ids.add("9175a689f2a28b9b6ca1a72d153fc7ec");
        ids.add("460a3f6192c2e27595fd1a2fa0defa16");
        List<User> userList = userMapper.selectBatchIds(ids);
        System.out.println(userList);

    11)查詢(根據Wrapper)

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("user_name", "趙%");
        wrapper.gt("user_code", 507);
        List<User> userList = userMapper.selectList(wrapper);
        System.out.println(userList);

    12)查詢(根據Map)

        Map<String, Object> filter = new HashMap<>();
        filter.put("user_name", "張三");
        List<User> userList = userMapper.selectByMap(filter);
        System.out.println(userList);

 

    -------------------------------------------------------------分頁查詢-------------------------------------------------------------

    13)分頁查詢(根據Wrapper)

        Page<User> page = new Page<>(1, 3);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();

        IPage<User> userIPage = userMapper.selectPage(page, queryWrapper);
        System.out.println("總條數:" + userIPage.getTotal());
        System.out.println("每頁條數:" + userIPage.getSize());
        System.out.println("當前頁數:" + userIPage.getCurrent());
        System.out.println("總頁數:" + userIPage.getPages());
        System.out.println("查詢結果:" + userIPage.getRecords());

 

    -------------------------------------------------------------條數查詢-------------------------------------------------------------

    14)查詢條數(根據Wrapper)

        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("user_name", "趙%");
        int count = userMapper.selectCount(queryWrapper);
        System.out.println(count);

 

 

3.其他

  a.條件查詢or

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.ge("user_code", 502);
        //不寫則默認為and拼接
        wrapper.le("user_code", 503);
        //or嵌套
        wrapper.or(wrapper1 -> wrapper1.like("user_name", "趙%").ne("id", "f463c76d52056ca51bc76e348fd0572e"));
        //or拼接
        wrapper.or().eq("id", "460a3f6192c2e27595fd1a2fa0defa16");
        
        List<User> userList = userMapper.selectList(wrapper);
        System.out.println(userList);

 

 

  b.排序

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //正序
        wrapper.orderByAsc("user_name");
        //倒序
        wrapper.orderByDesc("user_code");

        List<User> userList = userMapper.selectList(wrapper);
        System.out.println(userList);

 

 

  c.返回指定字段

        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //只返回指定字段
        wrapper.select("user_name", "user_code");

        List<User> userList = userMapper.selectList(wrapper);
        System.out.println(userList);

 

 

4.多表分頁查詢

  a.創建 tb_info 用戶信息表,並添加數據

-- 用戶信息表
CREATE TABLE `tb_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(255) NOT NULL,
  `nick_name` varchar(255) NOT NULL,
  `gender` int(11) NOT NULL,
  PRIMARY KEY (`id`)
);

 

  b.在 UserMapper 中添加多表聯查自定義方法

public interface UserMapper extends BaseMapper<User> {

    //普通連表查詢
    @Select("SELECT u.id,u.user_name,u.user_code,i.nick_name,i.gender FROM tb_user u,tb_info i WHERE u.id=i.user_id and u.user_code>=#{userCode} order by u.user_code desc")
    List<UserInfoVo> getQuestionStudentList(@Param("userCode") int userCode);

    //分頁連表查詢
    @Select("SELECT u.id,u.user_name,u.user_code,i.nick_name,i.gender FROM tb_user u,tb_info i WHERE u.id=i.user_id and u.user_code>=#{userCode} order by u.user_code desc")
    IPage<UserInfoVo> getQuestionStudentPage(Page<UserInfoVo> page, @Param("userCode") int userCode);

}

 

  c.測試使用

    1)普通連表查詢測試

        List<UserInfoVo> userList = userMapper.getQuestionStudentList(503);
        for(UserInfoVo userInfo : userList){
            System.out.println(userInfo);
        }

    2)分頁連表查詢測試

        Page<UserInfoVo> page = new Page<>(1, 3);
        IPage<UserInfoVo> userIPage = userMapper.getQuestionStudent(page, 503);
        System.out.println("總條數:" + userIPage.getTotal());
        System.out.println("每頁條數:" + userIPage.getSize());
        System.out.println("當前頁數:" + userIPage.getCurrent());
        System.out.println("總頁數:" + userIPage.getPages());
        System.out.println("查詢結果:");
        for(UserInfoVo userInfo : userIPage.getRecords()){
            System.out.println(userInfo);
        }

 

 

 

5.官方文檔:

  https://mp.baomidou.com/guide/

 


免責聲明!

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



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