Springboot 整合Mybatis
添加Mybatis依赖
方式一:编辑pom.xml 添加dependency
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.1.4
mysql
mysql-connector-java
runtime
方式二:创建项目时选择dependency
-
新建一个Spring Initializr 项目

-
选择项目所需的依赖

-
创建后的pom文件
<?xml version="1.0" encoding="UTF-8"?>4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.4 com.smile blog 0.0.1-SNAPSHOT blog blog 1.8 org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 2.2.2 mysql mysql-connector-java runtime org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-maven-plugin
创建mapper包

修改配置文件
方式一:properties文件
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
方式二:yml文件
#Mybatis
spring:
datasource:
url: jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=UTF-8&useSSL=true&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
password: root
username: root
mybatis:
type-aliases-package: com.smile.blog.entity
mapper-locations: classpath*:/mapper/*.xml
创建实体类
package com.smile.blog.entity;
/**
* @Notes
* @Date 2022/3/14
* @Time 17:41
* @Author smile
*/
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
创建Dao
package com.smile.blog.dao;
import com.smile.blog.entity.User;
public interface UserDao {
User getUser(Integer id);
}
- 给每个
dao设置注解@Mapper - 在
Application中设置@MapperScan(basePackages = "com.smile.blog.dao")
创建service接口和service实现类
package com.smile.blog.service.impl;
import com.smile.blog.dao.UserDao;
import com.smile.blog.entity.User;
import com.smile.blog.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @Notes
* @Date 2022/3/14
* @Time 17:45
* @Author smile
*/
@Service
public class UserServiceImpl implements UserService {
@Resource
private UserDao userDao;
public User getUser(Integer id)
{
return userDao.getUser(id);
}
}
package com.smile.blog.service;
import com.smile.blog.entity.User;
/**
* @Notes
* @Date 2022/3/14
* @Time 17:45
* @Author smile
*/
public interface UserService {
User getUser(Integer id);
}
创建xml
<?xml version="1.0" encoding="UTF-8" ?>
创建控制器
package com.smile.blog.controller;
import com.smile.blog.entity.User;
import com.smile.blog.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
/**
* @Notes
* @Date 2022/3/14
* @Time 17:51
* @Author smile
*/
@Controller
public class UserController {
@Resource
private UserService userService;
@GetMapping("/user")
@ResponseBody
public String user()
{
User user = userService.getUser(1);
return user.toString();
}
}
整体的目录结构
├─java
│ └─com
│ └─smile
│ └─blog
│ │ Application.java
│ │
│ ├─controller
│ │ UserController.java
│ │
│ ├─dao
│ │ UserDao.java
│ │
│ ├─entity
│ │ User.java
│ │
│ └─service
│ │ UserService.java
│ │
│ └─impl
│ UserServiceImpl.java
│
└─resources
│ application.yml
│
├─mapper
│ Dao.xml
│
├─static
└─templates
结果响应

设置Mybatis代码自动生成器
-
设置maven组件
org.mybatis.generator mybatis-generator-maven-plugin 1.4.0 src/main/resources/mybatis/generatorConfig.xml true true 刷新maven,查看组件

-
创建配置文件
generatorConfig.xml<?xml version="1.0" encoding="UTF-8" ?> -
点击mybaits-generator插件

异常问题解决
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
-
检查xml文件所在的package名称是否和Mapper Interface 所在的包名
-
UserDao的方法在UserDao.xml中不存在,然后执行UserDao的方法会报错
-
UserDao的方法返回值是List
但是select元素没有正确配置ResultMap或则只配置了ResultType -
确认mapper的xml配置路径是否正确
mybatis: type-aliases-package: com.smile.blog.entity mapper-locations: classpath*:/mapper/*.xml