怎么在SpringBoot中使用Mybatis?
在公司这么久了一直用的是SpringBoot JPA,在之前我做毕业设计的时候是Spring+SpringMVC+Mybatis(说实话都快忘记了,就记得Mybatis配置Mapper.xml了)!
现在来用Springboot来重新学习一下Mybatis,废话少说,上代码!
开发工具:IDEA
DB: PostgreSQL
-
新建一个SpringBoot项目,设置JDK版本为1.8
-
选择依赖
选好之后next->Finish就ok了。
- 依赖pom.xml代码
<?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.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</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-jdbc</artifactId>
</dependency>
<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.1.3</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</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>
- 配置yml文件
server:
port: 8080
spring:
datasource:
username: root
password: 12345
url: jdbc:postgresql://localhost:5432/smartplm
driver-class-name: org.postgresql.Driver
mybatis:
# 配置Mapper.xml地址
mapper-locations: classpath:mapping/*Mapper.xml
# 配置实体地址
type-aliases-package: com.example.demo.domain.entity
#showSql
logging:
level:
com:
example:
mapper : debug
- 目录结构
- 在SpringBoot启动类上面添加Mapper扫描地址
@MapperScan("com.example.demo.domain.mapper")
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 先在PostgreSQL创建一张Book表,插入一些数据:
CREATE TABLE public.book (
id int8 NOT NULL,
"name" varchar NULL,
author varchar NULL,
CONSTRAINT book_pk PRIMARY KEY (id)
);
- 创建Book实体
package com.example.demo.domain.entity;
/**
* 2 * @Author: CDJ
* 3 * @Date: 2020/8/21 14:44
* 4
*/
public class BookEntity {
Long id;
String name;
String author;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "BookEntity{" +
"id=" + id +
", name='" + name + '\'' +
", author='" + author + '\'' +
'}';
}
}
- 编写Mapper映射接口BookMapper.java和BookMapper.xml文件
BookMapper.java
package com.example.demo.domain.mapper;
import com.example.demo.domain.entity.BookEntity;
import org.springframework.stereotype.Repository;
/**
* 2 * @Author: CDJ
* 3 * @Date: 2020/8/21 14:53
* 4
*/
@Repository
public interface BookMapper {
BookEntity findBook(Long id);
}
BookMapper.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.demo.domain.mapper.BookMapper">
<!--type是你的实体地址-->
<resultMap id="BaseResultMap" type="com.example.demo.domain.entity.BookEntity">
<!-- column是你数据库的book表的栏位名, property是你的实体对应的属性名-->
<result column="id" jdbcType="INTEGER" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<result column="author" jdbcType="VARCHAR" property="author"/>
</resultMap>
<!--id记住要对应Mapper接口的方法名,不然报找不到Mapper-->
<select id="findBook" resultType="com.example.demo.domain.entity.BookEntity">
<!-- 编写sql-->
select * from book where id= #{id}
</select>
</mapper>
- 编写Service
BookService.java
package com.example.demo.service;
import com.example.demo.domain.entity.BookEntity;
import com.example.demo.domain.mapper.BookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 2 * @Author: CDJ
* 3 * @Date: 2020/8/21 14:51
* 4
*/
@Service
public class BookService {
@Autowired
BookMapper bookMapper;
public BookEntity findBook(Long id) {
return bookMapper.findBook(id);
}
}
- 编写Controller
BookController.java
package com.example.demo.controller;
import com.example.demo.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
/**
* 2 * @Author: CDJ
* 3 * @Date: 2020/8/21 14:50
* 4
*/
@RestController
public class BookController {
@Autowired
BookService bookService;
@GetMapping(value = "getBook/{id}")
public String getBook(@PathVariable Long id) {
return bookService.findBook(id).toString();
}
}
- 最后到浏览器上面访问Controller指定的地址