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日

相关文章

  • Spring Data Jpa的四种查询方式详解

    下面是关于“Spring Data Jpa的四种查询方式详解”的完整攻略: Spring Data Jpa的四种查询方式详解 Spring Data Jpa是一个简化了JPA规范的框架,它提供了许多便利的功能,其中最重要的就是提供了四种查询方式。 命名查询 命名查询是指根据方法名进行查询。Spring Data Jpa会根据方法名的规则自动生成查询语句,无需…

    Java 2023年5月20日
    00
  • jquery实现联想词搜索框和搜索结果分页的示例

    首先,需要明确的是,jQuery 是一个 JavaScript 函数库,其目的是使JavaScript的使用更容易,简洁。使用 jQuery 可以帮助我们更快捷地编写出与原生 JavaScript 相同的功能。 要实现一个联想词搜索框和搜索结果分页,大致可以分为以下几个步骤: 1. 设计 UI 首先,我们需要设计一下我们的页面 UI,包括搜索框、搜索结果展示…

    Java 2023年6月15日
    00
  • 浅谈@RequestMapping注解的注意点

    浅谈@RequestMapping注解的注意点 @RequestMapping注解是Spring MVC中最常用的注解之一,它用于将HTTP请求映射到控制器方法。在本文中,我们将详细讲解@RequestMapping注解的注意点,并提供两个示例来说明这个过程。 注意点 在使用@RequestMapping注解时,我们需要注意以下几点: value属性 @Re…

    Java 2023年5月18日
    00
  • Mybatis获取参数值和查询功能的案例详解

    Sure! 首先我们来介绍一下Mybatis,它是一个基于Java的持久层框架,封装了JDBC操作数据库的细节,使得开发者只需要关注 SQL 本身即可。而“Mybatis获取参数值和查询功能的案例详解”这个主题则是围绕着 参数值 和 查询功能 来讲授Mybatis的使用方法。 下面我们将分别从 Mybatis获取参数值 和 Mybatis查询功能 两部分进行…

    Java 2023年5月20日
    00
  • Spring Boot外部化配置实战解析

    SpringBoot外部化配置实战解析 SpringBoot是一个非常流行的Java Web框架,它可以帮助我们快速构建Web应用程序。在实际开发中,我们通常需要将一些配置信息从代码中分离出来,以便于在不同的环境中进行配置。本文将详细讲解SpringBoot外部化配置实战解析的完整攻略,并提供两个示例。 1. 配置文件 在SpringBoot中,我们可以使用…

    Java 2023年5月15日
    00
  • 10个微妙的Java编码最佳实践

    下面是“10个微妙的Java编码最佳实践”的详细攻略: 1. 始终使用@Override注解 Java 5 中引入了 @Override 注解,该注解用于表示方法重写。虽然在使用时并不是必须的,但如果我们在重写一个方法时没有添加 @Override 注解,极有可能出现意想不到的错误,比如拼写错误或参数数量不足等。因此,我们应该始终在重写方法时添加 @Over…

    Java 2023年5月19日
    00
  • Java中的notyfy()和notifyAll()的本质区别

    在Java多线程编程中,我们经常会用到wait()、notify()和notifyAll()方法,它们都属于Object类中用于锁的方法。其中notify()和notifyAll()方法都是用来唤醒等待线程的方法,但它们在本质上是有一定区别的。 一、notify()和notifyAll()方法的作用 notify()和notifyAll()都用于唤醒当前对象…

    Java 2023年5月26日
    00
  • 使用Spring安全表达式控制系统功能访问权限问题

    使用Spring安全表达式可以通过在方法执行前进行鉴权,从而控制系统功能的访问权限。下面是使用Spring安全表达式控制系统功能访问权限的完整攻略: 引入Spring Security依赖 在Maven项目的POM文件中,引入Spring Security依赖: <dependency> <groupId>org.springfram…

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