• SpirngBoot(整合篇 ==> 整合Mybatis


    本章导学:

    1. 在pom.xml导入Spring与mybatis整合的坐标依赖
    2. 在application.yml中添加配置
    3. 编写实体类
    4. 编写Dao层与对应的mapper.xm配置文件
    5. 在springboot配置文件中 整合mybatis 配置别名和扫描mapper映射文件 application.yml
    6. 编写Service接口和实现类
    7. 编写Controller
    8. 使用PostMan最终测试

    一、整合Mybatis

    1,1、在pom.xml导入Spring与mybatis整合的坐标依赖

    1. <dependency>
    2. <groupId>org.mybatis.spring.bootgroupId>
    3. <artifactId>mybatis-spring-boot-starterartifactId>
    4. <version>2.1.3version>
    5. dependency>
    6. <dependency>
    7. <groupId>mysqlgroupId>
    8. <artifactId>mysql-connector-javaartifactId>
    9. <scope>runtimescope>
    10. dependency>

     1.2、在application.yml中添加配置

    1. spring:
    2. datasource:
    3. driver-class-name: com.mysql.cj.jdbc.Driver
    4. url: jdbc:mysql://localhost:3306/db_brand
    5. username: root
    6. password: rootaaa

     我们去测试一下DataSource有没有成功导入

    1.3、编写实体类

    1. package com.brrbaii.pojo;
    2. import lombok.*;
    3. @Data
    4. @NoArgsConstructor
    5. @ToString
    6. public class Brand {
    7. private int id;
    8. private String brandName;
    9. private String companyName;
    10. private int ordered;
    11. private String description;
    12. private int status;
    13. }

    1.4、 编写Dao层与对应的mapper.xm配置文件

    1. package com.brrbaii.dao;
    2. import com.brrbaii.pojo.Brand;
    3. import org.apache.ibatis.annotations.Delete;
    4. import org.apache.ibatis.annotations.Mapper;
    5. import org.apache.ibatis.annotations.ResultMap;
    6. import org.apache.ibatis.annotations.Select;
    7. import java.util.List;
    8. //@Mapper
    9. public interface BrandDao {
    10. @Select("select * from tb_brand")
    11. @ResultMap("BrandResult")
    12. List selectAll();
    13. @Select("select * from tb_brand where id = #{Id}")
    14. Brand selectById(Integer Id);
    15. @Delete("delete from tb_brand where id = #{Id}")
    16. boolean deleteById(Integer Id);
    17. boolean save(Brand brand);
    18. boolean updateById(Brand brand);
    19. }

    我们去resource目录下建一个Mapper包,专门放mapper.xml映射文件 

     BrandDao.xml代码如下:

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.brrbaii.dao.BrandDao">
    6. <resultMap id="BrandResult" type="brand">
    7. <result column="brand_name" property="brandName" />
    8. <result column="company_name" property="companyName" />
    9. resultMap>
    10. <insert id="save">
    11. insert into
    12. tb_brand
    13. values
    14. (null, #{brandName}, #{companyName}, #{ordered}, #{description}, #{status})
    15. insert>
    16. <update id="updateById">
    17. update tb_brand
    18. <set>
    19. <if test="brandName!=null and brandName!= ''">
    20. brand_name = #{brandName},
    21. if>
    22. <if test="companyName!=null and companyName!= ''">
    23. company_name = #{companyName},
    24. if>
    25. <if test="description!=null and description!= ''">
    26. description = #{description},
    27. if>
    28. <if test="ordered!=null and ordered!= ''">
    29. ordered = #{ordered},
    30. if>
    31. <if test="status!=null and status!= ''">
    32. status = #{status},
    33. if>
    34. set>
    35. where id = #{id}
    36. update>
    37. mapper>

    注:我们在Dao层上并不直接添加@Mapper注解,因为如果后续程序有很多数据类,我们就得一个个的去添加@Mapper。我这里直接在启动类上指定扫描Dao层文件的位置 

     1.5、在springboot配置文件中 整合mybatis 配置别名和扫描mapper映射文件 application.yml

    1. mybatis-plus:
    2. mapper-locations: classpath:mapper/*.xml
    3. type-aliases-package: com.brrbaii.pojo

     这里的mapper-locations是我配置文件的路径 

    1.6、编写Service接口和实现类

    接口 :

    1. package com.brrbaii.service;
    2. import com.brrbaii.pojo.Brand;
    3. import java.util.List;
    4. public interface BrandService {
    5. List selectAll();
    6. Brand selectById(Integer Id);
    7. boolean save(Brand brand);
    8. boolean delete(Integer Id);
    9. boolean updateById(Brand brand);
    10. }

     实现类:

    1. package com.brrbaii.service.Imp;
    2. import com.brrbaii.dao.BrandDao;
    3. import com.brrbaii.dao.MqDao;
    4. import com.brrbaii.pojo.Brand;
    5. import com.brrbaii.service.BrandService;
    6. import org.springframework.beans.factory.annotation.Autowired;
    7. import org.springframework.stereotype.Service;
    8. import java.util.List;
    9. @Service
    10. public class BrandServiceImp implements BrandService {
    11. @Autowired
    12. private BrandDao brandDao;
    13. @Override
    14. public List selectAll() {
    15. List brands = brandDao.selectAll();
    16. return brands;
    17. }
    18. @Override
    19. public Brand selectById(Integer Id) {
    20. Brand brand = brandDao.selectById(Id);
    21. return brand;
    22. }
    23. @Override
    24. public boolean save(Brand brand){
    25. return brandDao.save(brand);
    26. }
    27. @Override
    28. public boolean delete(Integer Id) {
    29. return brandDao.deleteById(Id);
    30. }
    31. @Override
    32. public boolean updateById(Brand brand) {
    33. return brandDao.updateById(brand);
    34. }
    35. }

    1.7、编写Contorller层 

    1. package com.brrbaii.controller;
    2. import com.brrbaii.pojo.Brand;
    3. import com.brrbaii.service.BrandService;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.*;
    6. import java.util.ArrayList;
    7. import java.util.List;
    8. @RestController
    9. @RequestMapping("/brands")
    10. public class BrandController {
    11. @Autowired
    12. private BrandService brandService;
    13. @GetMapping
    14. public Result getAll(){
    15. List brands = brandService.selectAll();
    16. Integer code = checkMesg(brands) ? Code.SELECT_OK : Code.SELECT_ERR;
    17. return new Result(code,brands);
    18. }
    19. @GetMapping("/{Id}")
    20. public Result getById(@PathVariable Integer Id){
    21. Brand brand = brandService.selectById(Id);
    22. Integer code = checkMesg(brand) ? Code.SELECT_OK : Code.SELECT_ERR;
    23. String msg = checkMesg(brand) ? "查询成功": "查询失败";
    24. return new Result(code,brand,msg);
    25. }
    26. @PostMapping
    27. public Result save(@RequestBody Brand brand){
    28. boolean flag = brandService.save(brand);
    29. Integer code = flag ? Code.SAVE_OK : Code.SAVE_ERR;
    30. return new Result(code,flag);
    31. }
    32. @DeleteMapping("/{Id}")
    33. public Result delete(@PathVariable Integer Id){
    34. boolean flag = brandService.delete(Id);
    35. Integer code = flag ? Code.DELETE_OK : Code.DELETE_ERR;
    36. return new Result(code,flag);
    37. }
    38. @PutMapping()
    39. public Result update(@RequestBody Brand brand){
    40. boolean flag = brandService.updateById(brand);
    41. Integer code = flag ? Code.UPDATE_OK : Code.UPDATE_ERR;
    42. return new Result(code,flag);
    43. }
    44. public boolean checkMesg(Object o){
    45. return o != null ? true : false;
    46. }
    47. }

     1.8、用PostMan最终测试

    二、整合Mybatis-Plus

    2.1、导入坐标

    1. <dependency>
    2. <groupId>mysqlgroupId>
    3. <artifactId>mysql-connector-javaartifactId>
    4. <scope>runtimescope>
    5. dependency>
    6. <dependency>
    7. <groupId>com.alibabagroupId>
    8. <artifactId>druid-spring-boot-starterartifactId>
    9. <version>1.2.6version>
    10. dependency>
    11. <dependency>
    12. <groupId>com.baomidougroupId>
    13. <artifactId>mybatis-plus-boot-starterartifactId>
    14. <version>3.5.2version>
    15. dependency>

    2.2、修改yml配置 

    1. mybatis-plus:
    2. #mapper文件的位置
    3. mapper-locations: classpath:mapper/*.xml
    4. #起别名
    5. type-aliases-package: com.brrbaii.pojo
    6. #开启日志
    7. configuration:
    8. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    9. #为实体类增加前缀
    10. global-config:
    11. db-config:
    12. table-prefix: tb_

     2.3、Dao层继承BaseMapper 

    mybaits-plus只在mybatis上做了增强,不做改动,如果我们需要编写自定义的SQl语句,还是可以创建一个xml文件去编写具体语句

    1. "1.0" encoding="UTF-8" ?>
    2. mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.brrbaii.dao.MqDao">
    6. <select id="selectMapById" resultType="map">
    7. select * from tb_brand where id = #{id};
    8. select>
    9. mapper>

    mybatis-plus会自动把实体类的成员变量当做表的字段去查询,驼峰改为下划线_

    比如companyName在查询时会被修改为company_name

    如果实体类的成员变量和数据库列名不一致,我们可以用@TableFileId注解为它指定名称

     

    2.4、 最终测试

     

     

     

  • 相关阅读:
    【k8s】集群搭建篇
    机试算法学习
    [管理与领导-110]:IT人看清职场中的隐性规则 - 7 - 十二条职场真相
    自动驾驶感知算法面经(20+)
    零基础学前端(四)重点讲解 CSS:盒子模型、样式选择器、flex布局
    中电金信技术实践|配置中心组件的升级历程
    服务器硬件得基础知识介绍
    SpringBoot文件上传
    PMSM——转子位置估算基于QPLL
    Spring基础与核心概念
  • 原文地址:https://blog.csdn.net/weixin_48841931/article/details/126924022