在Java web应用开发过程中,ORM(Object-Relational Mapping)映射技术用来将数据库中的关系型数据映射到Java对象中,方便开发者进行数据访问和操作。Spring Boot作为目前最流行的Java web开发框架之一,已经提供了集成MyBatis的方式,而MyBatis Plus则是在MyBatis的基础上扩展的一种ORM框架。本文将介绍如何使用Spring Boot和MyBatis Plus来实现ORM映射。
一、Spring Boot集成MyBatis Plus
在Spring Boot中使用MyBatis Plus非常简单,只需在maven中加入MyBatis Plus的依赖即可。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
同时,在application.properties或application.yml中配置MyBatis Plus相关参数,如下所示:
#数据库配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
#MyBatis Plus配置
mybatis.configuration.cache-enabled=false
mybatis.mapper-locations=classpath:mapper/*.xml
其中,driver-class-name, url, username和password是数据库相关配置,而mapper-locations是MyBatis Plus的SQL映射配置文件所在的路径。
二、定义实体类和Mapper接口
和MyBatis一样,使用MyBatis Plus也需要定义实体类和Mapper接口。下面以一个简单的User表为例,定义对应的实体类和Mapper接口。
- 定义实体类
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
private String email;
private Integer gender;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
使用注解@Getter、@Setter和@Builder可以简化代码,而@NoArgsConstructor和@AllArgsConstructor是用来生成无参和全参构造函数的。
- 定义Mapper接口
public interface UserMapper extends BaseMapper<User> {
}
这里使用了MyBatis Plus提供的BaseMapper,可以省去许多繁琐的SQL操作。
三、使用MyBatis Plus进行数据库操作
在定义完Mapper接口后,就可以使用MyBatis Plus来进行数据库操作了。
- 插入数据
User user = User.builder()
.name("test")
.age(20)
.email("test@test.com")
.gender(1)
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.build();
int count = userMapper.insert(user);
在插入数据时,可以直接使用Mapper接口中提供的insert方法,MyBatis Plus会自动将实体类的属性映射到数据库中的对应列。
- 查询数据
List<User> userList = userMapper.selectList(null);
在查询数据时,可以直接使用Mapper接口中提供的selectList方法,传入null或者一个空的QueryWrapper对象即可查询出所有数据。另外,还可以使用MyBatis Plus提供的lambda表达式和链式操作来进行更为复杂的查询,如下所示:
QueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery()
.eq(User::getGender, 1)
.ge(User::getAge, 20)
.orderByDesc(User::getCreateTime);
List<User> userList = userMapper.selectList(wrapper);
在上述代码中,使用Wrappers.<User>lambdaQuery()定义了一个QueryWrapper对象,并且通过.eq、.ge和.orderByDesc链式操作来构建查询条件和排序规则。
- 更新数据
User user = userMapper.selectById(id);
user.setAge(30);
int count = userMapper
.........................................................