链接
简介
简化开发中重复的CRUD Mapper代码,Mybatis Plus或者JPA中都已经实现,适用于仅仅使用Mybatis的同学。
场景
架构初期选择时,考虑Mybatis Plus,但是由于过于灵活,分层不是很清晰,故放弃。考虑使用JPA,但是需求中需要使用复杂查询和动态判断,故放弃。所以仅使用Mybatis,由于在使用Mybatis-generator生成了大量重复的CRUD代码,所有使用通用Mapper,可以简化代码,更优雅的实现。
使用
集成通用Mapper
implementation group: 'io.mybatis', name: 'mybatis-mapper', version: '1.2.2'
使用时在Dao层集成Mapper类即可
package com.lv.testmp.dao;
import com.lv.testmp.entity.User;
import io.mybatis.mapper.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao extends Mapper<User, Long> {
List<User> selectUserList();
}
Entity 需要特别说明:Entity中需要使用注解指定Entity所对应的表明和列明,如果不指定,默认会查找与类名和字段名完全相同的表名字段名去匹配。因为Java 类名大写,且大多数使用驼峰命名法,数据库表名小写,且大多使用蛇形命名法,所以基本无法默认匹配,建议每一个Entity都进行手动对应。
package com.lv.testmp.entity;
import io.mybatis.provider.Entity;
import lombok.Data;
import java.util.Date;
@Data
@Entity.Table("users")
public class User {
@Entity.Column(id = true)
private Long id;
@Entity.Column("name")
private String name;
@Entity.Column("email")
private String email;
@Entity.Column("mobile")
private String mobile;
@Entity.Column("age")
private Short age;
@Entity.Column("address")
private String address;
@Entity.Column("create_time")
private Date createTime;
@Entity.Column("last_update_time")
private Date lastUpdateTime;
}
至此我们可以删除掉Mybatis mapper.xml中的CRUD方法了,直接调用基础方法
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lv.testmp.dao.UserDao">
<resultMap id="BaseResultMap" type="com.lv.testmp.entity.User">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="mobile" jdbcType="VARCHAR" property="mobile" />
<result column="age" jdbcType="SMALLINT" property="age" />
<result column="address" jdbcType="VARCHAR" property="address" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
<result column="last_update_time" jdbcType="TIMESTAMP" property="lastUpdateTime" />
</resultMap>
<sql id="Base_Column_List">
id, name, email, mobile, age, address, create_time, last_update_time
</sql>
<select id="selectUserList" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from users
</select>
</mapper>
import com.lv.testmp.dao.UserDao;
import com.lv.testmp.entity.User;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
public List<User> getUserList() {
Optional<User> user = userDao.selectByPrimaryKey(1L);
System.out.println(user.get());
return userDao.selectUserList();
}
}
可以看到日志中已经打印出查询的用户信息
2022-06-15 10:42:27.609 INFO 19640 --- [nio-9001-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-06-15 10:42:27.610 INFO 19640 --- [nio-9001-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2022-06-15 10:42:27.611 INFO 19640 --- [nio-9001-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
User(id=1, name=admin, email=test@126.com, mobile=18000001111, age=18, address=Dalian LvShun, createTime=Mon Jun 13 17:30:23 CST 2022, lastUpdateTime=Mon Jun 13 17:30:23 CST 2022)
2022-06-15 10:42:27.742 DEBUG 19640 --- [nio-9001-exec-1]
注意
以前的tk.mybatis作者重新开发了最新版的通用mapper,io.mybatis,具体使用和特性可以看官网
转载需注明出处,抄袭必究