引言
在现代 java 开发中,mybatis-plus 作为 mybatis 的增强工具,以其简化 crud 操作和无需编写 xml 映射文件的特点,受到了开发者的青睐。
本篇文章将带你一步步整合 spring boot 与 mybatis-plus,并展示其在实际开发中的应用,包括事务管理、安全性考虑、性能优化等高级特性。
环境准备
1.1 导入依赖
在 pom.xml
文件中添加 mybatis-plus 的起步依赖:
<dependency> <groupid>com.baomidou</groupid> <artifactid>mybatis-plus-boot-starter</artifactid> <version>3.4.0</version> </dependency>
确保使用 maven helper 插件检查依赖冲突。
1.2 修改配置文件
在 application.yml
中配置数据库连接和 mybatis-plus 参数:
server: port: 8889 spring: datasource: url: jdbc:mysql://localhost:3306/boot_mybatis?servertimezone=utc&useunicode=true&characterencoding=utf-8&allowpublickeyretrieval=true username: root password: 123456 mybatis-plus: mapper-locations: mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.stdoutimpl map-underscore-to-camel-case: true type-aliases-package: com.example.demo.entity
1.3 iuser 实体类
定义 iuser 实体类,映射数据库中的用户表:
@data @tablename("t_user") public class iuser { @tableid(value = "u_id", type = idtype.auto) private integer uid; @tablefield("user_name") private string username; private string email; private string password; private date birth; private int gender; }
1.4 usermapper 接口
创建 usermapper 接口,继承 basemapper:
@mapper public interface iusermapper extends basemapper<iuser> {}
使用
2.1 基础增删改查
新增一条 user 数据
@autowired private iusermapper usermapper; @test public void insertuser() { iuser user = new iuser(); user.setusername("曹操"); user.setpassword("88888888"); user.setemail("321@qin.com"); usermapper.insert(user); }
根据条件删除 user
@test public void deleteuserbyid() { usermapper.deletebyid(1001); }
2.2 批量操作
批量新增
@test public void batchinsertusers() { list<iuser> users = arrays.aslist( new iuser().setusername("关羽").setpassword("258"), new iuser().setusername("关公").setpassword("7530"), new iuser().setusername("关项").setpassword("159") ); usermapper.insertbatch(users); }
2.3 查询条件构造器【querywrapper】使用
使用 querywrapper 构造查询条件:
@test public void selectusersbyquerywrapper() { querywrapper<iuser> querywrapper = new querywrapper<>(); querywrapper.eq("user_name", "项羽").like("email", "123@163.com"); usermapper.selectlist(querywrapper); }
2.4 修改条件构造器【updatewrapper】使用
使用 updatewrapper 构造更新条件:
@test public void updateuserbyupdatewrapper() { updatewrapper<iuser> updatewrapper = new updatewrapper<>(); updatewrapper.eq("user_name", "王小五").set("email", "wxw@qq.com"); usermapper.update(null, updatewrapper); }
2.5 事务管理
事务的配置
在服务层方法上使用 @transactional
注解来确保操作的原子性。
@service public class userservice { @autowired private iusermapper usermapper; @transactional public void updateuserandsendemail(string username, string newemail) { // 更新用户信息 iuser user = new iuser(); user.setusername(username); user.setemail(newemail); usermapper.updatebyid(user); // 发送邮件操作(示例) sendemailtouser(username, newemail); } private void sendemailtouser(string username, string email) { // 邮件发送逻辑 } }
事务的传播行为
spring 支持多种事务传播行为,可以根据业务需求配置。
2.6 安全性考虑
防止 sql 注入
mybatis-plus 通过预编译的语句防止 sql 注入。
数据加密
在应用层对敏感数据进行加密,比如用户密码的存储和验证。
public class securityutils { public static string encryptpassword(string password) { // 加密密码逻辑 } public static boolean checkpassword(string rawpassword, string encryptedpassword) { // 验证密码逻辑 } }
代码生成器
3.1 准备项目和数据库表
准备一个 spring boot 空项目,并创建数据库表:
create table `t_user` ( `u_id` int not null auto_increment comment '主键', `user_name` varchar(10) not null comment '用户登录名', `email` varchar(50) default null comment '邮箱', `pass_word` varchar(30) not null comment '密码', ... primary key (`u_id`) ) engine=innodb default charset=utf8mb3;
3.2 引入依赖
在 pom.xml
中添加代码生成器的依赖:
<dependency> <groupid>com.baomidou</groupid> <artifactid>mybatis-plus-generator</artifactid> <version>3.4.0</version> </dependency> <dependency> <groupid>org.apache.velocity</groupid> <artifactid>velocity-engine-core</artifactid> <version>2.0</version> </dependency>
3.3 配置文件
在 application.yml
中配置数据库连接:
spring: datasource: url: jdbc:mysql://localhost:3306/generate?servertimezone=utc&useunicode=true&characterencoding=utf-8&allowpublickeyretrieval=true username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.driver
3.4 测试工具类
创建一个测试工具类,用于自动生成代码:
public class codegenerator { public static void main(string[] args) { autogenerator mpg = new autogenerator(); mpg.setdatasource(new datasourceconfig.builder() .seturl("jdbc:mysql://localhost:3306/generate?servertimezone=utc&useunicode=true&characterencoding=utf-8&allowpublickeyretrieval=true") .setdrivername("com.mysql.cj.jdbc.driver") .setusername("root") .setpassword("123456") .build()); mpg.setglobalconfig(new globalconfig.builder() .setoutputdir(system.getproperty("user.dir") + "/src/main/java") .setauthor("your name") .setopen(false) .build()); mpg.setpackageinfo(new packageconfig.builder() .setparent("com.example.demo") .setentity("entity") .setmapper("mapper") .setservice("service") .setcontroller("controller") .build()); mpg.setstrategy(new strategyconfig.builder() .setinclude("t_user") .build()); mpg.execute(); } }
3.5 生成目录结构
运行上述测试工具类,生成项目的目录结构。
3.6 调整和测试
调整生成的 mapper xml 文件位置,并在 mapper 接口上添加 @mapper 注解。
在启动类上添加 @mapperscan 注解。然后进行测试,例如新增一个用户:
@autowired private tusermapper usermapper; @test public void testinsertuser() { tuser user = new tuser(); user.setusername("王中王"); user.setpassword("wzw123456"); usermapper.insert(user); }
总结与学习成果
本篇文章,您将能够获得以下知识和技能:
- 环境搭建:您将学会如何在 spring boot 项目中引入 mybatis-plus,并配置必要的依赖和数据库连接。
- 实体类与mapper接口:您将了解如何创建实体类来映射数据库表,以及如何定义 mapper 接口来操作数据库。
- crud操作:您将掌握使用 mybatis-plus 进行基础的增删改查操作,包括单条记录和批量操作的处理。
- 条件构造器:您将学会使用 querywrapper 和 updatewrapper 来构建复杂的查询和更新条件,提高代码的可读性和维护性。
- 事务管理:您将了解如何在服务层方法上使用
@transactional
注解来确保数据库操作的原子性。 - 安全性实践:您将学到如何防止 sql 注入攻击,并对敏感数据进行加密处理,增强应用的安全性。
- 性能优化:您将探索查询优化技巧和缓存策略,以提高数据库操作的性能。
- 版本兼容性与迁移:您将了解不同版本的 mybatis-plus 之间的差异,并学会如何将旧版本迁移到新版本。
- 实际应用场景:您将通过实际案例分析,了解 mybatis-plus 在解决实际问题中的应用。
- 监控与日志:您将学会如何配置和使用 mybatis-plus 的日志记录功能,以及如何监控数据库操作的性能。
- 代码生成器:您将掌握如何使用 mybatis-plus 提供的代码生成器来快速生成项目代码,提高开发效率。
通过这些内容,您不仅能够深入了解 mybatis-plus 的强大功能,还能够将这些知识应用到实际项目中,提升您的开发能力和项目质量。希望这篇文章能够帮助您在 spring boot 和 mybatis-plus 的学习之路上更进一步。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论