Springboot 整合Mybatis
添加Mybatis依赖
方式一:编辑pom.xml 添加dependency
<!--mybatis起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
方式二:创建项目时选择dependency
-
新建一个Spring Initializr 项目
-
选择项目所需的依赖
-
创建后的pom文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.6.4</version> <relativePath/> </parent> <groupId>com.smile</groupId> <artifactId>blog</artifactId> <version>0.0.1-SNAPSHOT</version> <name>blog</name> <description>blog</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
创建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" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.smile.blog.dao.UserDao">
<select id="getUser" resultType="com.smile.blog.entity.User">
select id,name,email from users where id = #{userId}
</select>
</mapper>
创建控制器
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组件
<plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.4.0</version> <configuration> <configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <includeCompileDependencies>true</includeCompileDependencies> </configuration> </plugin>
刷新maven,查看组件
-
创建配置文件
generatorConfig.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" > <generatorConfiguration> <!-- 本地数据库驱动程序jar包的全路径 --> <classPathEntry location="D:\Maven\repository\mysql\mysql-connector-java\8.0.28\mysql-connector-java-8.0.28.jar"/> <context id="context" targetRuntime="MyBatis3" defaultModelType="flat"> <commentGenerator> <property name="suppressAllComments" value="true"/> <property name="suppressDate" value="true"/> </commentGenerator> <!-- 数据库的相关配置 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false" userId="root" password="root"> <property name="nullCatalogMeansCurrent" value="true"/> </jdbcConnection> <!-- DECIMAL 和 NUMERIC 类型解析为 Integer--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!-- 实体类生成的位置 --> <javaModelGenerator targetPackage="com.smile.blog.entity" targetProject="src/main/java"> <property name="enableSubPackages" value="true"/> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- *Mapper.xml 文件的位置 --> <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources/mybatis"> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- Mapper 接口文件的位置 --> <javaClientGenerator targetPackage="com.smile.blog.dao" targetProject="src/main/java" type="XMLMAPPER"> <property name="enableSubPackages" value="true"/> </javaClientGenerator> <!-- 相关表的配置 --> <table tableName="user" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false" enableSelectByPrimaryKey="true" domainObjectName="User"/> </context> </generatorConfiguration>
-
点击mybaits-generator插件
异常问题解决
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
-
检查xml文件所在的package名称是否和Mapper Interface 所在的包名
<mapper namespace="com.smile.blog.dao.UserDao">
-
UserDao的方法在UserDao.xml中不存在,然后执行UserDao的方法会报错
-
UserDao的方法返回值是List
但是select元素没有正确配置ResultMap或则只配置了ResultType -
确认mapper的xml配置路径是否正确
mybatis: type-aliases-package: com.smile.blog.entity mapper-locations: classpath*:/mapper/*.xml
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!