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
上一篇:Java小白学习指南【day48】---你不知道的Mybatis进阶


下一篇:451、Java框架105 -【MyBatis - 多对一】 2020.12.24