目录
一、MyBatis
1.MyBatis简介
MyBatis是一个基于Java语言的持久层框架,它通过XML描述符或注解将对象与存储过程或SQL语句进行映射,并提供了普通SQL查询、存储过程和高级映射等操作方式,使得操作数据库变得非常方便。
2.MyBatis优点
- 灵活性高:MyBatis不会对应用程序或数据库的现有设计强加任何影响,开发人员可以使用他们已经熟悉的SQL语句、存储过程和数据库触发器等
- SQL可控性强:对于复杂查询和多表关联查询时,MyBatis的优势尤为明显,因为可以更加灵活地控制生成的SQL语句,并在需要的情况下针对不同的数据库实现进行优化。
- 缓存机制好:MyBatis提供了一级缓存和二级缓存,可以有效地减少数据库访问次数,提高响应速度,而且它们的使用非常方便,并且默认情况下处于开启状态。
- 生态系统完善:MyBatis有着非常强大的社区支持,同时它也与Spring,Spring Boot等流行框架或中间件无缝整合,方便企业级项目的开发。
3.MyBatis局限性
- 性能问题:相比于Hibernate等ORM框架,在大规模数据处理能力和并发性方面,MyBatis的性能表现略逊一筹。
- 配置复杂:相比Hibernate等ORM框架,MyBatis的配置文件相对较为复杂,需要花费更多的时间和精力进行配置。
- 映射错误难以追踪:由于映射文件是通过XML描述符或注解进行的,为了解决常见的SQL问题,需要对SQL语句的编写和映射文件的正确描述非常敏感,出现异常时排查起来也较为繁琐。
二、Spring Boot中整合MyBatis
在Spring Boot中整合MyBatis可以通过以下步骤实现:
1、添加依赖
在pom.xml
文件中添加MyBatis和数据库驱动的依赖。
<dependencies>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
<groupId>com.mysql.cj</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
2、配置数据源
在application.properties
或application.yml
文件中配置数据库连接信息。
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydatabase
username: root
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
3、创建实体类
创建与数据库表对应的实体类。
public class User {
private Long id;
private String userName;
private String passWord;
private String realName;
// 省略getter和setter方法
}
4、创建Mapper接口
创建Mapper接口,定义数据库操作方法。
@Mapper
public interface UserMapper {
User getUserById(Long id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(Long id);
}
5、创建Mapper XML文件
在resources目录下创建与Mapper接口对应的XML文件,编写SQL语句。
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO user (userName, passWord, realName) VALUES (#{userName}, #{passWord}, #{realName})
</insert>
<update id="updateUser">
UPDATE user SET userName = #{userName}, passWord = #{passWord}, realName = #{realName} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
6、注册Mapper接口
在启动类中添加@MapperScan
注解,指定Mapper接口所在的包。
@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
7、使用Mapper接口(编写Service)
编写Service层,在需要使用数据库操作的地方注入Mapper接口,并调用相应的方法。
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
public void insertUser(User user) {
userMapper.insertUser(user);
}
public void updateUser(User user) {
userMapper.updateUser(user);
}
public void deleteUser(Long id) {
userMapper.deleteUser(id);
}
}
8、编写Controller层
创建Controller类,处理HTTP请求,并调用对应的Service方法。
@RestController
public class UserController {
@Autowired
private UserService userService;
// 处理GET请求,获取用户列表
@GetMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
// 处理POST请求,添加新用户
@PostMapping("/users")
public void addUser(@RequestBody User user) {
userService.addUser(user);
}
// 处理PUT请求,更新用户信息
@PutMapping("/users/{id}")
public void updateUser(@PathVariable("id") Long id, @RequestBody User user) {
user.setId(id);
userService.updateUser(user);
}
// 处理DELETE请求,删除用户信息
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable("id") Long id) {
userService.deleteUserById(id);
}
}
三、整合MyBatis-plus
1.添加依赖
在 Maven 或 Gradle 中添加 MyBatis-Plus 和相关依赖。
<!-- MyBatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
<!-- 数据库驱动,根据实际使用的数据库选择 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2.配置数据源
在 application.properties
或 application.yml
文件中配置数据库连接信息
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123
url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8
mybatis-plus.global-config.db-config.table-prefix: tb_
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.创建实体类
创建与数据库表对应的实体类,并使用 MyBatis-Plus 的注解进行映射。
@Data
@TableName("user") // 表名映射
public class User {
@TableId // 主键映射
private Long id;
private String name;
private Integer age;
}
4.创建Mapper接口
创建接口继承 MyBatis-Plus 提供的 BaseMapper
接口,并定义自己的数据访问方法。
public interface UserMapper extends BaseMapper<User> {
// 自定义查询方法
List<User> findByName(String name);
}
5.使用注解
在 Service 层中使用 @Autowired
注解注入 Mapper 接口,并在需要的方法上使用 MyBatis-Plus 提供的注解进行数据库操作。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> findByName(String name) {
return userMapper.findByName(name);
}
// 其他数据操作方法...
}
通过以上步骤,就完成了 Spring Boot 与 MyBatis-Plus 的整合。