关注我的公众号:【编程朝花夕拾】,可获取首发内容。
01 引言
一直很关注dromara社区的项目,最近浏览器项目时,发现一个mybatis-jpa-extra项目,里面针对JPA扩展,可以使用Lambda表达式,于是好奇的点进去了解了一下,分享给大家。
02 简介
MyBatis JPA Extra对MyBatis扩展JPA功能,Jakarta JPA 注释简化CRUD操作,增强了SELECT分页查询,增加链式Query查询条件构造器;支持Lambda 形式调用,方便编写各类查询条件,使用@Encrypted注解轻松实现字段数据加密和解密以及字段数据自动填充功能等。
GitHub地址:github.com/dromara/myb…
Gitee地址:gitee.com/dromara/myb…
03 简单使用
3.1 依赖
Maven
<dependency>
<groupId>org.dromara.mybatis-jpa-extra</groupId>
<artifactId>mybatis-jpa-extra-spring-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
mybatis.type-aliases-package=com.simonking.boot.jpa.pojo
3.2 实体定义
@Data
@Entity(name = "users")
public class Users extends JpaEntity {
@Id
@Column
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column
private String username;
@Column
private String password;
@Column(name = "password_salt")
private String passwordSalt;
@Column(name = "del_flag")
private Boolean delFlag;
}
需要注意的是这里的@Column一定要加,否则使用Lambda调用的时候会出现sql异常。
3.3 接口以及实现
/**
* 接口
*/
public interface UsersService extends IJpaService<Users, Integer> {
}
/**
* 实现
*/
@Service
public class UsersServiceImpl extends JpaServiceImpl<UsersMapper, Users, Integer> implements UsersService {
}
官方说明里面继承的是AbstractJpaRepository,使用起来有点小问题,会导致getMapper为空的异常。使用时需要继承JpaServiceImpl。
3.4 Mapper
@Mapper
public interface UsersMapper extends IJpaMapper<Users, Integer> {
}
这里的Mapper可以使用@Mapper注解,也可以使用@MapperScan("com.simonking.boot.jpa.mapper")放在启动类上。
3.5 测试
@Autowired
private UsersService usersService;
/**
* JPA 测试
*/
@Test
void test03() {
Users byId = usersService.findById(1);
System.out.println(byId);
}
/**
* Lambda 测试
*/
@Test
void test02() {
usersService.query(new LambdaQuery<Users>()
.eq(Users::getUsername, "test")
).forEach(System.out::println);
}
/**
* Mybatis 注解测试
*/
@Test
void test03() {
Users users = usersService.getByUsername("lisi");
System.out.println(users);
}
结果
04 小结
作者是基于Mybaits扩展的JPA。类似框架Mybaits-Plus、Mybaits-Flex,本身是对Mybatis的增强,没有引入其他的框架。mybatis-jpa-extra何尝不是一种新的选择。
框架可能还不成熟,测试下来总会碰到一些小问题。
xxxServiceImpl需要继承JpaServiceImpl,而不是AbstractJpaRepository,否则getMapperis null- 使用
SpringBoot 3.x启动异常,使用SpringBoot4.0.1正常启动测试 insert方法没有返回主键
使用下来感觉没有MP、MF丝滑,就没有深入去了解了。有懂的朋友一起唠唠!