1. 程式人生 > >springboot Mybatis 整合2.0版本

springboot Mybatis 整合2.0版本

版權宣告:本文為博主原創文章,未經博主允許不得轉載。     https://blog.csdn.net/Winter_chen001/article/details/80010967    
                   
       
       
       
  springboot終於迎來了2.0版本,很多新的特性讓springboot更加強大,之前使用1.5.6版本整合了Mybatis,現在2.0版本就已經不適用了,所以,在摸索中搭建了2.0版本整合Mybatis

 


個人開源專案


springboot+mybatis+thymeleaf+docker構建的個人站點開源專案(集成了個人主頁、個人作品、個人部落格)

 


推薦開源專案


開源的springboot介面文件元件swagger2


更多幹貨

SpringBoot系列目錄

 

寫在前面

本來這篇博文老在就寫好了,但是後來發現很多功能其實根本就沒有檢驗通過就發出來了,導致遺留了很多坑,比如最難搞的就是SqlSessionFactory和PageHelper,之前寫過關於springboot1.5.6版本的整合,這段時間剛好springboot釋出了2.0的正式版本,很多同學可能沒有注意版本,導致了整合的時候出現了很多很多的問題,這幾天剛好有空就試著整合一下springboot2.0 mybatis,發現了很多很多的坑,而且網上的資源也不多,終於在兩天的踩坑中成功整合了,並且將翻頁功能修復好了,廢話不多說了,看程式碼:

 

環境/版本一覽:


開發工具:Intellij IDEA 2017.1.3
springboot: 2.0.1.RELEASE
jdk:1.8.0_40
maven:3.3.9
alibaba Druid 資料庫連線池:1.1.9

 


額外功能:


PageHelper 分頁外掛
mybatis generator 自動生成程式碼外掛(本次搭建就不講解了,請參照Spring boot Mybatis 整合(完整版))

 


開始搭建:

 

建立專案:

 

 

新增基礎的依賴:

 

 

依賴檔案:

按照pom檔案補齊需要的依賴:

 

<?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.winterchen</groupId>
    <artifactId>springboot2-mybatis-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>springboot2-mybatis-demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>


        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-joda</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-parameter-names</artifactId>
        </dependency>
        <!-- 分頁外掛 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>
        <!-- alibaba的druid資料庫連線池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
    </dependencies>

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


</project>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596

 

專案結構:

 

 

專案啟動類:

 

package com.winterchen;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.winterchen.dao")
public class Springboot2MybatisDemoApplication {

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

注意:@MapperScan("com.winter.mapper")這個註解非常的關鍵,這個對應了專案中mapper(dao)所對應的包路徑,很多同學就是這裡忘了加導致異常的

 

配置:


  可以根據個人使用習慣選擇使用properties或者yml檔案,本專案使用的是yml配置檔案,所以把原本application.properties刪除,建立一個application.yml檔案


在resource資料夾下建立application.yml

 

server:
  port: 8080


spring:
    datasource:
        name: mysql_test
        type: com.alibaba.druid.pool.DruidDataSource
        #druid相關配置
        druid:
          #監控統計攔截的filters
          filters: stat
          driver-class-name: com.mysql.jdbc.Driver
          #基本屬性
          url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
          username: root
          password: root
          #配置初始化大小/最小/最大
          initial-size: 1
          min-idle: 1
          max-active: 20
          #獲取連線等待超時時間
          max-wait: 60000
          #間隔多久進行一次檢測,檢測需要關閉的空閒連線
          time-between-eviction-runs-millis: 60000
          #一個連線在池中最小生存的時間
          min-evictable-idle-time-millis: 300000
          validation-query: SELECT 'x'
          test-while-idle: true
          test-on-borrow: false
          test-on-return: false
          #開啟PSCache,並指定每個連線上PSCache的大小。oracle設為true,mysql設為false。分庫分表較多推薦設定為false
          pool-prepared-statements: false
          max-pool-prepared-statement-per-connection-size: 20
## 該配置節點為獨立的節點,有很多同學容易將這個配置放在spring的節點下,導致配置無法被識別
mybatis:
  mapper-locations: classpath:mapper/*.xml  #注意:一定要對應mapper對映xml檔案的所在路徑
  type-aliases-package: com.winterchen.model  # 注意:對應實體類的路徑

#pagehelper
pagehelper:
    helperDialect: mysql
    reasonable: true
    supportMethodsArguments: true
    params: count=countSql
    returnPageInfo: check


12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

 

建立包:

model,dao,mapper

 

 

建立資料庫和資料表

 

CREATE DATABASE mytest;

CREATE TABLE t_user(
  userId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  userName VARCHAR(255) NOT NULL ,
  password VARCHAR(255) NOT NULL ,
  phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;12345678

 

建立實體類:UserDomain.java

 

package com.winterchen.model;

public class UserDomain {
    private Integer userId;

    private String userName;

    private String password;

    private String phone;

    // get,set方法略...
}12345678910111213

 

建立dao:

UserDao.java

 

package com.winterchen.dao;

 

import com.winterchen.model.UserDomain;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

public interface UserDao {


    int insert(UserDomain record);

 

    List<UserDomain> selectUsers();
}123456789101112131415161718

 

建立mybatis對映檔案: UserMapper.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.winterchen.dao.UserDao" >
  <sql id="BASE_TABLE">
    t_user
  </sql>

  <sql id="BASE_COLUMN">
    userId,userName,password,phone
  </sql>

  <insert id="insert" parameterType="com.winterchen.model.UserDomain">
    INSERT INTO
      <include refid="BASE_TABLE"/>
    <trim prefix="(" suffix=")" suffixOverrides=",">
      userName,password,
      <if test="phone != null">
        phone,
      </if>
    </trim>
    <trim prefix="VALUES(" suffix=")" suffixOverrides=",">
      #{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},
      <if test="phone != null">
        #{phone, jdbcType=VARCHAR},
      </if>
    </trim>
  </insert>

  <select id="selectUsers" resultType="com.winterchen.model.UserDomain">
      SELECT
        <include refid="BASE_COLUMN"/>
      FROM
        <include refid="BASE_TABLE"/>
  </select>


</mapper>12345678910111213141516171819202122232425262728293031323334353637

注意:<mapper namespace="com.winterchen.dao.UserDao" >  一定要對應自己dao所在的包路徑

 

建立剩餘的controller,service包和檔案

UserService.java

 

package com.winterchen.service.user;

import com.github.pagehelper.PageInfo;
import com.winterchen.model.UserDomain;

import java.util.List;

/**
 * Created by Administrator on 2018/4/19.
 */
public interface UserService {

    int addUser(UserDomain user);

    PageInfo<UserDomain> findAllUser(int pageNum, int pageSize);
}

123456789101112131415161718

UserServiceImpl

 

package com.winterchen.service.user.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.winterchen.dao.UserDao;
import com.winterchen.model.UserDomain;
import com.winterchen.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * Created by Administrator on 2017/8/16.
 */
@Service(value = "userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;//這裡會報錯,但是並不會影響

    @Override
    public int addUser(UserDomain user) {

        return userDao.insert(user);
    }

    /*
    * 這個方法中用到了我們開頭配置依賴的分頁外掛pagehelper
    * 很簡單,只需要在service層傳入引數,然後將引數傳遞給一個外掛的一個靜態方法即可;
    * pageNum 開始頁數
    * pageSize 每頁顯示的資料條數
    * */
    @Override
    public PageInfo<UserDomain> findAllUser(int pageNum, int pageSize) {
        //將引數傳給這個方法就可以實現物理分頁了,非常簡單。
        PageHelper.startPage(pageNum, pageSize);
        List<UserDomain> userDomains = userDao.selectUsers();
        PageInfo result = new PageInfo(userDomains);
        return result;
    }
}

1234567891011121314151617181920212223242526272829303132333435363738394041424344

UserController.java

 

package com.winterchen.controller;

import com.github.pagehelper.PageHelper;
import com.winterchen.model.UserDomain;
import com.winterchen.service.user.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * Created by Administrator on 2017/8/16.
 */
@Controller
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    private UserService userService;

    @ResponseBody
    @PostMapping("/add")
    public int addUser(UserDomain user){
        return userService.addUser(user);
    }

    @ResponseBody
    @GetMapping("/all")
    public Object findAllUser(
            @RequestParam(name = "pageNum", required = false, defaultValue = "1")
                    int pageNum,
            @RequestParam(name = "pageSize", required = false, defaultValue = "10")
                    int pageSize){
        return userService.findAllUser(pageNum,pageSize);
    }
}

12345678910111213141516171819202122232425262728293031323334353637

 

專案最終的結構

 


  到這裡如果專案就成功搭建完成了,如果還是報錯的話,請仔細看看配置,後面會給出原始碼地址,程式設計師就是要不斷和bug進行鬥爭,加油。

 


測試

啟動專案

 
這樣就表示啟動成功了

然後,開始測試吧,博主使用的是postMan,一個進行http請求的測試工具

 

新增資料

 

 

查詢資料

 

如果需要使用多資料來源的請戳這裡

原始碼地址:

https://github.com/WinterChenS/springboot2-mybatis-demo

springboot技術交流群:681513531
---------------------
來源:CSDN
原文:https://blog.csdn.net/Winter_chen001/article/details/80010967
版權宣告:本文為博主原創文章,轉載請附上博文連結!