springboot整合mybatis(配置文件方式,上接Mybatis教程操作User表) 作者:马育民 • 2025-07-18 08:10 • 阅读:10004 # 准备 [springboot 快速入门-创建工程](https://www.malaoshi.top/show_1EF5qXjMmlZR.html "springboot 快速入门-创建工程") # 介绍 springboot整合mybatis,配置方式: - 注解+配置文件,sql写在xml中。适合传统大项目 - 全注解,sql写在注解中。适合简单快速开发 在测试时,需要实现controller、service、mybatis相关类、相关配置文件,以及使用druid数据库连接池,比较复杂,稍有不慎,就会报错 本文使用 注解+配置文件,sql写在xml中 # 准备mysql表 详见:[mybatis 准备mysql环境](https://www.malaoshi.top/show_1EF6a4ULHpKP.html "mybatis 准备mysql环境") # druid数据库连接池 略 [springboot使用druid连mysql5.7(mysql5驱动)](https://www.malaoshi.top/show_1IX15nklBuyx.html "springboot使用druid连mysql5.7(mysql5驱动)") [springboot使用druid连mysql5.7(mysql8驱动)](https://www.malaoshi.top/show_1EF5sDiU3k28.html "springboot使用druid连mysql5.7(mysql8驱动)") # mybatis依赖 ### 找到mybatis依赖 在 https://mvnrepository.com/ 搜索 mybatis,找到`MyBatis Spring Boot Starter` [](https://www.malaoshi.top/upload/pic/springboot/20200712175325.png) ### 添加依赖 将上图中的红框处粘贴到pom.xml文件中 ``` org.mybatis.spring.boot mybatis-spring-boot-starter 2.0.1 ``` 已经包含 `spring-boot-starter-jdbc` **注意:**必须是 `2.0.1` 以上,否则没有下面用到的 `@MapperScan` 注解 # 实体类 详见:[mybatis 创建maven工程,实现select查询](https://www.malaoshi.top/show_1EF6W8rJpo61.html "mybatis 创建maven工程,实现select查询") # mapper接口 详见: [mybatis - idea创建普通工程,实现select查询](https://www.malaoshi.top/show_1GW1TdlZ8857.html "mybatis - idea创建普通工程,实现select查询") 或 [mybatis 创建maven工程,实现select查询](https://www.malaoshi.top/show_1EF6W8rJpo61.html "mybatis 创建maven工程,实现select查询") ### 让 mapper 接口生效 springboot+mybatis,有2种方式让 mapper 接口生效: 1. mapper接口由 `@Mapper` 注解修饰 2. mapper接口由 `@Repository` 注解修饰 主启动类由 `@MapperScan("top.malaoshi.mapper")` 修饰,扫描 `top.malaoshi.mapper` 包下的类,使其生效 # mapper.xml文件 ### 保存位置 [](https://www.malaoshi.top/upload/0/0/1GW1Vk0UhDjc.png) 从下面工程复制粘贴 [mybatis 根据id查询一条记录(select)](https://www.malaoshi.top/show_1EF6WNo03wZe.html "mybatis 根据id查询一条记录(select)") # mybatis总配置文件 ### 保存位置 在 `resources/mybatis` 目录下,如下图: [](https://www.malaoshi.top/upload/pic/springboot/QQ20201014105651.png) ### mybatis-config.xml 内容 ``` ``` **注意:** ``必须是上面 **实体类的包路径** # 修改springboot配置文件 整合mybatis ### application.yml 增加下面部分 ``` # 整合mybatis mybatis: config-location: classpath:mybatis/mybatis-config.xml #mybatis总配置文件 mapperLocations: classpath:mybatis/mapper/*.xml # xxxMapper.xml配置文件 ``` ### application.properties 增加下面部分 ``` # 整合mybatis #mybatis总配置文件 mybatis.config-location: classpath:mybatis/mybatis-config.xml # xxxMapper.xml配置文件 mybatis.mapperLocations: classpath:mybatis/mapper/*.xml ``` ### 注意 `classpath`指`src/main/resources`路径, - `classpath:mybatis/mybatis-config.xml`指`src/main/resources/mybatis/mybatis-config.xml` - `classpath:mybatis/mapper/*.xml`指`src/main/resources/mybatis/mapper/mybatis-config.xml` # 创建service接口 ``` package top.malaoshi.service; import top.malaoshi.entity.User; import java.util.List; public interface IUserService { public List selectAll(); public int save(User user); public int deleteById(String id); public int updateById(User book); public User selectById(String id); } ``` ### 创建service接口实现类 ``` package top.malaoshi.service.impl; import org.springframework.stereotype.Service; import top.malaoshi.entity.User; import top.malaoshi.mapper.IUserMapper; import top.malaoshi.service.IUserService; import javax.annotation.Resource; import java.util.List; import java.util.UUID; @Service public class UserSrvImpl implements IUserService { @Resource private IUserMapper userMapper; @Override public List selectAll() { return userMapper.selectAll(); } @Override public int save(User user) { String uuid= UUID.randomUUID().toString().replace("-",""); user.setId(uuid); int i=userMapper.save(user); return i; } @Override public int deleteById(String id) { return userMapper.deleteById(id); } @Override public int updateById(User user) { return userMapper.updateById(user); } @Override public User selectById(String id) { return userMapper.getById(id); } } ``` # JsonResult ``` package top.malaoshi.vo; import com.fasterxml.jackson.annotation.JsonInclude; @JsonInclude(JsonInclude.Include.NON_NULL) public class JsonResult { private int code; private String msg; private T data; public JsonResult() { } public JsonResult(int code, String msg) { this.code = code; this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } ``` # 创建Controller ``` package top.malaoshi.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import top.malaoshi.entity.User; import top.malaoshi.service.IUserService; import top.malaoshi.vo.JsonResult; import javax.annotation.Resource; import java.util.List; @RestController public class LoginCtrl { @Resource private IUserService userService; @RequestMapping("/login") public JsonResult login(String username, String password){ System.out.println("username:"+username); System.out.println("password:"+password); List list = userService.selectAll(); for ( User user: list ) { System.out.println(user.getUsername()+","+user.getPassword()); } return JsonResult.success("登录成功!"); } } ``` # 修改主启动类 mapper 接口使用 `@Repository` 注解修饰时,需要在主启动类增加下面注解: ``` @MapperScan("org.example.mapper") ``` 扫描 `top.malaoshi.mapper` 包下的类,使其生效 **注意:** 如果 mapper 接口使用 `@Mapper` 注解修饰,则 **不需要修改主启动类**(加上也不报错) ### 例子 ``` @SpringBootApplication @MapperScan("top.malaoshi.mapper") public class Main { public static void main(String[] args) { SpringApplication.run(Main.class,args); } } ``` ### 为什么增加此注解? 见下面链接: https://www.malaoshi.top/show_1EF6RCe0gjUK.html mapper https://www.cnblogs.com/ityouknow/p/6037431.html dao https://segmentfault.com/a/1190000017211657 原文出处:http://www.malaoshi.top/show_1GW1Vk3lRmym.html