• 第07章 MyBatisPlus持久化操作(一)


    序言

    1.内容介绍

    ​ 本章介绍了代码生成器的作用、配置方式以及如何采用代码生成器自动生成MyBatisPlus模板代码进行了描述,重点引入了两个持久层的案例分别是单条信息添加以及批量信息添加,实现对于持久层操作有个深刻的理解。

    2.理论目标

    • 了解代码生成器的作用
    • 掌握代码生成器的配置
    • 掌握信息持久化操作步骤

    3.实践目标

    • 熟练进行多方式单条信息添加操作,满足项目单目记录持久化需求
    • 熟练进行saveOrUpdate操作,达到灵活进行记录的添加、更新操作
    • 熟练进行批量信息添加,满足项目中多记录的导入需求

    4.实践案例

    • MyBatisPlus模板代码自动生成实战
    • 单条信息添加实战
    • 批量信息添加实战

    5.内容目录

    • 1.代码生成器
    • 2.单条信息添加实战
    • 3.批量信息添加实战

    第1节 代码生成器

    1. 代码生成器介绍

    • AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

    2. 代码生成器配置

    添加依赖pom.xml

     
    

    com.baomidou mybatis-plus-generator 3.4.2

     
    

    org.freemarker freemarker 2.3.31 AutoGenerator generator = new AutoGenerator(); // set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine());

    编写配置

     
    

    //配置 GlobalConfig GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); globalConfig.setAuthor("jobob"); globalConfig.setOpen(false);

     
    

    //配置 DataSourceConfig DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/userdb?useUnicode=true&useSSL=false&characterEncoding=utf8"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("password");

    自定义属性注入

     
    

    autoGenerator .setCfg(injectionConfig);

    3. 执行代码生成器

    4. 代码模块详解

    • entity包:实体模型层

    • mapper包:持久化模型层

       

      //自动生成类UserMapper.java public interface UserMapper extends BaseMapper { }

      com.baomidou.mybatisplus.core.mapper.BaseMapper类:封装了系统持久化方法

    • service包:业务逻辑层,需要调用mapper持久层

      • IUserService.java:业务接口
      • UserServiceImpl.java:业务实现类
     
    

    //UserMapper是调用的持久类 //User是操作的实体类 @Service public class UserServiceImpl extends ServiceImpl implements IUserService { }

    • controller包:控制层

      • UserController.java
       

      @RestController @RequestMapping("/user") public class UserController { }


    第2节 单条信息添加实战

    1. Service CRUD 接口

    • 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
    • 泛型 T 为任意实体对象
    • 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
    • 对象 Wrapper 为 条件构造器

    2. 添加配置

    • 配置MapperScan注解

       

      @MapperScan("cn.com.chinahitech.springboot_user.*.mapper") public class SpringbootUserApplication { ... }

    • 添加日志记录配置

      • resources目录下添加logback.xml
    • application.xml添加配置

      1. mybatis-plus:
      2. type-aliases-package: cn.com.chinahitech.mybatisplus_user.*.entity
      3. global-config:
      4. db-config:
      5. id-type: auto
      6. logic-delete-field: 1
      7. logic-not-delete-value: 0
      8. ......

    3. 添加单用户记录

    3.1 添加操作主要采用两种方式

    • save(参数)
    • saveOrUpdate(参数)

    3.2 编写IUserService.java

     
    

    public interface IUserService extends IService { //添加单用户 void addUser(User user); }

    3.3 编写UserServiceImpl.java

     
    

    @Service public class UserServiceImpl extends ServiceImpl implements IUserService { @Override public void addUser(User user) { save(user); } }

    3.4 编写UserController.java

     
    

    @RestController @RequestMapping("/user") public class UserController { @Autowired private IUserService userService; //save方式添加1条记录 @RequestMapping("/saveOne") public String testSaveOneRecord(){ User user = new User("Tony",23,"tony@123.com"); userService.addUser(user); return "添加1条记录成功!"; } }

    3.5 运行,观察执行结果

    4. 添加或更新1条记录

    采用saveOrUpdate(参数)方法

    4.1 编写IUserService.java

     
    

    //添加或更新用户 void addOrModifyUser(User user);

    4.2 编写UserServiceImpl.java

     
    

    @Override public void addOrModifyUser(User user) { saveOrUpdate(user); }

    4.3 编写UserController.java

     
    

    //saveOrUpdate方式添加或更新1条记录 @RequestMapping("/saveOrUpdate") public String testSaveOrUpdateOneRecord(){ User user = new User(6,"李四",28,"lisi@123.com"); userService.addOrModifyUser(user); return "添加或更新1条记录成功!"; }

    4.4 运行,观察执行结果

    开始实验

    第3节 批量信息添加实战

    1. 添加多用户记录

    1.1 编写IUserService.java

     
    

    //基于List对象方式添加多条记录 void addUserList(List users); //基于batch size方式 void addUserList2(List users,int batchSize);

    1.2 编写UserServiceImpl.java

     
    

    @Override public void addUserList(List users) { saveBatch(users); } @Override public void addUserList2(List users, int batchSize) { saveBatch(users,batchSize); }

    1.3 编写UserController.java

     
    

    //添加多条记录 @RequestMapping("/saveUsers") public String testSaveUsers(){ List userList = new ArrayList(); userList.add(new User("王五",20,"wangwu@123.com")); userList.add(new User("赵四",30,"zhaosi@123.com")); userList.add(new User("田七",24,"tianqi@123.com")); userService.addUserList2(userList,2); //batchSize:2 return "添加多条记录!"; }

    1.4 运行,观察执行结果

    2. 添加或更新多条用户记录

    • 本应用学生参考"添加或更新1条记录"
    • 本应用作为扩展实战

  • 相关阅读:
    【LeetCode滑动窗口专题#2】无重复字符的最长子串
    String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?
    ASP.NET MVC--路由
    基于javaweb简单图书管理系统(jsp+servlet+jdbc)
    防止F12调试的JS代码
    2022年7月31日 暑假第三周总结
    JavaScript算法 — 二叉树遍历
    redis高级案列case
    经纬信息IPO过会:年营收3.5亿 叶肖华控制46.3%股权
    通过OptaPlanner优化 COVID-19 疫苗接种预约安排(2)
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447104