1. 程式人生 > >Springboot(二)-----Springboot整合mybatis

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> &lt;!&ndash; 此處表示只測service層 &ndash;&gt;-->
                    <!--</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不是夢。