tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询

这篇具有很好参考价值的文章主要介绍了tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis-Plus极大简化了我们的开发,作为mybatis的增强版,Mybatis-Plus确实帮我们减少了很多SQL语句的编写,通过其提供的API,可以方便地完成增删查改操作。但是,其实除了Mybatis-Plus以外,还有一个技术tk-mybatis可以达到同样的效果,只不过随着MP的兴起,tk-mybatis已经被渐渐淡忘,就像曾经的JSP+Servlet。

因此,为了证明tk-mybatis曾经存在过,这篇文章就详细介绍一下tk-mybatis的使用方法。

目录

第一步:准备数据库

第二步:创建一个springboot项目

第三步:添加tk-mybatis的依赖

第四步:修改配置文件

第五步:创建数据库表对应的实体类

第六步:持久层接口继承自Mapper接口

第七步:使用tk-mybatis的API完成crud

扩展:使用tk-mybatis整合PageHelper实现分页查询

1、添加PageHelper依赖

2、设置分页拦截器

3、在所有代码之前开启分页


第一步:准备数据库

创建数据库tkmybatis,然后执行项目resources目录下的tkmybatis.sql脚本文件。

tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询,mybatis,spring boot,java

第二步:创建一个springboot项目

本篇文章将创建一个名为tkmybatis的springboot项目用于演示tkmybatis的使用。

第三步:添加tk-mybatis的依赖

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>1.1.5</version>
</dependency>

项目完整的依赖如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.9</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>tkmybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <mysql.version>8.0.28</mysql.version>
        <druid.version>1.1.21</druid.version>
        <lombok.version>1.18.22</lombok.version>
        <mybatis.version>2.2.2</mybatis.version>
        <tkmybatis.version>1.1.5</tkmybatis.version>
    </properties>

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

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis.version}</version>
        </dependency>

        <!--tk.mybatis-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>${tkmybatis.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

第四步:修改配置文件

在application.yml中配置数据源和日志的显示级别

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/tkmybatis
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

logging:
  level:
    springfox: error
    com.example.tkmybatis: debug

第五步:创建数据库表对应的实体类

package com.example.tkmybatis.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import javax.persistence.Id;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 歌曲
 * @author heyunlin
 * @version 1.0
 */
@Data
public class Song implements Serializable {
    private static final long serialVersionUID = 18L;

    @Id
    private String id;

    /**
     * 歌曲名
     */
    private String name;

    /**
     * 歌手
     */
    private String singer;

    /**
     * 描述信息
     */
    private String note;

    /**
     * 最后一次修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime lastUpdateTime;
}

第六步:持久层接口继承自Mapper接口

package com.example.tkmybatis.mapper;

import com.example.tkmybatis.entity.Song;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

/**
 * @author heyunlin
 * @version 1.0
 */
@Repository
public interface SongMapper extends Mapper<Song> {

}

在这点上,其实和mybatis-plus很像,mybatis-plus里是继承BaseMapper<T>接口,然后使用BaseMapper<T>接口中预定义实现的简单crud方法。

但是,tk-mybatis的各个API在继承关系上又和mybatis-plus完全不同,tk-mybatis中,一个接口中只定义一个方法(把接口隔离原则体现的淋漓尽致ovo)。

package tk.mybatis.mapper.common;

public interface Mapper<T> extends
        BaseMapper<T>,
        ExampleMapper<T>,
        RowBoundsMapper<T>,
        Marker {

}

可以发现,Mapper接口继承了很多个接口BaseMapper、ExampleMapper和RowBoundsMapper,而BaseMapper又继承了基本的增删查改的Mapper接口BaseSelectMapper、BaseInsertMapper、BaseUpdateMapper和BaseDeleteMapper。

这几个接口又继承了相应的插入、删除、更新或查询的接口,每个接口中只定义一个方法

BaseMapper.java

package tk.mybatis.mapper.common;

import tk.mybatis.mapper.common.base.BaseDeleteMapper;
import tk.mybatis.mapper.common.base.BaseInsertMapper;
import tk.mybatis.mapper.common.base.BaseSelectMapper;
import tk.mybatis.mapper.common.base.BaseUpdateMapper;

public interface BaseMapper<T> extends
        BaseSelectMapper<T>,
        BaseInsertMapper<T>,
        BaseUpdateMapper<T>,
        BaseDeleteMapper<T> {

}

BaseSelectMapper.java

package tk.mybatis.mapper.common.base;

import tk.mybatis.mapper.common.base.select.*;

public interface BaseSelectMapper<T> extends
        SelectOneMapper<T>,
        SelectMapper<T>,
        SelectAllMapper<T>,
        SelectCountMapper<T>,
        SelectByPrimaryKeyMapper<T>,
        ExistsWithPrimaryKeyMapper<T> {

}

第七步:使用tk-mybatis的API完成crud

tk-mybatis中两个重要的API相关说明:

  • tk.mybatis.mapper.entity.Example
  • tk.mybatis.mapper.entity.Example.Criteria

1、创建Example对象

2、通过Example的静态方法createCriteria()获取Criteria对象

接下来通过测试类测试tkmybatis的API方法

package com.example.tkmybatis;

import com.example.tkmybatis.entity.Song;
import com.example.tkmybatis.mapper.SongMapper;
import com.example.tkmybatis.util.StringUtils;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@SpringBootTest
class TkMybatisTests {

    @Autowired
    private SongMapper songMapper;

    @Test
    void testInsert() {
        Song song = new Song();

        song.setId(StringUtils.uuid());
        song.setName("稻香");
        song.setSinger("周杰伦");

        // 添加
        songMapper.insert(song);
        // 选择性添加
        // 拼接sql语句时会在每个字段设置前添加null判断,只有不为null才设置到set子句
        songMapper.insertSelective(song);
    }

    @Test
    void testUpdate() {
        Song song = new Song();

        song.setId(StringUtils.uuid());
        song.setName("稻香");
        song.setSinger("周杰伦");

        // 通过主键修改
        songMapper.updateByPrimaryKey(song);
        // 通过主键选择性修改
        songMapper.updateByPrimaryKeySelective(song);
    }

    @Test
    void testUpdateByExample() {
        Song song = new Song();

        song.setId(StringUtils.uuid());
        song.setName("稻香");
        song.setSinger("周杰伦");

        Example example = new Example(Song.class);
        Example.Criteria criteria = example.createCriteria();

        criteria.andCondition("name = ", song.getName());

        // 通过Example中设置的条件修改
        songMapper.updateByExample(song, example);
        // 通过Example中设置的条件选择性地修改
        songMapper.updateByExampleSelective(song, example);
    }

    @Test
    void testSelect() {
        Song song = new Song();

        song.setName("稻香");
        song.setSinger("周杰伦");

        // 根据song中设置字段作为条件查询条件
        List<Song> select = songMapper.select(song);
        // 根据主键查询(也就是@Id注解标注的字段)
        Song selectByPrimaryKey = songMapper.selectByPrimaryKey("123");
        // 查询全部
        List<Song> selectAll = songMapper.selectAll();
        // 同select()方法,当能够确定查询结果中最多只有一条记录时可以使用此方法
        Song selectOne = songMapper.selectOne(song);
        // 根据song中设置字段作为条件查询条件,返回符合条件的记录数
        int selectCount = songMapper.selectCount(song);
    }

    @Test
    void testSelectByExample() {
        Example example = new Example(Song.class);
        Example.Criteria criteria = example.createCriteria();

        example.setOrderByClause("last_update_time");

        criteria.andCondition("name = ", "稻香");
        criteria.andCondition("singer = ", "周杰伦");

        List<Song> list = songMapper.selectByExample(example);
        int count = songMapper.selectCountByExample(example);
    }

}

扩展:使用tk-mybatis整合PageHelper实现分页查询

和mybatis-plus不同,tk-mybatis并没有帮我们实现分页功能,需要整合PageHelper来实现分页查询。

1、添加PageHelper依赖

<!-- 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.4</version>
</dependency>

2、设置分页拦截器

package com.example.tkmybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.github.pagehelper.PageInterceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;
import java.util.Properties;

/**
 * Mybatis配置类
 * @author heyunlin
 * @version 1.0
 */
@Configuration
@MapperScan("com.example.tkmybatis.mapper")
public class MybatisConfig {
    
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource getDataSource() {
        return DataSourceBuilder.create().type(DruidDataSource.class).build();
    }

    /**
     * 定义创建Session工厂Bean的方法
     * @return SqlSessionFactoryBean
     */
    @Bean
    public SqlSessionFactoryBean sqlSessionFactoryBean() {
        // 定义MyBatis的Session工厂对象,用于产生MyBatis全局的会话工厂
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

        // 设置数据源
        sqlSessionFactoryBean.setDataSource(getDataSource());
        Properties properties = new Properties();

        properties.setProperty("reasonable", "true");
        properties.setProperty("pageSizeZero", "true");
        properties.setProperty("supportMethodsArguments", "true");

        // 创建分页拦截器
        PageInterceptor interceptor = new PageInterceptor();
        interceptor.setProperties(properties);

        // 添加分页拦截器
        sqlSessionFactoryBean.setPlugins(interceptor);

        return sqlSessionFactoryBean;
    }

}

3、在所有代码之前开启分页

在所有代码之前添加PageHelper.startPage(int page, int size)方法开启分页。例如:

package com.example.tkmybatis;

import com.example.tkmybatis.dto.SongPagerDTO;
import com.example.tkmybatis.entity.Song;
import com.example.tkmybatis.mapper.SongMapper;
import com.example.tkmybatis.util.StringUtils;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.session.RowBounds;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

@SpringBootTest
class TkMybatisTests {

    @Autowired
    private SongMapper songMapper;

    @Test
    void testSelectByPage() {
        // 模拟后台传的参数
        SongPagerDTO pagerDTO = new SongPagerDTO();
        pagerDTO.setName("爱");

        PageHelper.startPage(pagerDTO.getPage(), pagerDTO.getRows());

        Example example = new Example(Song.class);
        Example.Criteria criteria = example.createCriteria();

        if (StringUtils.isNotEmpty(pagerDTO.getName())) {
            criteria.andLike("name", "%".concat(pagerDTO.getName()).concat("%"));
        }

        List<Song> list = songMapper.selectByExample(example);
        int count = songMapper.selectCountByExample(example);

        // 封装查询结果返回
    }

}

整个项目的结构如下

tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询,mybatis,spring boot,java

好了,文章就分享到这里了,文章设计代码已经上传到git仓库,按需获取

tkmybatis使用详解案例项目https://gitee.com/he-yunlin/tkmybatis.git文章来源地址https://www.toymoban.com/news/detail-655315.html

到了这里,关于tk-mybatis使用介绍,springboot整合tk-mybatis、PageHelper实现分页查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring与Mybatis整合&&aop整合pageHelper分页插件

    Spring与MyBatis整合 的意义在于提供了一种结合优势的方式,以便更好地 开发和管理持久层(数据库访问)代码 。 这里也是总结了几点主要意义 简化配置:Spring与MyBatis整合后,可以通过Spring的配置文件来管理和配置MyBatis的相关配置,例如数据源、事务管理等,而不需要额外

    2024年02月11日
    浏览(84)
  • MyBatis与Spring整合以及AOP和PageHelper分页插件整合

    目录 前言 一、MyBatis与Spring整合的好处以及两者之间的关系 1.好处 2.关系  二、MyBatis和Spring集成 1.导入pom.xml 2.编写配置文件  3.利用mybatis逆向工程生成模型层代码 三、常用注解  四、AOP整合pageHelper分页插件 创建一个切面 测试 MyBatis是一个开源的持久层框架,而Spring是一个

    2024年02月11日
    浏览(46)
  • Spring 与【MyBatis 】和【 pageHelper分页插件 】整合

    目录 一、Spring整合MyBatis 1. 导入pom依赖 2. 利用mybatis逆向工程生成模型层层代码 3. 编写配置文件 4. 注解式开发 5. 编写Junit测试类 二、AOP整合pageHelper分页插件 1. 创建一个AOP切面 2. @Around(\\\"execution(* *..*xxx.*xxx(..))\\\") 表达式解析 3. 编写测试 1.1 添加spring相关依赖(5.0.2.RELEASE)     

    2024年02月11日
    浏览(57)
  • Spring与MyBatis集成 AOP整合PageHelper插件

    目录 1.什么是集成? 2.Spring与MyBatis集成 3.Spring与MyBatis集成的基本配置 4.AOP整合PageHelper插件 集成是指将不同的组件、框架或系统整合到一起,使它们可以协同工作、相互调用、共享资源等。通过集成,可以实现不同组件之间的功能互补、数据交互、业务流程整合等。 在软件

    2024年02月10日
    浏览(44)
  • MyBatis与Spring集成&常用注解以及AOP和PageHelper分页插件整合

    目录 前言 一、MyBatis与Spring整合的好处以及两者之间的关系 1.好处 2.关系  二、MyBatis和Spring集成 1.导入pom.xml 2.编写配置文件  3.利用mybatis逆向工程生成模型层代码 三、常用注解  四、AOP整合pageHelper分页插件 创建一个切面 测试 MyBatis是一个开源的持久层框架,而Spring是一个

    2024年02月07日
    浏览(59)
  • SpringBoot第26讲:SpringBoot集成MySQL - MyBatis PageHelper分页

    前文中,我们展示了Spring Boot与MyBatis的集成,但是没有展示分页实现。本文是SpringBoot第26讲,专门介绍分页相关知识体系和基于MyBatis的 物理分页PageHelper

    2024年02月13日
    浏览(45)
  • 【SpringBoot】MyBatis与MyBatis-Plus分页查询 & github中的PageHelper

            笔者写这篇博客是因为近期遇到的关于两者之间的分页代码差距,其实之前也遇见过但是没有去整理这篇博客,但由于还是被困扰了小一会儿时间,所以还是需要 加深记忆 。其实会看前后端传参解决这个问题很快、不麻烦。关于这两个框架的分页代码问题主要就

    2024年02月03日
    浏览(57)
  • SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

    1.需求分析 2.数据库表设计 3.数据库环境配置 1.新建maven项目 2.pom.xml 引入依赖 3.application.yml 配置数据源 数据库名 用户名 密码 驱动是mysql8的(因为上面使用了版本仲裁) 4.Application.java 编写启动类 5.测试 6.配置类切换druid数据源 7.测试数据源是否成功切换 4.Mybatis基础配置 1

    2024年03月20日
    浏览(58)
  • SpringBoot整合Druid、Mybatis、MybatisPlus以及MybatisPlus的使用

    1)引入jar包 2)在application.yml中 注意: initialization-mode: always 第一次用过之后注释掉,或者将其改成never 3).启动项目,访问:http://127.0.0.1:8080/druid/          用户名:admin/密码:123456(在配置文件中有) ps:还记得mybatis中的sqlSessionFactory要传入一个dataSource吗?所以我们先学习

    2024年02月12日
    浏览(42)
  • EMQ的介绍及整合SpringBoot的使用

    首先先了解一下底层的协议: 1. MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅 (publish/subscribe)模式的\\\" 轻量级 \\\"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。 MQTT最大优点在于,可以 以极少的代码和有限的带宽,为连接远程

    2024年02月11日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包