tk.mybatis扩展通用接口使用详解

tk.mybatis扩展通用接口使用详解

什么是tk.mybatis?

tk.mybatis是MyBatis的一个扩展插件,它进一步简化了MyBatis的使用。tk.mybatis对MyBatis进行了增强,提供了一套通用的Mapper接口,可以让我们写更少的代码来完成CRUD操作。同时tk.mybatis提供了一些实用的功能,例如自动填充创建时间和更新时间、增强的Example查询等等。

如何使用tk.mybatis?

引入依赖

在Maven项目中,只需要在pom.xml中添加以下依赖即可:

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper</artifactId>
    <version>4.1.5</version>
</dependency>

定义实体类

首先需要定义实体类,在实体类中使用@Table注解指定表名和主键字段。

import javax.persistence.Id;
import javax.persistence.Table;

@Table(name = "user")
public class User {

    @Id
    private Long id;
    private String name;
    private Integer age;
    //省略getter和setter方法
}

定义Mapper接口

在接口中只需要继承tk.mybatis.mapper.common.Mapper即可。

import tk.mybatis.mapper.common.Mapper;

public interface UserMapper extends Mapper<User> {

}

配置MyBatis Mapper扫描路径

在MyBatis的配置文件中,需要添加tk.mybatis.mapper.common.MapperScannerConfigurer配置,将Mapper接口的扫描路径指向上一步定义的Mapper接口所在的包。

<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper"/>
</bean>

使用通用Mapper实现CRUD操作

通过继承tk.mybatis.mapper.common.Mapper,Mapper中会自动提供增、删、改、查的方法。

例如在服务层中使用UserMapper进行查询:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.selectByPrimaryKey(id);
    }

    public List<User> getUsersByName(String name) {
        Example example = new Example(User.class);
        example.createCriteria().andEqualTo("name", name);
        return userMapper.selectByExample(example);
    }

    public List<User> getAll() {
        return userMapper.selectAll();
    }

    public int save(User user) {
        return userMapper.insert(user);
    }

    public int update(User user) {
        return userMapper.updateByPrimaryKey(user);
    }

    public int delete(Long id) {
        return userMapper.deleteByPrimaryKey(id);
    }
}

示例

下面给出两个使用tk.mybatis增强的示例。

示例一:自动填充创建时间和更新时间

针对表中包含创建时间和更新时间两个字段的需求,我们可以使用tk.mybatis提供的自动填充功能,减少写代码的量。

在实体类中,我们可以使用@Column注解指定需要填充的字段。

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Table(name = "user")
public class User {
    @Id
    private Long id;
    private String name;
    private Integer age;
    @Column(name = "create_time")
    private Date createTime;
    @Column(name = "update_time")
    private Date updateTime;
    //省略getter和setter方法
}

在MyBatis的配置文件中,我们可以使用tk.mybatis.mapper.provider.SpecialProvider提供的org.apache.ibatis.mapping.SqlSource
方法来自动填充创建时间和更新时间。

<insert id="insert" parameterType="tk.mybatis.mapper.common.Mapper">
    <selectKey resultType="java.lang.Long" keyProperty="id" order="BEFORE">
        SELECT nextval('tb_user_id_seq')
    </selectKey>
    insert into user (id, name, age)
    values (#{id}, #{name}, #{age})
    <if test="createTime != null">
        ,create_time
        <bind name="__sql_builder__" value="@tk.mybatis.mapper.provider.SpecialProvider@nowSql(__sql_builder__)"/>
        #{__sql_builder__}
    </if>
    <if test="updateTime != null">
        ,update_time
        <bind name="__sql_builder__" value="@tk.mybatis.mapper.provider.SpecialProvider@nowSql(__sql_builder__)"/>
        #{__sql_builder__}
    </if>
</insert>

<update id="updateByPrimaryKey" parameterType="tk.mybatis.mapper.common.Mapper">
    update user
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
        <if test="createTime != null">
            create_time = #{createTime},
        </if>
        <if test="updateTime != null">
            update_time = #{updateTime},
        </if>
    </set>
    where id = #{id}
</update>

当我们插入或更新数据的时候,不需要再手动设置创建时间和更新时间,这些字段会被自动填充。

示例二:增强的Example查询

在使用tk.mybatis进行复杂查询时,我们可以使用Example对象来构造查询条件,它是对MyBatis原生的Example进行了封装,提供了更加方便的查询方式。

例如查询年龄大于20岁,按照姓名升序排序的用户信息:

Example example = new Example(User.class);
example.createCriteria().andGreaterThan("age", 20);
example.setOrderByClause("name asc");
List<User> users = userMapper.selectByExample(example);

使用PageHelper进行分页查询:

PageHelper.startPage(1, 10);
Example example = new Example(User.class);
example.createCriteria().andGreaterThan("age", 20);
example.setOrderByClause("name asc");
List<User> users = userMapper.selectByExample(example);
PageInfo<User> pageInfo = new PageInfo<>(users);

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:tk.mybatis扩展通用接口使用详解 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • java实现系统捕获异常发送邮件案例

    这里为您提供java实现系统捕获异常发送邮件的完整攻略。 1. 引入依赖 首先,在你的项目中需要引入邮件发送相关的依赖,例如Apache Commons Email等。如果你使用Maven进行依赖管理,可以添加以下依赖: <dependency> <groupId>org.apache.commons</groupId> …

    Java 2023年5月27日
    00
  • SpringBoot浅析安全管理之高级配置

    Spring Boot浅析安全管理之高级配置 Spring Boot提供了强大的安全管理功能,可以帮助开发人员保护应用程序的安全性。在本文中,我们将深入探讨Spring Boot安全管理的高级配置。 Spring Boot安全管理的基本概念 在Spring Boot中,安全管理是指保护应用程序的机制,以确保只有授权用户才能访问应用程序的资源。Spring B…

    Java 2023年5月15日
    00
  • Spring MVC Controller传递枚举值的实例

    下面我将详细讲解“Spring MVC Controller传递枚举值的实例”的完整攻略。 1. 枚举定义 首先,我们需要先定义一个枚举类型。在Java中,枚举类型是一种特殊的数据类型,它限定了一个变量只能取得枚举常量中的某个值。假设我们定义如下的一个UserRole枚举类型,用于表示用户的角色: public enum UserRole { ADMIN, …

    Java 2023年6月15日
    00
  • SpringBoot在IDEA中实现热部署(JRebel实用版)

    接下来我就为大家分享一下如何在IDEA中使用JRebel实现Spring Boot热部署的完整攻略。 1. JRebel是什么 JRebel是一款Java热部署工具,可以在应用程序运行时重新加载Java类和资源文件,同时不需要重启服务器或应用程序。与传统的应用程序重新部署相比,这样可以显著提高开发效率。 2. Spring Boot项目配置JRebel 2.…

    Java 2023年5月19日
    00
  • 解决springboot启动失败的问题(‘hibernate.dialect’ not set)

    当你在SpringBoot应用程序中使用Hibernate时,可能会遇到 “hibernate.dialect”没有设置的启动失败问题。这个问题的原因是Hibernate试图查找一个匹配的SQL方言,但没有找到。下面是解决“hibernate.dialect not set”问题的完整攻略: 问题分析 首先,我们需要了解该问题的主要原因。在Hibernate…

    Java 2023年5月20日
    00
  • 如何避免内存泄漏?

    以下是关于如何避免内存泄漏的完整使用攻略: 什么是内存泄漏? 内存泄漏是指在程序运行过程中,分配的内存空间没有被及时释放,导致内存空间的浪费和程序运行速度的下降。内存泄漏是一种常见的程序错误,如果不及时处理,会导致程序崩溃或者系统崩溃。 如何避免内存泄漏? 为了避免内存泄漏,需要注意以下几点: 1. 及时释放内存 在程序中,如果分配了内存空间,就需要在不需要…

    Java 2023年5月12日
    00
  • Spring Security权限管理实现接口动态权限控制

    下面就是关于“Spring Security权限管理实现接口动态权限控制”的完整攻略: 1. 简介 在Spring Security中,我们可以使用基于注解的安全性,以控制方法响应、请求类型等。但是,如果我们需要跟具体的业务数据绑定的话,我们就需要根据规则来控制具体的访问权限。 在这种情况下,就需要使用Spring Security提供的“动态授权”功能了。…

    Java 2023年5月20日
    00
  • java之使用stream对日期排序方式

    下面是对Java中使用Stream对日期排序的攻略。 1. 准备数据 在讲解如何使用Stream对日期排序之前,我们需要准备一些数据。假设我们有一个List集合,其中包含多个日期对象。如下所示: List<LocalDate> dates = Arrays.asList( LocalDate.of(2021, 8, 1), LocalDate.o…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部