Springboot整合Mybatis

前言

Springboot整合Mybatis

在之前介紹過快速搭建一個Springboot程序,那麼這篇就記錄下用Springboot整合mybatis的一些小坑坎。

  1. 在resources下的sql腳本複製。在navicat等sql執行(先創建表)
  2. pom.xml加入編譯配置(默認只編譯resources的xml文件,不配置無法編譯dao裡的xml,這點和eclipse系列不太一樣)
  3. src創建對應文件夾。在application.properties中聲明dao所在的包和mybatis映射pojo引用的包
  4. 基於xml/註解兩種方式實現mbatis的增刪改查。dao的interface要加上@Mapper,注入的話加上@Autuwired,如果基於xml的注意格式關聯;
  5. 對於大部分和普通的都是沒有關聯的映射,那麼pojo對象直接對應數據庫的各個字段即可。但是如果遇到一對一,或者一對多的映射,大致的處理方式有兩種
  6. 1.聯表查詢,把所有字段都查詢出來,然後在自定義的Map中配置各個對象屬性。
  7. 嵌套查詢,先查詢1查第一個大對象,在大對象配置到pojo對象的時候再調用查詢2(帶上查詢1查到的參數)
  8. 對於一對一映射和一對多映射。最大的區別就是配置名稱了。對於一對一的pojo對象
  9. 總的來說,Springboot的主要配置只有兩個地方——pom.xml和application.properties(有的是yml).pom.xml主要配置為jar包的管理和編譯的一些配置。而application中主要是關於一些屬性管理的配置。類似數據庫或者一些量數值,在我整合的時候遇到了一下幾個坎:
  10. 其中剛開始一直很坑的地方就是properties的配置問題。主要的問題就是數據庫版本問題。我剛開始的配置是8.0.11版本的jar包。我的數據庫也是8版本的數據庫,但是更改驅動這些改了這個錯就出現那個錯。後來實在煩就把我的8版本的數據庫當成5版本的用,把項目中所有的有關數據庫的配置改成5版本的。但是注意的是(在配置數據庫不要加到6版本以上的後綴,那麼這個版本的driver會識別不了對應參數也會報錯。)
Springboot整合Mybatis

在這裡插入圖片描述

  • 如果mapper和mapper.xml在一個文件中。(類似myeclipse的ssm)要在pom.xml中聲明解析的xml的路徑。或者你可以在resource創建一個mapper文件夾寫xml和dao進行映射。
Springboot整合Mybatis

在這裡插入圖片描述

  • 在搭建完一個基本的Springboot項目中,首先要加入mybatis和mysql的依賴。我的maven為:

 4.0.0
 
 org.springframework.boot
 spring-boot-starter-parent
 2.1.4.RELEASE
   
 
 com
 mybatis
 0.0.1-SNAPSHOT
 mybatis
 Demo project for Spring Boot
 
 1.8
 
 
 
 org.springframework.boot
 spring-boot-starter-web
 
 
 org.mybatis.spring.boot
 mybatis-spring-boot-starter
 2.0.1
 
 
 mysql
 mysql-connector-java
 runtime
 
 
 org.springframework.boot
 spring-boot-starter-test
 test
 
 
 
 
 
 src/main/resources
 
 
 src/main/java
 
 **/*.xml
 
 true
 
 
 
 
 org.springframework.boot
 spring-boot-maven-plugin
 
 
 

項目架構為:創建對應的文件夾和文件

Springboot整合Mybatis

在這裡插入圖片描述

pojo

創建dog和user類(配合自己數據庫的都行)

package com.mybatis.pojo;
public class dog {
 private String dogname;
 private String dogtype;
 private user master;
 public String getDogname() {
 return dogname;
 }
 public void setDogname(String dogname) {
 this.dogname = dogname;
 }
 public String getDogtype() {
 return dogtype;
 }
 public void setDogtype(String dogtype) {
 this.dogtype = dogtype;
 }
 public user getMaster() {
 return master;
 }
 public void setMaster(user master) {
 this.master = master;
 }
}
package com.mybatis.pojo;
import java.util.List;
public class user {
 private String username;
 private String password;
 private List dogs;
 public String getUsername() {
 return username;
 }
 public void setUsername(String username) {
 this.username = username;
 }
 public String getPassword() {
 return password;
 }
 public void setPassword(String password) {
 this.password = password;
 }
 public List getDogs() {
 return dogs;
 }
 public void setDogs(List dogs) {
 this.dogs = dogs;
 }
}

dao、mapper(mybatis)

兩個mapper:規則和ssm的傳統項目差不多

  • dogMapper:
package com.mybatis.dao;
import com.mybatis.pojo.dog;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface dogMapper {
 @Select("select * from dog")//不做配置情況找不到master,只能找數據庫對應的字段
 Listgetalldog();
 //如果兩個以上參數需要加param
 @Select("select * from dog where dogname=#{name} and dogtype=#{type}")
 Listgetdogbynametype(@Param("name")String dogname,@Param("type")String dogtype);
 List getdogbyType(String type);
}
  • dogMapper.xml:


 
  
  
 
 
 
 
 
 
 

userMapper.java

package com.mybatis.dao;
import com.mybatis.pojo.user;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface userMapper {
 @Select("select * from user")
 List getalluser();
 List getalluserwithdog();
}

userMapper.xml



 
 
  
 
 
 
 

controller

controller:(restcontroller就可以省掉@Responsebody註解)

  • dogController
package com.mybatis.controller;
import com.mybatis.dao.dogMapper;
import com.mybatis.dao.userMapper;
import com.mybatis.pojo.dog;
import com.mybatis.pojo.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class DogController {
 @Autowired(required = false)
 private dogMapper dogMapper;
 @GetMapping("getalldog")
 public List getalldog()
 {
 return dogMapper.getalldog();
 }
 @GetMapping("getdogbymaster")//不加參數默認為bigsai
 public List getalldog(@RequestParam(value = "type",defaultValue = "舔狗")String type)
 {
 return dogMapper.getdogbyType(type);
 }
}

TestController

package com.mybatis.controller;
import com.mybatis.dao.dogMapper;
import com.mybatis.dao.userMapper;
import com.mybatis.pojo.dog;
import com.mybatis.pojo.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TestController {
 @Autowired(required = false)
 private userMapper userMapper;
 @Autowired(required = false)
 private dogMapper dogMapper;
 @GetMapping("getalluser")//普通情況,假設user只有賬戶密碼。返回的只有賬戶密碼 dog為null
 public List getalluer()
 {
 return userMapper.getalluser();
 }
 @GetMapping("getdogbyType")//一對一映射,一個狗有個主人 返回該type
 public ListgedogbyType(@RequestParam(value = "type",defaultValue = "舔狗")String type)
 {
 return dogMapper.getdogbyType(type);
 }
 @GetMapping("getalluserwithdog")
 public Listgetalluserwithdog()
 {
 return userMapper.getalluserwithdog();
 }
}

還有最重要的就是application.properties的配置:(maven繼承了一些插件被我註釋掉沒有用)

server.port=8080
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bigsai?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.password=123456
spring.datasource.username=root
mybatis.mapper-locations=classpath:com/mybatis/dao/*.xml
mybatis.type-aliases-package=com.mybatis.pojo
## 駱駝峰 數據庫為xx_name pojo為xxName
mybatis.configuration.map-underscore-to-camel-case=true

執行main函數啟動Springboot。整合完畢!

就這樣就整合成功了。

本文如果有錯請指正,配置前看了一些大佬的配置學來的。沒有太多技術含量純屬筆記用!

歡迎轉發、關注!


分享到:


相關文章: