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日

相关文章

  • springboot与redis的简单整合实例

    在Spring Boot应用程序中,我们可以使用Redis来实现缓存和数据存储。以下是实现Spring Boot与Redis的简单整合实例的完整攻略: 添加依赖 在Spring Boot应用程序中,我们需要添加以下依赖来使用Redis: <dependency> <groupId>org.springframework.boot&lt…

    Java 2023年5月15日
    00
  • 如何避免内存溢出?

    以下是关于如何避免内存溢出的完整使用攻略: 什么是内存溢出? 内存溢出是指程序在申请内存时,没有足够的内存空间可供使用,导致程序无法运行。内存溢出是一种常见的程序错误,如果不及时处理,会导致程序崩溃或者系统崩溃。 如何避免内存溢出? 为了避免内存溢出,需要注意以下几点: 1. 合理分配内存 在程序中,需要合理分配内存空间,避免申请过大的内存空间,从而导致内存…

    Java 2023年5月12日
    00
  • EJB3.0开发之多对多和一对一

    下面我将为您详细讲解 EJB3.0 开发中的多对多和一对一关系的完整攻略。 EJB3.0 开发中多对多关系的实现 在 EJB3.0 开发中实现多对多关系,需要以下步骤: 定义实体类:定义要关联的两个实体类,并使用 @ManyToMany 注解来定义它们之间的关系,例如: “`java @Entity public class Teacher impleme…

    Java 2023年6月15日
    00
  • JAVA如何获取jvm和操作系统相关信息

    Java程序可以通过System类中提供的一些方法获取JVM和操作系统相关信息。具体步骤如下: 获取JVM相关信息: (1)获取JVM版本信息 Java程序可以通过System类的getProperty方法获取Java运行时环境JRE的版本信息,使用的是java.version这个参数。 示例代码: String javaVersion = System.g…

    Java 2023年5月24日
    00
  • Android利用Intent实现记事本功能(NotePad)

    Android利用Intent实现记事本功能(NotePad) 在Android开发中,Intent是一种非常重要的通信机制,可以实现不同组件之间的互相调用。在本文中,我们将使用Intent实现记事本功能(NotePad)。 步骤一:新建项目 先在Android Studio中新建一个项目,选择Empty Activity,然后把App名称设置为NotePa…

    Java 2023年5月19日
    00
  • jsp项目中更改tomcat的默认index.jsp访问路径的方法

    下面是“JSP项目中更改Tomcat的默认index.jsp访问路径”的攻略: 一、背景知识 在 JSP 项目中,如果未指定请求 URL 的具体文件路径,Tomcat 会自动访问项目根目录下的 index.jsp 文件。但是有些情况下,我们希望更改这个默认行为,并指定其他文件作为默认首页。 二、注意事项 在更改默认首页前,需要注意以下几点: 更改的默认首页必…

    Java 2023年6月15日
    00
  • Java中的ThreadLocal功能演示示例

    下面是“Java中的ThreadLocal功能演示示例”的完整攻略。 简介 在 Java 中,ThreadLocal 是一个特殊的工具,它可以为每个线程提供一个独立的副本以保存该变量。这个副本只有对应线程可以访问和修改,其他线程不可访问。这个功能的实现依赖于 ThreadLocalMap 类和 Thread 类的成员变量 ThreadLocal.Thread…

    Java 2023年5月26日
    00
  • jetty运行时无法保存文件的解决方法

    问题描述: 在使用Jetty web服务器时,有可能会出现无法保存文件的问题。这主要是由于jetty用户没有足够的权限保存文件。那么如何解决这个问题呢? 解决方法: 以下是“jetty运行时无法保存文件的解决方法”的完整攻略: 为Jetty用户授权。 通常情况下,Jetty运行时使用的是与服务器系统中的其他用户不同的用户账号,这个用户可能没有权限保存文件。因…

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