zoukankan      html  css  js  c++  java
  • springboot2.x整合tkmapper

    springboot整合tkmapper

    1.导入pom依赖

    1.1 导入springboot的parent依赖

    <parent>
            <artifactId>spring-boot-starter-parent</artifactId>
            <groupId>org.springframework.boot</groupId>
            <version>2.1.9.RELEASE</version>
        </parent>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    1.2 导入具体依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
    
            <!-- MySql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.32</version>
            </dependency>
            <!-- druid连接池-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!-- tkmapper-->
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>2.1.5</version>
            </dependency>
            <!-- pagehelper分页插件-->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.10</version>
            </dependency>
    
            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.68</version>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    2. 添加tkmapper数据库连接配置

    • 创建application.yml配置类
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource # 连接池指定 springboot2.02版本默认使用HikariCP 此处要替换成Druid
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql:///pethome?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
        username: root
        password: qwe123
        druid:
          initial-size: 5 # 初始化时建立物理连接的个数
          min-idle: 5 # 最小连接池连接数量,最小空闲数量
          max-active: 20 # 最大连接池连接数量,最大活跃连接数
          max-wait: 60000 # 配置获取连接等待超时的时间
          timeBetweenEvictionRunsMillis: 60000
          minEvictableIdleTimeMillis: 300000
          validationQuery: SELECT 1
          testWhileIdle: true
          testOnBorrow: true
          testOnReturn: false
          poolPreparedStatements: true
          maxPoolPreparedStatementPerConnectionSize: 20
          filters: stat,wall
          connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
          stat-view-servlet:
            allow: 0.0.0.0 # 允许哪些IP访问druid监控界面,多个IP以逗号分隔
            login-username: admin # 设置登录帐号
            login-password: 123456 # 设置登录密码
            reset-enable: false # 是否允许重置数据
            # url-pattern: /database/* # 默认访问根路径是:/druid/;也可以自定义设置
    # mybatis配置
    mybatis:
      configuration:
        map-underscore-to-camel-case: true
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 设置控制台输入执行的sql语句
      type-aliases-package: org.example.model
    
    # tkmapper配置
    mapper:
      not-empty: false
      identity: mysql #指定tkmapper加载的数据库
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    3. 在启动类上添加扫描注解

    • MainApp.java
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import tk.mybatis.spring.annotation.MapperScan;
    
    @SpringBootApplication
    @MapperScan(basePackages = "org.example.mapper")
    public class App {
        public static void main(String[] args) {
            SpringApplication.run(App.class);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    4.tkmapper的使用

    4.1 创建mapper.java

    
    public interface ProductMapper extends Mapper<TProduct> {
    }
    
    • 1
    • 2
    • 3

    4.2 创建表对应的实体类TProduct

    @Data
    public class TProduct {
      @Id //指定主键的注解
      private Long id;
      private String name;
      private String resources;
      private Double saleprice;
      private java.util.Date offsaletime;
      private java.util.Date onsaletime;
      private Long state;
      private String costprice;
      private java.util.Date createtime;
      private Long salecount;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    4.3 添加测试类,进行单表的CRUD操作

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class AppTest {
    
        @Autowired
        private ProductMapper productMapper;
    
    
        @Test//查询所有
        public void findAll(){
            List<TProduct> tProducts = productMapper.selectAll();
            for (TProduct tProduct : tProducts) {
                System.out.println(tProduct);
            }
        }
    
        @Test
        public void insert(){
            TProduct product = new TProduct();
            product.setName("我是测试的");
            product.setCreatetime(new Date());
            product.setState(1L);
    
            productMapper.insert(product);
        }
    
        @Test
        public void updateById(){
            TProduct product = new TProduct();
            product.setId(174L);
            product.setName("我是测试");
            //如果修改时,只想改变更新的name值,其他值不改
            //下面这个方法,是无论修改的值是否为空,将全部修改
    //        productMapper.updateByPrimaryKey(product);
            //下面的方法,只改非空的字段.
            //注意:tkmapper中,凡是方法名以Selective结尾的,就是在拼接动态sql
            //即,不更新非空的字段
            product.setCreatetime(new Date());
            productMapper.updateByPrimaryKeySelective(product);
        }
    
        @Test//删除操作
        public void  delete(){
            productMapper.deleteByPrimaryKey(174L);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    4.4 多条件查询和分页查询

    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class QueryTest {
        @Autowired
        private ProductMapper productMapper;
    
    
        @Test //根据多条件动态查询
        public void queryByParam(){
            //多条件查询
            Example example = new Example(TProduct.class);
    //        //添加第1个条件 name:模糊查询
    //        example.and().andLike("name","%洗澡8%");
    //
    //        //添加第2个条件 :价格在100以内
    //        example.and()
    //                .andGreaterThanOrEqualTo("saleprice",0).andLessThanOrEqualTo("saleprice",100);
    //
    //        //添加第3个条件:状态 state =1
    //        example.and().andEqualTo("state",1);
        //优化Sql中的括号 : 当多个条件如果是 平级,则不用example.and()去追加条件
            Example.Criteria and = example.and();//Criteria对象:就是用于拼接查询条件,每次执行example.and()或者example.or()将都会创建一个新的查询条件的拼接对象(意味着多一组())
            and.andLike("name","%洗澡8%").orEqualTo("state",1);
            //再创建一组新的区间查询条件,这个条件它要加(),所以你要重新通过 example对象获取
            example.and().andGreaterThanOrEqualTo("saleprice",0).andLessThanOrEqualTo("saleprice",100);
    
    
            List<TProduct> tProducts = productMapper.selectByExample(example);
    
            for (TProduct tProduct : tProducts) {
                System.out.println(tProduct);
            }
        }
    
        @Test //分页查询
        public void queryByPage(){
            //不带条件的分页查询
    
    
            //如果要进行分页查询,只需在调用查询的方法前,设置分页参数即可
            //特点注意:当前设置的分页参数,只适用于离它最近的这条查询
            PageHelper.startPage(1,3);
            //List<TProduct> tProducts = productMapper.selectAll();
            PageInfo<TProduct> pageInfo = new PageInfo<>(productMapper.selectAll());
            /*
                pageInfo中的常用的方法:
                    总记录数:pageInfo.getTotal()
                    总页数:pageInfo.getPages()
                    每页的数据列表:pageInfo.getList()
    
             */
    
            System.out.println(pageInfo);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    4.5 添加数据后,立马得到添加数据的主键

    • 当前这个主键是由数据库进行【自增长】设置的
    1. 在实体类的主键ID上添加如下配置
    public class TProduct {
      @Id //指定主键的注解
      @GeneratedValue(strategy= GenerationType.IDENTITY)
      private Long id;
    
    • 1
    • 2
    • 3
    • 4
    1. 在需要获取的地方,直接调用get方法即可
        @Test //添加新数据后,获取 自增长主键
        public void insertAndGetId(){
            TProduct product = new TProduct();
            product.setName("我是测试的");
            product.setCreatetime(new Date());
            product.setState(1L);
            productMapper.insert(product);
    
            System.out.println(product.getId());
    
        }
    原文章:https://blog.csdn.net/x286129277/article/details/112095082
  • 相关阅读:
    C#线程同步(1)- 临界区&Lock
    详细解析Java中抽象类和接口的区别
    防止重复提交的几种办法
    网页中实现JSON的编辑与显示
    xcode5 ios7升级后的一系列问题解决
    hadoop-2.0.0-mr1-cdh4.2.0源码编译总结
    hadoop-2.0.0-cdh4.2.1源码编译总结
    cocos2d-iphone加入芒果广告
    hadoop2.0 eclipse 源码编译
    HBase学习笔记
  • 原文地址:https://www.cnblogs.com/tfil/p/14228156.html
Copyright © 2011-2022 走看看