当前位置:   article > 正文

MyBatis-plus实现代码自动生成以及简单的增删改查_mybatisplus的代码生成器可以直接生成增删改查

mybatisplus的代码生成器可以直接生成增删改查

接着上篇博客前后端分离项目搭建,本片博客主要通过mybatis-plus实现代码自动生成以及简单的后端增删改查功能,话不多说,直接上代码。有需要代码的可以私聊

首先pom文件将需要的依赖引入进来,我这边用到的依赖如下代码所示。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.6.6</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example.mm</groupId>
  12. <artifactId>demo1</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>demo1</name>
  15. <description>demo1</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.mybatis.spring.boot</groupId>
  26. <artifactId>mybatis-spring-boot-starter</artifactId>
  27. <version>2.2.0</version>
  28. </dependency>
  29. <!--mybatis-plus 代码生成器依赖-->
  30. <dependency>
  31. <groupId>com.baomidou</groupId>
  32. <artifactId>mybatis-plus-generator</artifactId>
  33. <version>3.3.1.tmp</version>
  34. </dependency>
  35. <!--freemarker 依赖-->
  36. <dependency>
  37. <groupId>org.freemarker</groupId>
  38. <artifactId>freemarker</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>mysql</groupId>
  42. <artifactId>mysql-connector-java</artifactId>
  43. <scope>runtime</scope>
  44. </dependency>
  45. <dependency>
  46. <groupId>com.alibaba</groupId>
  47. <artifactId>druid</artifactId>
  48. <version>1.2.3</version>
  49. </dependency>
  50. <dependency>
  51. <groupId>org.projectlombok</groupId>
  52. <artifactId>lombok</artifactId>
  53. <optional>true</optional>
  54. </dependency>
  55. <dependency>
  56. <groupId>com.baomidou</groupId>
  57. <artifactId>mybatis-plus-boot-starter</artifactId>
  58. <version>3.4.3.1</version>
  59. </dependency>
  60. <dependency>
  61. <groupId>cn.hutool</groupId>
  62. <artifactId>hutool-all</artifactId>
  63. <version>5.7.3</version>
  64. </dependency>
  65. </dependencies>
  66. <build>
  67. <plugins>
  68. <plugin>
  69. <groupId>org.apache.maven.plugins</groupId>
  70. <artifactId>maven-resources-plugin</artifactId>
  71. <version>3.1.0</version>
  72. </plugin>
  73. <plugin>
  74. <groupId>org.springframework.boot</groupId>
  75. <artifactId>spring-boot-maven-plugin</artifactId>
  76. </plugin>
  77. </plugins>
  78. </build>
  79. </project>

创建一个数据库,我用的sql工具是sqlyog,还有其他的很多工具看个人习惯,就不一一介绍。新建一个表users,插入一些数据。

  1. CREATE TABLE users(
  2.     id INT(10) PRIMARY KEY AUTO_INCREMENT,
  3.     username VARCHAR(20),
  4.     `password` VARCHAR(20),
  5.     nickname VARCHAR(20),
  6.     age INT(10)
  7. )
  8. INSERT INTO users(username,`password`,nickname,age) VALUES ('张三','111','小2',20);
  9. INSERT INTO users(username,`password`,nickname,age) VALUES ('jack','222','小3',22);
  10. INSERT INTO users(username,`password`,nickname,age) VALUES ('rose','333','小4',23);
  11. INSERT INTO users(username,`password`,nickname,age) VALUES ('libai','444','小5',24);
  12. INSERT INTO users(username,`password`,nickname,age) VALUES ('ben','555','小6',25);
  13. INSERT INTO users(username,`password`,nickname,age) VALUES ('李四','666','小7',22);
  14. INSERT INTO users(username,`password`,nickname,age) VALUES ('王五','777','小8',21);
  15. INSERT INTO users(username,`password`,nickname,age) VALUES ('赵六','888','小9',23);
  16. INSERT INTO users(username,`password`,nickname,age) VALUES ('田七','999','小0',25);
  17. INSERT INTO users(username,`password`,nickname,age) VALUES ('lily','000','小1',60);
  18. INSERT INTO users(username,`password`,nickname,age) VALUES ('mali','aaa','小a',30);

然后在resources下面新建一个application.properties文件(或者yaml文件也可以),相应配置如下

  1. server.port=8888
  2. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  3. spring.datasource.url=jdbc:mysql://localhost:3306/crudTest?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
  4. spring.datasource.username=root
  5. spring.datasource.password=root
  6. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

这两个地方注意一下,端口号自己设置,一般默认是8080,还有下面的是数据库名称,不是表名称,不要搞错,其他的像驱动,用户名密码这些填写自己设置的就好了。 

随后创建一个package,命名为config,创建一个CodeGenerator文件,主要用来自动生成代码,对于一些简单的项目能够大大提高效率。

  1. public class CodeGenerator {
  2. /**
  3. * <p>
  4. * 读取控制台内容
  5. * </p>
  6. */
  7. public static String scanner(String tip) {
  8. Scanner scanner = new Scanner(System.in);
  9. StringBuilder help = new StringBuilder();
  10. help.append("请输入" + tip + ":");
  11. System.out.println(help.toString());
  12. if (scanner.hasNext()) {
  13. String ipt = scanner.next();
  14. if (StringUtils.isNotEmpty(ipt)) {
  15. return ipt;
  16. }
  17. }
  18. throw new MybatisPlusException("请输入正确的" + tip + "!");
  19. }
  20. public static void main(String[] args) {
  21. // 代码生成器
  22. AutoGenerator mpg = new AutoGenerator();
  23. // 全局配置
  24. GlobalConfig gc = new GlobalConfig();
  25. String projectPath = System.getProperty("user.dir");
  26. gc.setOutputDir(projectPath + "/demo1/src/main/java");
  27. //作者
  28. gc.setAuthor("mozz");
  29. //打开输出目录
  30. gc.setOpen(false);
  31. //xml开启 BaseResultMap
  32. gc.setBaseResultMap(true);
  33. //xml 开启BaseColumnList
  34. gc.setBaseColumnList(true);
  35. // 实体属性 Swagger2 注解
  36. gc.setSwagger2(true);
  37. mpg.setGlobalConfig(gc);
  38. // 数据源配置
  39. DataSourceConfig dsc = new DataSourceConfig();
  40. dsc.setUrl("jdbc:mysql://localhost:3306/crudTest? useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia" + "/Shanghai");
  41. dsc.setDriverName("com.mysql.jdbc.Driver");
  42. dsc.setUsername("root");
  43. dsc.setPassword("root");
  44. mpg.setDataSource(dsc);
  45. // 包配置
  46. PackageConfig pc = new PackageConfig();
  47. pc.setParent("com.example.mm")
  48. .setEntity("pojo")
  49. .setMapper("mapper")
  50. .setService("service")
  51. .setServiceImpl("service.impl")
  52. .setController("controller");
  53. mpg.setPackageInfo(pc);
  54. // 自定义配置
  55. InjectionConfig cfg = new InjectionConfig() {
  56. @Override
  57. public void initMap() {
  58. // to do nothing
  59. }
  60. };
  61. // 如果模板引擎是 freemarker
  62. String templatePath = "/templates/mapper.xml.ftl";
  63. // 如果模板引擎是 velocity
  64. // String templatePath = "/templates/mapper.xml.vm";
  65. // 自定义输出配置
  66. List<FileOutConfig> focList = new ArrayList<>();
  67. // 自定义配置会被优先输出
  68. focList.add(new FileOutConfig(templatePath) {
  69. @Override
  70. public String outputFile(TableInfo tableInfo) {
  71. // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会
  72. return projectPath + "/demo1/src/main/resources/mapper/"
  73. + tableInfo.getEntityName() + "Mapper"
  74. + StringPool.DOT_XML;
  75. }
  76. });
  77. cfg.setFileOutConfigList(focList);
  78. mpg.setCfg(cfg);
  79. // 配置模板
  80. TemplateConfig templateConfig = new TemplateConfig();
  81. templateConfig.setXml(null);
  82. mpg.setTemplate(templateConfig);
  83. // 策略配置
  84. StrategyConfig strategy = new StrategyConfig();
  85. //数据库表映射到实体的命名策略
  86. strategy.setNaming(NamingStrategy.underline_to_camel);
  87. //数据库表字段映射到实体的命名策略
  88. strategy.setColumnNaming(NamingStrategy.no_change);
  89. //lombok模型
  90. strategy.setEntityLombokModel(true);
  91. //生成 @RestController 控制器
  92. strategy.setRestControllerStyle(true);
  93. strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
  94. strategy.setControllerMappingHyphenStyle(true);
  95. //表前缀
  96. // strategy.setTablePrefix("t_");
  97. mpg.setStrategy(strategy);
  98. mpg.setTemplateEngine(new FreemarkerTemplateEngine());
  99. mpg.execute();
  100. }
  101. }

随后运行代码生成器,会出现下图提示。

如果多个表,用逗号隔开就可以,如下图(举个例子)

因为 我这边只建了一个表users,所以只需要输入users就可以,按下回车键,就会自动生成代码。

因为返回前端一般都是三大部分组成,状态码code,信息msg以及data(后端数据),所以需要一个Result文件用来封装,创建一个名为common的package,创建Resut文件,内容如下。

  1. public class Result<T> {
  2. private String code;
  3. private String msg;
  4. private T data;
  5. public Result(String code, String msg, T data) {
  6. this.code = code;
  7. this.msg = msg;
  8. this.data = data;
  9. }
  10. public String getCode() {
  11. return code;
  12. }
  13. public void setCode(String code) {
  14. this.code = code;
  15. }
  16. public String getMsg() {
  17. return msg;
  18. }
  19. public void setMsg(String msg) {
  20. this.msg = msg;
  21. }
  22. public T getData() {
  23. return data;
  24. }
  25. public void setData(T data) {
  26. this.data = data;
  27. }
  28. public Result(){};
  29. public Result(T data){
  30. this.data=data;
  31. }
  32. public static Result success(){
  33. Result result=new Result<>();
  34. result.setCode("0");
  35. result.setMsg("成功");
  36. return result;
  37. }
  38. public static<T> Result<T> success(T data){
  39. Result<T> result=new Result<>(data);
  40. result.setCode("0");
  41. result.setMsg("成功");
  42. return result;
  43. }
  44. public static Result error(String code, String msg){
  45. Result result=new Result<>();
  46. result.setCode(code);
  47. result.setMsg(msg);
  48. return result;
  49. }
  50. }

 然后会自动分好层,包括sql语句在resources目录下面的mapper里都写好了,只需要在controller层写下相应的增删改查就可以了,因为这个比较简单,我就没有用service层,在mapper层继承了baseMapper,也可以加一层service层,他会继承Iservice,有兴趣的可以去了解一下baseMapper和Iservice的区别,具体的代码如下。

  1. import cn.hutool.core.util.StrUtil;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.example.mm.common.Result;
  6. import com.example.mm.mapper.UsersMapper;
  7. import com.example.mm.pojo.Users;
  8. import org.springframework.web.bind.annotation.*;
  9. import javax.annotation.Resource;
  10. /**
  11. * <p>
  12. * 前端控制器
  13. * </p>
  14. *
  15. * @author mozz
  16. * @since 2022-04-07
  17. */
  18. @RestController
  19. @RequestMapping("/users")
  20. public class UsersController {
  21. @Resource
  22. private UsersMapper usersMapper;
  23. /**
  24. * 根据id获取用户信息
  25. */
  26. @GetMapping("/{id}")
  27. public Result<?> getNewsById(@PathVariable Long id){
  28. return Result.success(usersMapper.selectById(id));
  29. }
  30. /**
  31. * 分页查询用户信息
  32. */
  33. @GetMapping("/userInfo")
  34. public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
  35. @RequestParam(defaultValue = "10") Integer pageSize,
  36. @RequestParam(defaultValue = "") String search) {
  37. LambdaQueryWrapper<Users> wrapper = Wrappers.<Users>lambdaQuery();
  38. if (StrUtil.isNotBlank(search)) {
  39. wrapper.like(Users::getUsername, search);
  40. }
  41. Page<Users> usersPage = usersMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
  42. return Result.success(usersPage);
  43. }
  44. /**
  45. * 查询所有用户信息
  46. */
  47. @GetMapping("/all")
  48. public Result<?> findAll() {
  49. return Result.success(usersMapper.selectList(null));
  50. }
  51. /**
  52. * 根据id修改用户信息
  53. */
  54. @PutMapping("update")
  55. public Result<?> update(@RequestBody Users users){
  56. usersMapper.updateById(users)
  57. return Result.success(users);
  58. }
  59. /**
  60. * 根据id删除用户信息
  61. */
  62. @DeleteMapping("delete/{id}")
  63. public Result<?> delete(@PathVariable int id){
  64. return Result.success(usersMapper.deleteById(id));
  65. }
  66. /**
  67. * 添加用户信息
  68. */
  69. @PostMapping("add")
  70. public Result<?> addUsers(@RequestBody Users users){
  71. usersMapper.insert(users);
  72. return Result.success(users);
  73. }
  74. }

最后在postman中测试一下,结果如下,增删改查成功。 

 

更新操作需要注意一下,该操作是put操作,有请求体。

 更新后可以看到数据库内容发生变化。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/598319
推荐阅读
相关标签