经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
SpringBoot整合mybatis的方法详解
来源:jb51  时间:2022/3/14 10:02:07  对本文有异议

1 依赖配置

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.5.4</version>
  5. </parent>
  6. <dependencies>
  7. <dependency>
  8. <groupId>org.springframework.boot</groupId>
  9. <artifactId>spring-boot-starter-web</artifactId>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.projectlombok</groupId>
  13. <artifactId>lombok</artifactId>
  14. <version>1.18.22</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.mybatis.spring.boot</groupId>
  18. <artifactId>mybatis-spring-boot-starter</artifactId>
  19. <version>1.3.2</version>
  20. </dependency>
  21. <!-- spring连接驱动时,如com.mysql.cj.jdbc.Driver使用 -->
  22. <dependency>
  23. <groupId>mysql</groupId>
  24. <artifactId>mysql-connector-java</artifactId>
  25. <scope>runtime</scope>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-configuration-processor</artifactId>
  30. <optional>true</optional>
  31. </dependency>
  32. </dependencies>

找到mybatis-spring-boot-starter配置的依赖,即autotoconfigure包,SpringBoot的自动配置,会找到META-INF下的spring.factories,找到EnableAutoConfiguration对应的类:

在这里插入图片描述

在这里插入图片描述

可知自动配置类为MybatisAutoConfiguration:

在这里插入图片描述

在这里插入图片描述

查看配置绑定类MybatisProperties,可知yml中前缀配置为mybatis:

在这里插入图片描述

可知,mybatis前缀的yml配置,可以配置属性,比如:configLocationmapperLocationstypeAliasesPackage等等。

mybatis下,又具有@NestedConfigurationProperty成员变量,故而前缀是mybatis.configuration,其中具有如下属性:

在这里插入图片描述

其中有非常熟悉的属性:mapUnderscoreToCamelCase,也就是数据库字段下划线转驼峰的配置。

然后,数据源有如下配置:

在这里插入图片描述

数据源的配置绑定是DataSourceProperties

在这里插入图片描述

可知,数据源在yml中以spring.datasource为前缀,可配置连接数据源的driverClassNameurlusernamepassword等参数。

在这里插入图片描述

2 使用

2.1 SpringBoot配置整合mybatis:

建表:

在这里插入图片描述

实体类(mybatis本质上将数据库表的数据和实体类对应,就是依靠的getter和setter,所以@Data是必须有的):

  1. package com.xiaoxu.boot.dto;
  2. import lombok.Data;
  3. import java.util.Date;
  4. /**
  5. * @author xiaoxu
  6. * @date 2022-03-08
  7. * spring_boot:com.xiaoxu.boot.dto.PeopleDTO
  8. */
  9. @Data
  10. public class PeopleDTO {
  11. // 人的id编号
  12. long id;
  13. // 人的名字
  14. String myName;
  15. // 年龄
  16. int myAge;
  17. // 出生日期
  18. Date birthday;
  19. }

新建Mapper接口:

在这里插入图片描述

注意mapper接口必须要有@Mapper注解:

  1. package com.xiaoxu.boot.mapper;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import java.util.List;
  5. @Mapper
  6. public interface PeopleMapper {
  7. List<PeopleDTO> queryPeopleByAge(int age);
  8. }

在resources目录下准备mybatis的配置文件,以及Mapper文件:

在这里插入图片描述

mybatis-confi.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. </configuration>

在这里插入图片描述

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.xiaoxu.boot.mapper.PeopleMapper">
  6. <select id="queryPeopleByAge" resultType="com.xiaoxu.boot.dto.PeopleDTO">
  7. select * from my_people where my_age = #{age}
  8. </select>
  9. </mapper>

在application.yml中配置如下:

  1. spring:
  2. datasource:
  3. username: root
  4. password: ******
  5. url: jdbc:mysql://localhost:3306/xiaoxu?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
  6. driver-class-name: com.mysql.cj.jdbc.Driver
  7.  
  8. #mybatis的相关配置
  9. mybatis:
  10. #mapper配置文件
  11. mapper-locations: classpath:mapper/*.xml
  12. # #mybatis配置文件
  13. # config-location: classpath:mybatis-config.xml
  14. # config-location和configuration不能同时存在
  15. #开启驼峰命名
  16. configuration:
  17. map-underscore-to-camel-case: true

插入测试数据:

在这里插入图片描述

service层实现:

  1. package com.xiaoxu.service;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import com.xiaoxu.boot.mapper.PeopleMapper;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. /**
  8. * @author xiaoxu
  9. * @date 2022-03-08
  10. * spring_boot:com.xiaoxu.service.PeopleService
  11. */
  12. @Service
  13. public class PeopleService {
  14. @Autowired
  15. PeopleMapper peopleMapper;
  16. public List<PeopleDTO> getPeoples(int Age){
  17. return peopleMapper.queryPeopleByAge(Age);
  18. }
  19. }

controller层实现:

  1. package com.xiaoxu.boot.controller;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import com.xiaoxu.service.PeopleService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.List;
  9. /**
  10. * @author xiaoxu
  11. * @date 2022-03-08
  12. * spring_boot:com.xiaoxu.boot.controller.PeopleController
  13. */
  14. @RestController
  15. public class PeopleController {
  16. @Autowired
  17. PeopleService peopleService;
  18. @GetMapping("/people")
  19. public List<PeopleDTO> queryPeople(@RequestParam(value = "ag") int age){
  20. return peopleService.getPeoples(age);
  21. }
  22. }

执行结果无误:

在这里插入图片描述

2.2 SpringBoot注解整合mybatis:

修改Mapper接口文件:

  1. package com.xiaoxu.boot.mapper;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Select;
  5. import java.util.List;
  6. @Mapper
  7. public interface PeopleMapper {
  8. List<PeopleDTO> queryPeopleByAge(int age);
  9. @Select("select * from my_people")
  10. List<PeopleDTO> queryAllPeople();
  11. }

修改服务层:

  1. package com.xiaoxu.service;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import com.xiaoxu.boot.mapper.PeopleMapper;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Service;
  6. import java.util.List;
  7. /**
  8. * @author xiaoxu
  9. * @date 2022-03-08
  10. * spring_boot:com.xiaoxu.service.PeopleService
  11. */
  12. @Service
  13. public class PeopleService {
  14. @Autowired
  15. PeopleMapper peopleMapper;
  16. public List<PeopleDTO> getPeoples(int Age){
  17. return peopleMapper.queryPeopleByAge(Age);
  18. }
  19. public List<PeopleDTO> getAllPeople(){
  20. return peopleMapper.queryAllPeople();
  21. }
  22. }

增加controller:

  1. package com.xiaoxu.boot.controller;
  2. import com.xiaoxu.boot.dto.PeopleDTO;
  3. import com.xiaoxu.service.PeopleService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import java.util.List;
  9. /**
  10. * @author xiaoxu
  11. * @date 2022-03-08
  12. * spring_boot:com.xiaoxu.boot.controller.PeopleController
  13. */
  14. @RestController
  15. public class PeopleController {
  16. @Autowired
  17. PeopleService peopleService;
  18. @GetMapping("/people")
  19. public List<PeopleDTO> queryPeople(@RequestParam(value = "ag") int age){
  20. return peopleService.getPeoples(age);
  21. }
  22. @GetMapping("/allPeople")
  23. public List<PeopleDTO> queryAllPeople(){
  24. return peopleService.getAllPeople();
  25. }
  26. }

结果返回无误:

在这里插入图片描述

2.3 在配置类上增加@MapperScan注解,扫描某个包下的全部Mapper文件:

如果每个Mapper接口文件上增加@Mapper比较麻烦,那么可以在配置类,如主程序类上,增加@MapperScan注解,以及扫描路径,效果和@Mapper一致:

在这里插入图片描述

主程序类增加@MapperScan注解:

在这里插入图片描述

重新执行效果一致:

在这里插入图片描述

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注w3xue的更多内容!  

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号