先导入相关依赖包,我这用的是mysql数据库做测试
<?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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建数据库和编写对应实体,以及在配置文件上配置数据库属性
如下是一个名为local的数据库和USER_INFO的表,里面有5条数据
UserInfo实体信息:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName(value = "USER_INFO")
public class UserInfo {
@TableId(value = "ID",type =IdType.UUID)
private String id;
@TableField(value = "USER_NAME")
private String userName;
@TableField(value = "AGE")
private int age;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
@TableName:表示这个实体对应哪个表
@TableId:表示主键id,type的值代表主键类型
@TableField:表示实体字段对应的数据库字段
application.yml文件信息:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/local
username: ***
password: ***
编写dao层,编写dao层对应的xml文件,以及方法对应的sql,同时在启动类上加上@MapperScan注解,把dao层类扫描注入ioc容器
UserInfoDao继承BaseMapper接口,这个接口是由mybatis-plus提供的,里面包含了一些基础增删查改操作,可以提高我们开发效率,这里只写一个方法做测试
UserInfoDao.java:
@Repository
public interface UserInfoDao extends BaseMapper<UserInfo> {
//
UserInfo queryUserInfoById(@Param("id") String id);
}
UserInfoMapper.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.example.springboot.mapper.UserInfoDao">
<select id="queryUserInfoById" resultType="com.example.springboot.domain.UserInfo">
select * from USER_INFO where id=#{id}
</select>
</mapper>
UserInfoDao.java类和UserInfoMapper.xml文件通过全限定名(namespace+id)互相确认和找到对方。
启动类:
@SpringBootApplication
@MapperScan("com.example.springboot.mapper")//这个注解很关键,加上@Repository注解,就能够把该路径下的所有用@Repository标记的类都注入ioc容器
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
编写测试service和controller做测试:
UserInfoService类,这里有两个方法,queryUserInfoById()是自己写的sql,而selectById()是由mybatis-plus为我们提供的接口,这里测试下两者的效果:
import com.example.springboot.domain.UserInfo;
import com.example.springboot.mapper.UserInfoDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserInfoService {
@Autowired
private UserInfoDao userInfoDao;
public UserInfo queryUserInfoById(String id) {
return userInfoDao.queryUserInfoById(id);
}
public UserInfo selectById(String id) {
return userInfoDao.selectById(id);
}
}
HelloController类:
@RestController
public class HelloController {
@Autowired
private UserInfoService userInfoService;
@GetMapping("/queryUserInfoById/{id}")
public UserInfo queryUserInfoById(@PathVariable("id") String id) {
return userInfoService.queryUserInfoById(id);
}
@GetMapping("/selectById/{id}")
public UserInfo selectById(@PathVariable("id") String id) {
return userInfoService.selectById(id);
}
}
访问http://localhost:8080/queryUserInfoById/1,结果如下:
访问http://localhost:8080/selectById/1,结果如下:
可以看到二者结果是一样的
总结下spring boot整合mybatis-plus的步骤:
- 导入相关依赖
- 编写数据库相对应的实体,加上相关注解,同时在配置文件上配置数据库属性
- 编写相关的dao层和xml文件,同时在启动类上添加@MapperScan对dao类进行扫描
- 测试下效果,如果只是测试,方法很多,不一定要多编写service类和controller类