【Spring实战】08 Mybatis
Spring 集成 MyBatis 为 Java 项目提供了强大的持久层解决方案,同时也是我们使用最多的搭配组合。本文将介绍 Spring 如何集成 MyBatis 设定常用的配置以及实际开发过程中经常使用到的简单样例。
1. 定义
MyBatis 是一个开源的持久化框架,它通过 XML 或注解配置,将对象与数据库表进行映射,简化了数据库操作。
官网
https://mybatis.net.cn/
2. 添加依赖
需要在 pom.xml 中添加 mybatis 的依赖(如果使用 Gradle 的话,则需要添加对应的依赖)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
※此处的 version 选择了目前最新的版本 3.0.3
3. 使用
1)共通配置
在 application.properties 属性文件中,配置 mybatis 的共通设定
mybatis.mapper-locations=classpath*:mapper/**/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
- 指定 xml 的扫描路径,以便自动扫描并加载 XML 映射文件
- 将数据库中下划线命名的字段自动映射为 Java 类中的驼峰命名属性
2)初始化表
schema.sql
使用程序启动时,默认执行的 schema.sql 来创建 t_user
表
CREATE TABLE IF NOT EXISTS `t_user` (
`id` INTEGER PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`age` INTEGER NOT NULL
);
3)创建 model
User.java
创建一个实体类,这里跟 t_user
表结构相同
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private Integer age;
}
4)创建 Dao 及 Mapper
-
插入多条
UserDao.java
int insertUsers(List<User> users);
UserMapper.xml
<insert id="insertUsers"> insert into t_user ( id, name, age ) values <foreach item="user" collection="users" open="(" separator="),(" close=")"> #{user.id}, #{user.name}, #{user.age} </foreach> </insert>
此处,使用了 XML 的方式写的 sql 文
-
插入单条
UserDao.java
int insertUser(User user);
UserMapper.xml
<insert id="insertUser"> insert into t_user ( id, name, age ) values ( #{id}, #{name}, #{age} ) </insert>
此处,使用了 XML 的方式写的 sql 文
-
删除
UserDao.java
@Delete("delete from t_user where id = #{id}") int deleteUser(Integer id);
此处,使用了注解的方式写的 sql 文
-
更新
UserDao.java
int updateUser(User user);
UserMapper.xml
<update id="updateUser"> update t_user set name = #{name}, age = #{age} where id = #{id} </update>
此处,使用了 XML 的方式写的 sql 文
-
查询全部
UserDao.java
@Select("select * from t_user") List<User> selectUsers();
此处,使用了注解的方式写的 sql 文
-
查询指定ID
UserDao.java
@Select("select * from t_user where id = #{id}") User selectUser(Integer id);
此处,使用了注解的方式写的 sql 文
5)验证
-
插入单条
UserController.java
@GetMapping("insertUser") public String insertUser() { User user = User.builder().id(1).name("cheney").age(11).build(); userDao.insertUser(user); return "登陆了一条用户信息:</br>" + user.toString(); }
网页请求
-
插入多条
UserController.java
@GetMapping("insertUsers") public String insertUsers() { List<User> users = new ArrayList<>(); users.add(User.builder().id(2).name("aaa").age(12).build()); users.add(User.builder().id(3).name("bbb").age(13).build()); userDao.insertUsers(users); StringBuilder sb = new StringBuilder(); sb.append("登陆了两条用户信息:</br>"); for (User user : users) { sb.append(user).append("</br>"); } return sb.toString(); }
网页请求
-
更新
UserController.java
@GetMapping("updateUser") public String updateUser() { User user = User.builder().id(1).name("cheney").age(22).build(); userDao.updateUser(user); return "修改了用户ID是1的用户信息:</br>" + user.toString(); }
网页请求
-
查询指定ID
UserController.java
@GetMapping("selectUser") public String selectUser() { User user = userDao.selectUser(1); return "查询用户ID是1的用户信息:</br>" + user.toString(); }
网页请求
-
删除
UserController.java
@GetMapping("deleteUser") public String deleteUser() { userDao.deleteUser(3); return "删除了用户ID是3的用户信息"; }
网页请求
-
查询全部
UserController.java
@GetMapping("selectUsers") public String selectUsers() { List<User> users = userDao.selectUsers(); StringBuilder sb = new StringBuilder(); sb.append("查询所有数据库中的用户信息:</br>"); for (User user : users) { sb.append(user).append("</br>"); } return sb.toString(); }
网页请求
4. 优点
-
灵活性
允许开发者自定义 SQL 查询语句,更灵活地进行数据库操作
-
直观的 SQL
SQL 语句直观、可读性强,开发者可以更容易地理解和调试 SQL
-
轻量级
MyBatis 更注重数据库操作,使得开发者可以更专注于 SQL 和数据层的细节
-
缓存支持
支持一级缓存和二级缓存,可以提高查询性能,特别是在高并发的情况下
5. 缺点
-
不适合复杂逻辑
对于包含复杂业务逻辑的项目,MyBatis 可能显得不够强大,因为它专注于数据库操作,而不提供全栈解决方案。
-
需要手动编写 SQL
对于一些开发者而言,需要手动编写 SQL 可能是一项负担。相对于基于对象的框架,这可能增加了一些工作量。
-
不提供声明式事务
MyBatis 不提供声明式的事务管理,事务需要在代码中显式处理。
-
灵活性可能导致混乱
MyBatis 的灵活性允许开发者使用任何 SQL 查询语句,但这也可能导致项目中的 SQL 混乱不堪,特别是对于大型团队。
6.代码详细
https://github.com/cheney09/spring-practical-combat/tree/main/08/demo
总结
以上就是 Spring 集成 MyBatis 的简要步骤,通过这种集成方式你可以更加便捷地使用 MyBatis 进行数据库操作,希望这篇博客将带你走进 Spring 和 MyBatis 进行持久化层开发。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!