Springboot整合mybatis框架(含例項Demo)

weixin_33918357發表於2018-06-24

最近要交一份project專案作業,前後端分離,我負責後端,選用了Springboot+mybatis進行整合操作。

一.前期準備:

開發使用的IDE為IntelliJ IDEA:https://www.jetbrains.com/idea/

maven倉庫整合jar包:http://mvnrepository.com/artifact/org.apache.maven/maven-plugin-api/3.5.3

下完上述兩樣後,IDEA安裝略,我們開始使用IDEA配置預設的maven庫


9003228-e0a9489d1b708069.gif
準備.gif

從GIF中可以看到,我們點選configure選單項下的Project Defaults來設定專案的預設配置,從settings選項中,找到Maven庫一欄,選擇我們剛才下載好的maven倉庫的安裝目錄。

建立好我們的資料表。資料庫名為jiguo,表名為jiguo_user。


9003228-1a6404ad604a241b.JPG
資料表.JPG

以上,前期準備就準備好啦。

二.專案結構一欄以及實現步驟。

9003228-f46909ca2c00dfbb.JPG
概覽.JPG

實現步驟:
1.Springboot專案建立
2.在pom.xml中,使用maven架包匯入mybatis依賴dependency
3.逆向工程,配置自己的generatorConfig逆向工程的配置檔案,然後使用maven外掛執行出來,逆向出DAO層還有Model層
4.在application.properties中,配置我們的資料來源 mybatis所需要的配置
5.MyMapper介面的建立
6.service層程式碼的建立
7.建立controller,處理前端的請求。
8.啟動檔案中設定DAO層掃描,這樣就能識別出DAO層註解
@MapperScan(basePackages = "com.example.sl.xxxxx.dao")

步驟一:Springboot專案建立

9003228-a53111a4a8e7046b.JPG
1.1.JPG
9003228-ef6eb04bfd33dd8e.JPG
1.2.JPG
9003228-e3be8594a9f690d8.JPG
1.3.JPG

完成建立一個名為demospringboot的專案

步驟二:在pom.xml中,使用maven架包匯入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.example.sl</groupId>
    <artifactId>demospringboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>demospringboot</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.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>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--alibaba-start-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <!--alibaba-end-->

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.41</version>
        </dependency>
        <!--mybatis-start-->
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--generator-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.2</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>
        <!--mapper-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.2.4</version>
        </dependency>
        <!--pagehelper-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!--mybatis-end-->

        <!-- 引入 redis 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18.1</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.2</version>
                <configuration>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.29</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>4.0.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>

    </build>
</project>

9003228-c48874196e7387d7.JPG
2.1.JPG

import以後,我們匯入了mybatis,mysql,阿里巴巴的sql檢測外掛,分頁外掛等。

步驟三:逆向工程,配置自己的generatorConfig(resource包下)逆向工程的配置檔案,然後使用maven外掛執行出來,逆向出DAO層還有Model層

<?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>
    <!--1.jdbcConnection設定資料庫連線-->
    <!--2.javaModelGenerator設定類的生成位置-->
    <!--3.sqlMapGenerator設定生成xml的位置-->
    <!--4.javaClientGenerator設定生成dao層介面的位置-->
    <!--5.table設定要進行逆向工程的表名以及要生成的實體類的名稱-->


    <context id="default" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.example.sl.demospringboot.util.MyMapper"/>
        </plugin>

        <!-- optional,旨在建立class時,對註釋進行控制 -->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>

        <!--jdbc的資料庫連線 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/jiguo?characterEncoding=utf-8"
                userId="root"
                password="root">
        </jdbcConnection>


        <!-- 非必需,型別處理器,在資料庫型別和java型別之間的轉換控制-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>


        <!-- Model模型生成器,用來生成含有主鍵key的類,記錄類 以及查詢Example類
            targetPackage     指定生成的model生成所在的包名
            targetProject     指定在該專案下所在的路徑
        -->
        <!--<javaModelGenerator targetPackage="com.mmall.pojo" targetProject=".\src\main\java">-->
        <javaModelGenerator targetPackage="com.example.sl.demospringboot.model" targetProject="./src/main/java">
            <!-- 是否允許子包,即targetPackage.schemaName.tableName -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對model新增 建構函式 -->
            <property name="constructorBased" value="false"/>
            <!-- 是否對類CHAR型別的列的資料進行trim操作 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立的Model物件是否 不可改變  即生成的Model物件不會有 setter方法,只有構造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>

        <!--mapper對映檔案生成所在的目錄 為每一個資料庫的表生成對應的SqlMap檔案 -->
        <!--<sqlMapGenerator targetPackage="mappers" targetProject=".\src\main\resources">-->
        <sqlMapGenerator targetPackage="mappers" targetProject="./src/main/resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- 客戶端程式碼,生成易於使用的針對Model物件和XML配置檔案 的程式碼
                type="ANNOTATEDMAPPER",生成Java Model 和基於註解的Mapper物件
                type="MIXEDMAPPER",生成基於註解的Java Model 和相應的Mapper物件
                type="XMLMAPPER",生成SQLMap XML檔案和獨立的Mapper介面
        -->

        <!-- targetPackage:mapper介面dao生成的位置 -->
        <!--<javaClientGenerator type="XMLMAPPER" targetPackage="com.mmall.dao" targetProject=".\src\main\java">-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.sl.demospringboot.dao" targetProject="./src/main/java">
            <!-- enableSubPackages:是否讓schema作為包的字尾 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <table tableName="jiguo_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        <!-- geelynote mybatis外掛的搭建 -->
    </context>
</generatorConfiguration>

然後執行我們的mybatis外掛


9003228-c2568e35df247b22.JPG
3.1.JPG

就發現我們的DAO層和model層已經建立好了。對應jiguo資料庫中的
jiguo_user表。

四。在application.properties中,配置我們的資料來源 mybatis所需要的配置

server.port=8080//伺服器的埠號
#mysql連結配置
spring.datasource.url=jdbc:mysql://localhost:3306/jiguo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.durid.initialsize=1

#mybatis配置
#首先是實體類所在的包的名字
mybatis.type-aliases-package=com.example.sl.demospringboot.model
mybatis.mapper-locations=classpath:mappers/*.xml
#mybatis使用resources的xml來對映資料庫表,這裡就是resources下的mappers包的所有xml檔案

#MyMapper是繼承了一些封裝好的方法介面 CRUD
#mapper
#mappers 多個介面時逗號隔開 通配mappers
mapper.mappers=com.example.sl.demospringboot.util.MyMapper
mapper.not-empty=false
mapper.identity=MYSQL

#pagehelper 分頁外掛
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

配置了伺服器埠號,資料庫的連結資料,以及mybatis的對映表關係,我們發現有一個MyMapper介面,是我們之前沒建立的,這是一個通配mappers(封裝了一些常用CRUD操作,可以通過實現介面來進行),在maven庫中新增依賴的時候,我們已經新增了相關介面的庫tk.mybatis。
所以我們執行步驟五。

五.MyMapper介面的建立

util包下,建立MyMapper介面:
MyMapper:

package com.example.sl.demospringboot.util;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;

//自定義介面整合大牛給我們寫好的資料層的介面類
public interface MyMapper<T> extends Mapper<T>,MySqlMapper<T> {

}

然後在DAO層繼承這個介面。
UserMapper:

package com.example.sl.demospringboot.dao;

import com.example.sl.demospringboot.model.User;
import com.example.sl.demospringboot.util.MyMapper;

public interface UserMapper extends MyMapper<User> {
}

以上我們完成了DAO層和資料庫的準備,然後我們開發我們的service層,業務層。

六.service層程式碼的建立
我們將UserMapper使用註解的方式,生成,減少記憶體消耗,再呼叫之前別人寫好的介面方法,進行CRUD操作(自己定製的CRUD操作暫略)。
UserService:

package com.example.sl.demospringboot.service;

import com.example.sl.demospringboot.model.User;

import java.util.List;

public interface UserService {
    public List<User> findAll();
}

UserServiceImpl:

package com.example.sl.demospringboot.service;

import com.example.sl.demospringboot.dao.UserMapper;
import com.example.sl.demospringboot.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService{

    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> findAll() {
        return userMapper.selectAll();
    }
}

七.建立controller,處理前端的請求

UserController:

package com.example.sl.demospringboot.controller;

import com.example.sl.demospringboot.model.User;
import com.example.sl.demospringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/findAll")
    public List<User> findAllUser(){
        List<User> userlist=userService.findAll();
        return userlist;
    }
}

八..啟動檔案中設定DAO層掃描,這樣就能識別出DAO層註解

@MapperScan(basePackages = "com.example.sl.xxxxx.dao")

package com.example.sl.demospringboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan(basePackages = "com.example.sl.demospringboot.dao")//這個註解注意一下 放DAO層的包名 對這個包下進行注入
public class DemospringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemospringbootApplication.class, args);
    }
}

儲存~後臺完成

三.自定義一個login.html進行請求測試。(由於JS要跨域,這裡不進行ajax請求了 這裡我們直接使用表單 PS:本地可以將一個ajax請求的頁面放在本地Apache容器中來解決)

login.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login.html</title>
</head>
<body>
<form action="/user/findAll">
    <input type="submit" value="login">
</form>
</body>
</html>

然後執行~


9003228-e1a550e5456fd9d5.gif
演示.gif

測試完成~終於可以睡覺啦
以上demo收錄在Ricardo-L-Song的github
喜歡就給個小??吧,你的支援是對博主最大的支援。

相關文章