zoukankan      html  css  js  c++  java
  • 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());
            }
        }
    
    }
  • 相关阅读:
    利用Jquery实现http长连接(LongPoll)
    使用C#把发表的时间改为几年前,几个月,几天前,几小时前,几分钟前,或几秒前
    跨域调用接口——WebClient通过get和post请求api
    Url重写——伪静态实现
    控制反转(IOC)
    文件上传之——用SWF插件实现文件异步上传和头像截取
    利用枚举展示下拉列表
    时间格式转换—将后台返回的/Date(1448954018000)/格式转换为正常的时间格式
    @RenderSection,@RenderPage,@RenderBody介绍
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/maigy/p/10959702.html
Copyright © 2011-2022 走看看