前言

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

在這裡插入圖片描述
- 如果mapper和mapper.xml在一個文件中。(類似myeclipse的ssm)要在pom.xml中聲明解析的xml的路徑。或者你可以在resource創建一個mapper文件夾寫xml和dao進行映射。
在這裡插入圖片描述
- 在搭建完一個基本的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
項目架構為:創建對應的文件夾和文件
在這裡插入圖片描述
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。整合完畢!
就這樣就整合成功了。
本文如果有錯請指正,配置前看了一些大佬的配置學來的。沒有太多技術含量純屬筆記用!
歡迎轉發、關注!
關鍵字: POM modelVersion artifactId