美文网首页
Spring Boot 集成MyBatis通用Mapper、分页

Spring Boot 集成MyBatis通用Mapper、分页

作者: Bobby0322 | 来源:发表于2017-09-12 22:03 被阅读841次

    TKmybatis提供一种通用mapper,它不需要针对每个mapper写sql语句,只需继承通用mapper调用相应的接口来完成单表的增删改查。

    集成通用 MAPPER、分页插件

    不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表基础操作不方便的想法,使用它你能简单的使用单表的增删改查,包含动态的增删改查.
    程序使用拦截器实现具体的执行Sql,完全使用原生的Mybatis进行操作.

    添加 Maven 依赖或引入 Jar 包

    如果你使用 Maven,只需要添加如下依赖:

    <!--3.引入tk.mybatis 依赖,实现对实体类的增删改查的代码 -->
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-spring-boot-starter</artifactId>
        <version>1.1.3</version>
    </dependency>
    
    <!--4.引入pagerhelper 依赖,实现分页功能 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.1.2</version>
    </dependency>
    

    SQL 数据准备

    SET FOREIGN_KEY_CHECKS=0;
    
    -- ----------------------------
    -- Table structure for `user`
    -- ----------------------------
    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
      `user_name` varchar(32) DEFAULT NULL COMMENT '用户名',
      `user_pwd` varchar(32) DEFAULT NULL COMMENT '密码',
      `user_sex` varchar(32) DEFAULT NULL,
      `nick_name` varchar(32) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8;
    

    entity

    package com.pingkeke.springBoot.entity;
    
    import com.pingkeke.springBoot.enums.UserSexEnum;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    
    import javax.persistence.*;
    
    /**
     * User.
     * @Data
     @ToString、 @EqualsAndHashCode、 @Getter、 @Setter 和 @RequiredArgsConstructor 注解的集合。
    
     @NoArgsConstructor
     作用于类,@NoArgsConstructor 自动生成不带参数的构造方法;
    
     @AllArgsConstructor
     @AllArgsConstructor 自动生成包含所有属性的构造方法。
    
     @Accessors有三个参数可以使用
     chain 链式的形式
     fluent 流式的形式
     prefix 生成指定前缀的属性的getter与setter方法,并且生成的getter与setter方法时会去除前缀
     */
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Accessors(chain = true)
    @Table(name = "user")
    public class User {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)  // 使用主键自增
        @Column(name = "id")
        private Integer id;
    
        private String userName;
        private String userPwd;
        private UserSexEnum userSex;
        private String nickName;
    
    }
    

    UserMapper

    package com.pingkeke.springBoot.util;
    
    import tk.mybatis.mapper.common.Mapper;
    import tk.mybatis.mapper.common.MySqlMapper;
    
    /**
     * MyMapper.
     */
    public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
    }
    
    package com.pingkeke.springBoot.mapper;
    
    import com.pingkeke.springBoot.entity.User;
    import com.pingkeke.springBoot.util.MyMapper;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Select;
    
    /**
     * 继承通用的Mapper<T>,必须指定泛型<T>
     * 一旦继承了Mapper<T>,继承的Mapper就拥有了以下通用的方法:
    
     */
    @Mapper
    public interface UserMapper extends MyMapper<User> {
    
        @Select("select * from user where user_name=#{username}")
        User selectByName(String username);
    }
    
    

    application.properies

    spring.datasource.url=jdbc:mysql://localhost:3306/tdf_db?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    
    #实体类扫描包
    mybatis.type-aliases-package=com.pingkeke.springBoot.entity
    #Mapper.xml文件扫描目录
    mybatis.mapper-locations=classpath:mapper/*.xml
    #驼峰命名
    mybatis.configuration.mapUnderscoreToCamelCase=true
    #Mapper.xml文件扫描目录
    #mybatis.config-locations=classpath:mybatis/mybatis-config.xml
    #mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
    
    #tkmapper 工具类
    mapper.mappers=com.pingkeke.springBoot.util.MyMapper
    mapper.not-empty=false
    mapper.identity=MYSQL
    pagehelper.helperDialect=mysql
    pagehelper.reasonable=true
    pagehelper.supportMethodsArguments=true
    pagehelper.params=count=countSql
    

    测试

    package com.pingkeke.springBoot.mapper;
    
    import com.github.pagehelper.PageHelper;
    import com.pingkeke.springBoot.entity.User;
    import com.pingkeke.springBoot.enums.UserSexEnum;
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import java.util.List;
    
    /**
     * UserMapperTest.
     */
    
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @MapperScan("com.pingkeke.springBoot.mapper")
    public class UserMapperTest {
        @Autowired
        private UserMapper userMapper;
    
        /**
         * 新增一条数据 insert
         * 插入一条数据
         * 支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)
         * 优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长
         */
        @Test
        public void testInsert() throws Exception {
    
            User user = new User(null,"bobby1","123",UserSexEnum.MAN,"Bobby1");
    
            userMapper.insert(user);
    
            Assert.assertEquals(6, userMapper.selectAll().size());
        }
    
        /**
         * 自定义selectByName情况
         */
        @Test
        public void testSelectByName(){
            User user = userMapper.selectByName("Bobby");
    
            System.out.println(user.getUserName());
            System.out.println(user.getUserPwd());
    
            Assert.assertNotEquals(null,user);
        }
    
        /**
         * selectAll
         * @throws Exception
         */
        @Test
        public void testQuery() throws Exception {
    
            /**
             * Mapper接口方式的调用,推荐这种使用方式。
             */
            PageHelper.startPage(1, 2);
    
            List<User> users = userMapper.selectAll();
    
            System.out.println(users.size());
    
            if(users==null || users.size()==0) {
                System.out.println("is null");
            } else {
                System.out.println(users.toString());
            }
        }
    
    
        /**
         * selectByPrimaryKey 根据主键进行查询
         * 根据主键进行查询,必须保证结果唯一
         * 单个字段做主键时,可以直接写主键的值
         * 联合主键时,key可以是实体类,也可以是Map
         */
        @Test
        public void testSelectByPrimaryKey() {
    
            User user = userMapper.selectByPrimaryKey(1);
    
            System.out.println(user.getUserName());
            System.out.println(user.getUserPwd());
    
            Assert.assertNotEquals(null,user);
        }
    
        /**
         * 查询总数 selectCount
         * 根据实体类不为null的字段查询总数,条件全部使用=号and条件
         */
        @Test
        public void testSelectCount() {
            int cnt = userMapper.selectCount(new User());
            System.out.println(cnt);
        }
    
    
        /**
         * updateByPrimaryKey
         * 根据主键进行更新,这里最多只会更新一条数据;
         * 参数为实体类
         * @throws Exception
         */
        @Test
        public void testUpdate() throws Exception {
            User user = userMapper.selectByPrimaryKey(1);
    
            System.out.println(user.toString());
    
            user.setNickName("Bobby");
            userMapper.updateByPrimaryKey(user);
    
            Assert.assertTrue(("Bobby".equals(userMapper.selectByPrimaryKey(1).getNickName())));
        }
    
        /**
         * 根据主键删除 deleteByPrimaryKey
         */
        @Test
        public void testDeleteByPrimaryKey() {
            int cnt = userMapper.deleteByPrimaryKey(28);
            System.out.println(cnt);
        }
    
    }
    

    参考资料

    相关文章

      网友评论

          本文标题:Spring Boot 集成MyBatis通用Mapper、分页

          本文链接:https://www.haomeiwen.com/subject/oyuhsxtx.html