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技术站