springboot2.x整合tkmapper的示例代码

作者:x286129277 时间:2021-09-19 11:56:59 

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 导入具体依赖


<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>

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加载的数据库

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);
 }
}

4.tkmapper的使用

4.1 创建mapper.java


public interface ProductMapper extends Mapper<TProduct> {
}

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;
}

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);
 }

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);
 }

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

当前这个主键是由数据库进行【自增长】设置的

在实体类的主键ID上添加如下配置


public class TProduct {
@Id //指定主键的注解
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;

在需要获取的地方,直接调用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

标签:springboot,整合,tkmapper
0
投稿

猜你喜欢

  • java模拟hibernate一级缓存示例分享

    2023-06-18 08:43:55
  • Java并发编程之volatile与JMM多线程内存模型

    2023-10-19 12:13:48
  • java中初始化MediaRecorder的实现方法

    2023-11-29 03:54:52
  • C#创建临时文件的方法

    2023-06-16 14:32:36
  • 浅谈JVM内存溢出原因和解决思路

    2023-11-23 12:24:15
  • OpenCV和C++实现图像的翻转(镜像)、平移、旋转、仿射与透视变换

    2023-07-14 23:47:22
  • JAVA JDK8 List分组的实现和用法

    2023-11-26 09:56:11
  • Android带进度条的文件上传示例(使用AsyncTask异步任务)

    2023-06-24 09:43:11
  • Java面向对象编程的三大特征

    2023-09-19 06:20:34
  • 详解Java类型擦除机制

    2023-10-29 06:41:21
  • Java 关键字 速查表介绍

    2022-07-03 22:04:48
  • SpringBoot如何使用自定义注解实现接口限流

    2023-11-25 07:22:37
  • spring boot2结合mybatis增删改查的实现

    2023-07-07 01:17:31
  • C++实现LeetCode(205.同构字符串)

    2023-06-21 04:06:54
  • Opencv光流运动物体追踪详解

    2023-06-21 11:55:31
  • VS2019配置OpenCV时找不到Microsoft.Cpp.x64.user的解决方法

    2023-07-01 01:57:36
  • Java操作Redis2种方法代码详解

    2022-09-10 22:58:56
  • Java语言实现Blowfish加密算法完整代码分享

    2023-11-02 21:30:07
  • java实现马踏棋盘的算法

    2023-11-29 17:00:29
  • Spring main方法中如何调用Dao层和Service层的方法

    2023-11-28 23:15:19
  • asp之家 软件编程 m.aspxhome.com