Mybatis基本已是Java数据库访问层的标配了,像Hibernate、JPA这样的ORM的组件反而因为较重的设计和较高复杂度,使用反而没有那么广泛。就像J2EE虽然高大上,最后还是Spring开启了Without J2EE的时代。设计和架构有时候还是得接地气。Mybatis就是这样一款接地气的组件,甚至开始使用的时候感觉写Mapper、配置XML、书写SQL还是会觉得重复、繁琐。即便有了代码生成器和Example样板代码方法,还是感觉维护麻烦,特别是有字段增删的时候。这个时候Mybatis plus组件的增强性功能就体现出优势了。
背景、原理
愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作
- 更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
Mybatis的典型代码
代码生成器配置中的表配置:
<table tableName="t_user" domainObjectName="User"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false"/>
生成的实体Bean
@Data
public class User {
/**
* 主键
*/
private Integer id;
/**
* 用户名
*/
private String userName;
/**
* 更新时间
*/
private Date updatedTime;
}
生成的Mapper
public interface UserMapper {
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
}
生成的xml
<mapper namespace="x.xx.dao.mysql.UserMapper">
<resultMap id="BaseResultMap" type="x.xx.domain.mysql.User">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="updated_time" jdbcType="TIMESTAMP" property="updatedTime" />
</resultMap>
<sql id="Base_Column_List">
id, user_name, updated_time
</sql