Springboot(二)-----Springboot整合mybatis
在上一個Springboot(一)-----Springboot入門(各種常見問題解決)的基礎上,繼續。
1.修改pom.xml檔案增加資料庫配置和mybatis配置。
完整的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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.springboot</groupId> <artifactId>first_demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>first_demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <jacoco.version>0.7.5.201505241946</jacoco.version> <junit.version>4.12</junit.version> <springfox-swagger2.version>2.8.0</springfox-swagger2.version> <mysql-connector>5.1.41</mysql-connector> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <!--Swagger2文件--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${springfox-swagger2.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${springfox-swagger2.version}</version> </dependency> <!--資料庫配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--Mybaties--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.1</version> <configuration> <skipMain>true</skipMain> <skip>true</skip> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <!--接入jacoco跑單測,覆蓋率報告--> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>${jacoco.version}</version> <configuration> <!--<includes>--> <!--<include>**/service/*</include> <!– 此處表示只測service層 –>--> <!--</includes>--> </configuration> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> <execution> <id>report</id> <phase>prepare-package</phase> <goals> <goal>report</goal> </goals> </execution> <execution> <id>post-unit-test</id> <phase>test</phase> <goals> <goal>report</goal> </goals> <configuration> <dataFile>target/jacoco.exec</dataFile> <outputDirectory>target/jacoco-ut</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
2.在application.properties中增加資料庫配置
注意:輸對資料庫名稱和密碼。
可以在本地命令列用命令mysql -uroot -p,輸入密碼,測試密碼是否正確。use TestDatabase(資料庫名稱),確定資料庫名稱輸入正確
# 資料庫配置 mybatis.type-aliases-package=com.neo.entity spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/****(資料庫名稱)?characterEncoding=utf-8&useSSL=false&autoReconnect=true spring.datasource.username = root spring.datasource.password = ****(密碼)
spring.datasource.url = jdbc:mysql://localhost:3306/kimTest?characterEncoding=utf-8&useSSL=false&autoReconnect=true是這樣的不要加引號,我腦子一抽加了引號,導致一直報錯。
pom.xml中mysql沒必要指定版本號,避免有些版本已經不使用,引發問題。
3. 建立資料庫表user,
語句:
CREATE TABLE USER(ID INT NOT NULL,NAME varchar(100) NOT NULL,AGE INT NOT NULL );
並插入幾條語句。
4.整個專案層級結構如下:
mapper ----使用註解的方法操作mybaties,
domain--實體類的包,
service--處理業務邏輯,
controller--controller層,
FirstDemoApplication--啟動類,
application.properties--配置檔案。
5.在domain下建立實體類User(有編號,姓名,年齡三個屬性):
package com.springboot.domain;
import java.io.Serializable;
/**
* 使用者類
*
* @author kimtian
**/
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 使用者編號
**/
private int id;
/**
* 使用者姓名
**/
private String name;
/**
* 使用者年齡
**/
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
6.在mapper下建立UserMapper interface:
暫時定義兩個介面,一個查詢全部使用者,一個根據id查詢使用者資訊。
如果資料庫表字段和User實體欄位名稱一樣,可以不用加這個註解:
@Results({
@Result(property = "id", column = "id"),
})
前面的property表示User實體中的欄位名稱,column表示的資料庫欄位名稱,形成對映關係。
我設計的表字段名稱和User實體欄位名稱是一致的。為了測試一致的情況下可以不加這個註解,
所以給getAll()方法加了這個註解,getOne()方法沒加。兩個都是可以執行成功的。
package com.springboot.mapper;
import com.springboot.domain.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
/**
* UserMapper
*
* @author kimtian
**/
@Mapper
public interface UserMapper {
@Select("SELECT * FROM USER")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age")
})
/**
* 獲取全部使用者
* @return List<User>使用者列表
**/
List<User> getAll();
@Select("SELECT * FROM USER WHERE id = #{id}")
/**
* 根據id獲取使用者
* @param id 使用者id
* @return User 使用者
**/
User getOne(int id);
}
7.在service下建立UserService介面其實現類UserServiceImpl。世紀中用這部分來處理業務邏輯,
因為是一個demo,所以就直接呼叫,不再寫太多邏輯了。
UserService:
package com.springboot.service;
import com.springboot.domain.User;
import java.util.List;
/**
* 使用者服務類
*
* @author kimtian
**/
public interface UserService {
/**
* 獲取全部使用者
*
* @return List<User>使用者列表
**/
List<User> getUser();
/**
* 獲取指定使用者
*
* @param id 使用者id
* @return User 使用者
**/
User getOne(int id);
}
UserServiceImpl:
記得加@Service("userService")註解。
package com.springboot.service.impl;
import com.springboot.domain.User;
import com.springboot.mapper.UserMapper;
import com.springboot.service.UserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* 使用者服務實現類
*
* @author kimtian
**/
@Service("userService")
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List<User> getUser() {
return userMapper.getAll();
}
@Override
public User getOne(int id) {
return userMapper.getOne(id);
}
}
8.在controller包下建立UserController類:
package com.springboot.controller;
import com.springboot.domain.User;
import com.springboot.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* Helloworld Controller
*
* @author kimtian
**/
@RestController
public class UserController {
@Resource
private UserService userService;
@GetMapping("/users")
public List<User> users() {
return userService.getUser();
}
@GetMapping("/getUserById")
public User getOne() {
int id = 1;
return userService.getOne(id);
}
}
注意加的這個註解:@RestController
以前Spring開發的時候,需要提供json介面的時候要新增Jackjson等相關jar包,要配置spring controller掃描,再在對接的方法新增@ResponseBody註解。
現在只需要新增這個 @RestController註解,預設類中的方法都會以json形式返回。神不神奇。厲不厲害。
9.啟動Spring服務。
在瀏覽器輸入http://localhost:8080/getUserById
可以獲取到指定id的使用者資訊:
輸入http://localhost:8080/users,可以獲取全部的使用者資訊:
10.順便安利一個IDEA的良心工具:
選擇tools-->HTTP Client-->Test RESTful Web Service
如下圖所示:
可以直接請求,切換get,post方法。簡單替代postman不是夢。