• Springboot集成ORM框架开发(保姆级)


    目录

    一,整合Mybatis

    创建springboot项目

    勾选五个插件

    代码生成

    修改全局配置文件中对应的一处

    拷贝代码生成的插件 

     注意:这两处路径要一致

    完善Controller层代码,实现增删改查功能

    BookController

    完成对mapper接口的扫描

    开启事务管理

    ​编辑

    利用Eolink进行测试

     Mybatis与Springboot整合成功

    二,整合Mybatis-plus

    2.1 Mybatis-plus 简介

     2.2 为什么要学习使用MP

     2.2 添加pom依赖

    修改mysql的pom依赖

    修改ymi配置文件为如下

    导入代码生成器

    MPGenerator 

     测试mybatis-plus增删改查

    编写Controller层

    ​编辑项目运行成功

    ​编辑 测试工具进行测试

     三,Mybatisplus中使用Mybatis实现多表联查的功能

     sql语句

    编写MvcBookMapper.xmlxml

    编写MvcBookMapper

    编写MvcBookService

     编写MvcBookServiceImpl

    编写MvcBookController


    一,整合Mybatis

    创建springboot项目

    (不会还有人不会创建吧?赶紧去看看上一篇)

    勾选五个插件

    创建成功

     在以前我们Spring整合Mybatis时会需要一系列的配置,

    如Spring-Mybatis.xml

    jdbc.properties

    datasource

    ........

    而现在当我们勾选了插件创建完项目后就会自动配置

     修改配置为属于自己的

     经测试发现生成的mysql的pom依赖可能会存在矛盾问题,所以这里给他降了版本,使用5.1.44版

    代码生成

    generateconfig.xml

    修改指定sql映射文件生成的位置

    1. "1.0" encoding="UTF-8" ?>
    2. DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    4. <generatorConfiguration>
    5. <properties resource="jdbc.properties"/>
    6. <classPathEntry
    7. location="F:\cangku\mvn_repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/>
    8. <context id="infoGuardian">
    9. <commentGenerator>
    10. <property name="suppressAllComments" value="true"/>
    11. <property name="suppressDate" value="true"/>
    12. commentGenerator>
    13. <jdbcConnection driverClass="${jdbc.driver}"
    14. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    15. <javaTypeResolver>
    16. <property name="forceBigDecimals" value="false"/>
    17. javaTypeResolver>
    18. <javaModelGenerator targetPackage="com.ljj.springbootmybatis.model"
    19. targetProject="src/main/java">
    20. <property name="enableSubPackages" value="false"/>
    21. <property name="constructorBased" value="true"/>
    22. <property name="trimStrings" value="false"/>
    23. <property name="immutable" value="false"/>
    24. javaModelGenerator>
    25. <sqlMapGenerator targetPackage="com.ljj.springbootmybatis.mapper"
    26. targetProject="src/main/resources/mappers">
    27. <property name="enableSubPackages" value="false"/>
    28. sqlMapGenerator>
    29. <javaClientGenerator targetPackage="com.ljj.springbootmybatis.mapper"
    30. targetProject="src/main/java" type="XMLMAPPER">
    31. <property name="enableSubPackages" value="false"/>
    32. javaClientGenerator>
    33. <table schema="" tableName="t_mvc_book" domainObjectName="Book"
    34. enableCountByExample="false" enableDeleteByExample="false"
    35. enableSelectByExample="false" enableUpdateByExample="false">
    36. table>
    37. context>
    38. generatorConfiguration>

    修改全局配置文件中对应的一处

    application.yml

    1. mybatis:
    2. mapper-locations: classpath:mappers/**/*.xml
    3. type-aliases-package: com.ljj.springbootmybatis.model
    4. server:
    5. port: 8080
    6. spring:
    7. application:
    8. name: springbootmybatis
    9. datasource:
    10. driver-class-name: com.mysql.jdbc.Driver
    11. name: defaultDataSource
    12. password: 123456
    13. url: jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
    14. username: root

     jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
    3. jdbc.username=root
    4. jdbc.password=123456

    拷贝代码生成的插件 

     源码:

    1. <groupId>org.mybatis.generatorgroupId>
    2. <artifactId>mybatis-generator-maven-pluginartifactId>
    3. <version>1.3.2version>
    4. <dependencies>
    5. <dependency>
    6. <groupId>mysqlgroupId>
    7. <artifactId>mysql-connector-javaartifactId>
    8. <version>5.1.44version>
    9. dependency>
    10. dependencies>
    11. <configuration>
    12. <overwrite>trueoverwrite>
    13. configuration>

    选择Maven

     生成成功

     注意:这两处路径要一致

    1.BookMapper.xml

    2. application.yml

    统一的时候即使不写方法中的全路径也没关系,只写Book

    完善Controller层代码,实现增删改查功能

    BookController

    1. package com.ljj.springbootmybatis.web;
    2. import com.ljj.springbootmybatis.mapper.BookMapper;
    3. import com.ljj.springbootmybatis.model.Book;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.DeleteMapping;
    6. import org.springframework.web.bind.annotation.PutMapping;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. import java.text.Bidi;
    10. import java.util.List;
    11. /**
    12. * @author ljj
    13. * @site www.xiaomage.com
    14. * @company
    15. * @create  2022-11-04 20:06
    16. */
    17. @RestController
    18. @RequestMapping("mybatis")
    19. public class BookController {
    20. @Autowired
    21. private BookMapper bookMapper;
    22. // 查询
    23. @RequestMapping("/get")
    24. public Book get(Integer bid){
    25. return bookMapper.selectByPrimaryKey(bid);
    26. }
    27. // 删除
    28. @DeleteMapping("/delete")
    29. public int delete(Integer bid){
    30. return bookMapper.deleteByPrimaryKey(bid);
    31. }
    32. // 新增
    33. @PutMapping("/add")
    34. public int add(Book book){
    35. return bookMapper.insertSelective(book);
    36. }
    37. }

    在项目启动类中

    完成对mapper接口的扫描

    @MapperScan("com.ljj.springbootmybatis.mapper")

    开启事务管理

    @EnableTransactionManagement

    运行项目

    利用Eolink进行测试

    按bid进行查询

    删除bid为40的内容,影响行数为1

    再次查询bid为40的内容,已删除,查询为空了

     再增加一条bid为40的

    再次查询bid为40的,显示内容为我们测试增加方法中增加的数据

     Mybatis与Springboot整合成功

    二,整合Mybatis-plus

    2.1 Mybatis-plus 简介

    官网:MyBatis-Plus

    MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

     2.2 为什么要学习使用MP

    1.企业中大量使用

    2.极大的减少*Mapoer.xml中的SQL 编写

    3.与若依相比略微繁琐,但是可移植性极强

    2.3 开始整合

    创建Springboot项目,与上一目录中的创建项目方法一致,将mybatis插件换成mybatis plus插件即可

     2.2 添加pom依赖

    1. com.baomidou
    2. mybatis-plus-generator
    3. 3.4.1
    4. org.freemarker
    5. freemarker
    6. 2.3.31

    修改mysql的pom依赖

    1. mysql
    2. mysql-connector-java
    3. 5.1.44

    修改ymi配置文件为如下

    1. server:
    2. port: 8080
    3. spring:
    4. application:
    5. name: springbootmp
    6. datasource:
    7. driver-class-name: com.mysql.jdbc.Driver
    8. name: defaultDataSource
    9. password: 123456
    10. url: jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
    11. username: root
    12. mybatis-plus:
    13. mapper-locations: classpath:mappers/**/*.xml
    14. type-aliases-package: com.ljj.springbootmp.book.model

    导入代码生成器

    官网中有编写代码生成器教学

    MPGenerator 

    注意修改几处

     

    1. package com.ljj.springbootmp.mp;
    2. import com.baomidou.mybatisplus.annotation.DbType;
    3. import com.baomidou.mybatisplus.annotation.IdType;
    4. import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
    5. import com.baomidou.mybatisplus.core.toolkit.StringPool;
    6. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
    7. import com.baomidou.mybatisplus.generator.AutoGenerator;
    8. import com.baomidou.mybatisplus.generator.InjectionConfig;
    9. import com.baomidou.mybatisplus.generator.config.*;
    10. import com.baomidou.mybatisplus.generator.config.po.TableInfo;
    11. import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    12. import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
    13. import java.util.ArrayList;
    14. import java.util.List;
    15. import java.util.Scanner;
    16. /**
    17. * mybatis-plus代码生成
    18. */
    19. public class MPGenerator {
    20. /**
    21. *

    22. * 读取控制台内容
    23. *

    24. */
    25. public static String scanner(String tip) {
    26. Scanner scanner = new Scanner(System.in);
    27. StringBuilder help = new StringBuilder();
    28. help.append("请输入" + tip);
    29. System.out.println(help.toString());
    30. if (scanner.hasNext()) {
    31. String ipt = scanner.next();
    32. if (StringUtils.isNotBlank(ipt)) {
    33. if ("quit".equals(ipt)) return "";
    34. return ipt;
    35. }
    36. }
    37. throw new MybatisPlusException("请输入正确的" + tip + "!");
    38. }
    39. public static void main(String[] args) {
    40. // 代码生成器
    41. AutoGenerator mpg = new AutoGenerator();
    42. // 1.全局配置
    43. GlobalConfig gc = new GlobalConfig();
    44. // System.getProperty("user.dir")指的是工作区间,就是ljj20222203
    45. String projectPath = System.getProperty("user.dir") + "/springbootmp";
    46. System.out.println(projectPath);
    47. gc.setOutputDir(projectPath + "/src/main/java");
    48. gc.setOpen(false);
    49. gc.setBaseResultMap(true);//生成BaseResultMap
    50. gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false
    51. gc.setEnableCache(false);// XML 二级缓存
    52. gc.setBaseResultMap(true);// XML ResultMap
    53. gc.setBaseColumnList(true);// XML columList
    54. //gc.setSwagger2(true); //实体属性 Swagger2 注解
    55. gc.setAuthor("小刘");//发开者
    56. // 自定义文件命名,注意 %s 会自动填充表实体属性!
    57. gc.setMapperName("%sMapper");
    58. gc.setXmlName("%sMapper");
    59. gc.setServiceName("%sService");
    60. gc.setServiceImplName("%sServiceImpl");
    61. gc.setControllerName("%sController");
    62. gc.setIdType(IdType.AUTO);
    63. mpg.setGlobalConfig(gc);
    64. // 2.数据源配置
    65. DataSourceConfig dsc = new DataSourceConfig();
    66. dsc.setDbType(DbType.MYSQL);
    67. dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8");
    68. dsc.setDriverName("com.mysql.jdbc.Driver");
    69. dsc.setUsername("root");
    70. dsc.setPassword("123456");
    71. mpg.setDataSource(dsc);
    72. // 3.包配置
    73. PackageConfig pc = new PackageConfig();
    74. String moduleName = scanner("模块名(quit退出,表示没有模块名)");
    75. if (StringUtils.isNotBlank(moduleName)) {
    76. pc.setModuleName(moduleName);
    77. }
    78. // 设置父包
    79. pc.setParent("com.ljj.springbootmp")
    80. .setMapper("mapper")
    81. .setService("service")
    82. .setController("controller")
    83. .setEntity("model");
    84. mpg.setPackageInfo(pc);
    85. // 4.自定义配置
    86. InjectionConfig cfg = new InjectionConfig() {
    87. @Override
    88. public void initMap() {
    89. // to do nothing
    90. }
    91. };
    92. // 如果模板引擎是 freemarker
    93. String templatePath = "/templates/mapper.xml.ftl";
    94. // 自定义输出配置
    95. List focList = new ArrayList<>();
    96. // 自定义配置会被优先输出
    97. focList.add(new FileOutConfig(templatePath) {
    98. @Override
    99. public String outputFile(TableInfo tableInfo) {
    100. // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
    101. if (StringUtils.isNotBlank(pc.getModuleName())) {
    102. return projectPath + "/src/main/resources/mappers/" + pc.getModuleName() + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
    103. } else {
    104. return projectPath + "/src/main/resources/mappers/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
    105. }
    106. }
    107. });
    108. cfg.setFileOutConfigList(focList);
    109. mpg.setCfg(cfg);
    110. // 配置模板
    111. TemplateConfig templateConfig = new TemplateConfig();
    112. templateConfig.setXml(null);
    113. mpg.setTemplate(templateConfig);
    114. // 5.策略配置
    115. StrategyConfig strategy = new StrategyConfig();
    116. // 表名生成策略(下划线转驼峰命名)
    117. strategy.setNaming(NamingStrategy.underline_to_camel);
    118. // 列名生成策略(下划线转驼峰命名)
    119. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
    120. // 是否启动Lombok配置
    121. strategy.setEntityLombokModel(true);
    122. // 是否启动REST风格配置
    123. strategy.setRestControllerStyle(true);
    124. // 自定义实体父类strategy.setSuperEntityClass("com.baomidou.mybatisplus.extension.activerecord.Model");
    125. // 自定义service父接口strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");
    126. // 自定义service实现类strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");
    127. // 自定义mapper接口strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");
    128. strategy.setSuperEntityColumns("id");
    129. // 写于父类中的公共字段plus
    130. strategy.setSuperEntityColumns("id");
    131. strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
    132. strategy.setControllerMappingHyphenStyle(true);
    133. //表名前缀(可变参数):“t_”或”“t_模块名”,例如:t_user或t_sys_user
    134. strategy.setTablePrefix("t_", "t_sys_");
    135. //strategy.setTablePrefix(scanner("请输入表前缀"));
    136. mpg.setStrategy(strategy);
    137. mpg.setTemplateEngine(new FreemarkerTemplateEngine());
    138. // 执行
    139. mpg.execute();
    140. }
    141. }

    执行此类中的main方法

    生成成功

     测试mybatis-plus增删改查

    当我们打开生成的文件夹时,会发现mapper层以及service中是空的,但是我们可以点开此类继承的接口,方法全部被封装在里面了,继续测试增删改查

    编写Controller层

    1. package com.ljj.springbootmp.book.controller;
    2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    3. import com.ljj.springbootmp.book.model.MvcBook;
    4. import com.ljj.springbootmp.book.service.MvcBookService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.*;
    7. import java.awt.print.Book;
    8. import java.util.List;
    9. /**
    10. *

    11. * 前端控制器
    12. *

    13. *
    14. * @author 小刘
    15. * @since 2022-11-05
    16. */
    17. @RestController
    18. @RequestMapping("/mp")
    19. public class MvcBookController {
    20. @Autowired
    21. private MvcBookService bookService;
    22. @GetMapping("/list")
    23. public List list(){
    24. return bookService.list();
    25. }
    26. //查询所有
    27. @GetMapping("/listByCondition")
    28. public List listByCondition(MvcBook book){
    29. // 如果使用的是Mybatis 那么我们就需要写sql语句,
    30. // select from t_mvc where bname like '%2%' mapper.xml
    31. QueryWrapper qw = new QueryWrapper();
    32. qw.like("bname",book.getBname());
    33. return bookService.list(qw);
    34. }
    35. //查询单个
    36. @GetMapping("/get")
    37. public MvcBook get(MvcBook book){
    38. return bookService.getById(book.getBid());
    39. }
    40. //增加
    41. @PutMapping("/add")
    42. public boolean add(MvcBook book){
    43. return bookService.save(book);
    44. }
    45. //删除
    46. @DeleteMapping("/delete")
    47. public boolean delete(MvcBook book){
    48. return bookService.removeById(book.getBid());
    49. }
    50. //修改
    51. @PostMapping("/update")
    52. public boolean update(MvcBook book){
    53. return bookService.saveOrUpdate(book);
    54. }
    55. }

    项目运行成功

     测试工具进行测试

    list方法查询全部

     三,Mybatisplus中使用Mybatis实现多表联查的功能

    多表联查的功能,论证Mybatisplus是一样可以使用Mybatis功能的

     sql语句

    1. SELECT U.username,r.rolename FROM t_shiro_user u,t_shiro_user_role ur,t_shiro_role r where
    2. u.userid =ur.userid and ur.roleid = r.roleid and u.username = r.roleid

     t_shiro_role

     t_shiro_user

     t_shiro_user_role

     

    编写MvcBookMapper.xmlxml

    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.ycx.springbootmp.book.mapper.MvcBookMapper">
    4. <resultMap id="BaseResultMap" type="com.ycx.springbootmp.book.model.MvcBook">
    5. <id column="bid" property="bid" />
    6. <result column="bname" property="bname" />
    7. <result column="price" property="price" />
    8. resultMap>
    9. <sql id="Base_Column_List">
    10. bid, bname, price
    11. sql>
    12. <select id="queryUserRole" parameterType="java.util.Map" resultType="java.util.Map">
    13. SELECT u.username,r.rolename FROM t_shiro_user u,t_shiro_user_role ur,t_shiro_role r
    14. where u.userid = ur.userid and ur.roleid = r.roleid
    15. <if test="username != null and username != ''">
    16. and u.username = #{username}
    17. if>
    18. select>
    19. mapper>

    编写MvcBookMapper

    List<Map> queryUserRole(Map map);

    编写MvcBookService

    List<Map> queryUserRole(Map map);
    

     编写MvcBookServiceImpl

    1. @Autowired
    2. private MvcBookMapper bookMapper;
    3. @Override
    4. public List<Map> queryUserRole(Map map) {
    5. return bookMapper.queryUserRole(map);
    6. }

    编写MvcBookController

    1. //多表联查 ,用户姓名对应角色的功能,论证mybatis是一样可以使用mybatis功能
    2. @GetMapping("/queryUserRole")
    3. public List queryUserRole(String uname){
    4. // 前端传了一个zs
    5. Map map = new HashMap();
    6. map.put("username",uname);
    7. return bookService.queryUserRole(map);
    8. }

     

  • 相关阅读:
    容器网络原理
    【愚公系列】2022年09月 微信小程序-实现直播功能
    python 断点续传下载
    手把手教你前后分离架构(三) 前端项目美化
    零信任身份管理平台,构建下一代网络安全体系
    2021年6月青少年软件编程(Python)等级考试试卷(一级)
    程序员需要了解的 中国政治
    [UUCTF 2022 新生赛]ezpop - 反序列化+字符串逃逸【***】
    玩转 CODING 自动化助手,助力高效研发!
    有哪些不为人知的安全运维小技巧?
  • 原文地址:https://blog.csdn.net/weixin_64313980/article/details/127693613