SpringBoot整合tkMapper的方法
SpringBoot整合tkMapper
項(xiàng)目使用SpringBoot2.0,H2數(shù)據(jù)庫,使用了 Lombok 簡(jiǎn)化代碼;本人是剛?cè)腴T的菜鳥,下面是本人使用SpringBoot整合tkMapper的一個(gè)小demo,記錄下來本人在此處踩得坑,有需要修正的地方歡迎各路大神、大佬指導(dǎo),小弟謙虛受教。
1 搭建一個(gè)SpringBoot的項(xiàng)目,怎么搭建網(wǎng)上教程一大堆,這里就不描述了直接進(jìn)入正題,首先先看一下整體的項(xiàng)目結(jié)構(gòu)

2 pom文件引入依賴(注意依賴沖突)
<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>
<scope>test</scope>
</dependency>
<!--lombok省略代碼-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- h2嵌入式數(shù)據(jù)-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- tk-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>3 在resources目錄下新建db文件夾,用來存放數(shù)據(jù)文件,其中schema-h2.sql為數(shù)據(jù)庫 Schema 腳本,data-h2.sql為Data腳本
schema-h2.sql
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主鍵ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年齡',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (id)
);data-h2.sql
DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, 'red', 18, 'test1@tian.com'), (2, 'yll', 20, 'test2@tian.com'), (3, 'putty', 22, 'test3@tian.com'), (4, 'ele', 24, 'test4@tian.com'), (5, 'tom', 26, 'test5@tian.com');
4 application.yml
spring:
datasource:
driver-class-name: org.h2.Driver
schema: classpath:db/schema-h2.sql
data: classpath:db/data-h2.sql
url: jdbc:h2:mem:root
username: root
password: root5 在生成的項(xiàng)目路徑下新建一個(gè) tk 包,在 tk 包下新建bean包(存放實(shí)體類),dao 包(存放 Mapper 接口類),config 包(存放配置類)
tk 包下新建通用 Mapper 接口 MyMapper
繼承Mapper和MySqlMapper,以后我們的業(yè)務(wù)dao直接集成MyMapper即可
此接口不能被掃描到,否則會(huì)報(bào)錯(cuò)
MyMapper.java
package com.tian.tkmapper;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
@Repository
public interface MyMapper<T> extends Mapper<T> ,MySqlMapper<T> {
}bean包下新建User類,此處使用了Lombok省略代碼,@Data注解包含get/set等方法
User.java
package com.tian.tkmapper.tk.bean;
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}dao包下新建業(yè)務(wù)接口UserDao
UserDao.java
package com.tian.tkmapper.tk.dao;
import com.tian.tkmapper.MyMapper;
import com.tian.tkmapper.tk.bean.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserDao extends MyMapper<User> {
}config包下新建配置類MybatisConfigurer
MybatisConfigurer.java
package com.tian.tkmapper.tk.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;
import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
public class MybatisConfigurer {
@Resource
private DataSource dataSource;
@Bean
public SqlSessionFactory sqlSessionFactoryBean() throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
bean.setTypeAliasesPackage("com.tian.tkmapper.tk.bean");
//添加XML目錄
// ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return bean.getObject();
}
@Configuration
@AutoConfigureAfter(MybatisConfigurer.class)
public static class MyBatisMapperScannerConfigurer {
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean");
mapperScannerConfigurer.setBasePackage("com.tian.tkmapper.tk.dao.*");
//配置通用mappers
Properties properties = new Properties();
properties.setProperty("mappers", "com.tian.tkmapper.MyMapper");
properties.setProperty("notEmpty", "false");
properties.setProperty("IDENTITY", "MYSQL");
mapperScannerConfigurer.setProperties(properties);
return mapperScannerConfigurer;
}
}
}6 在啟動(dòng)類添加@MapperScan
package com.tian.tkmapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan(basePackages = "com.tian.tkmapper.tk.dao")//mapper接口的路徑
public class TkmapperApplication {
public static void main(String[] args) {
SpringApplication.run(TkmapperApplication.class, args);
}
}7 測(cè)試代碼進(jìn)行測(cè)試
package com.tian.tkmapper;
import com.tian.tkmapper.tk.bean.User;
import com.tian.tkmapper.tk.dao.UserDao;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class TkmapperApplicationTests {
@Autowired
private UserDao userDao;
@Test
public void testSelect() {
System.out.println(("----- selectAll method test ------"));
List<User> userList = userDao.selectAll();
Assert.assertEquals(5, userList.size());
userList.forEach(System.out::println);
}
}最后看到顯示輸出為如下即成功

8 說一下本人遇到的小坑,劃重點(diǎn)了劃重點(diǎn)了劃重點(diǎn)了,重要的事情說三遍?。?!
a> MyMapper不能被掃描到,解決方案很多,不讓啟動(dòng)類啟動(dòng)時(shí)掃描到就可以
b> 啟動(dòng)類中@MapperScan要引tk包下面的 import tk.mybatis.spring.annotation.MapperScan;
c>pom文件依賴沖突,由于本人也是剛?cè)腴T菜鳥一個(gè),也不是很清楚哪個(gè)與哪個(gè)沖突,這個(gè)有待讀者驗(yàn)證,如果有了解的大神可以評(píng)論指導(dǎo),多謝
以上就上本人整合通用Mappe時(shí)遇見的幾個(gè)小坑,如有錯(cuò)誤多多諒解,歡迎來指導(dǎo)到此這篇關(guān)于SpringBoot整合tkMapper的方法的文章就介紹到這了,更多相關(guān)SpringBoot整合tkMapper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA實(shí)用好用插件推薦及使用方法教程詳解(必看)
這篇文章主要介紹了IDEA實(shí)用好用插件推薦及使用方法教程,本文通過實(shí)例截圖相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
Spring自動(dòng)裝配bean的方式總結(jié)
這篇主要介紹了Spring自動(dòng)裝配Bean的方式總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2024-01-01
idea的spring boot項(xiàng)目實(shí)現(xiàn)更改端口號(hào)操作
這篇文章主要介紹了idea的spring boot項(xiàng)目實(shí)現(xiàn)更改端口號(hào)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
java集合框架 arrayblockingqueue應(yīng)用分析
ArrayBlockingQueue是一個(gè)由數(shù)組支持的有界阻塞隊(duì)列。此隊(duì)列按 FIFO(先進(jìn)先出)原則對(duì)元素進(jìn)行排序。隊(duì)列的頭部 是在隊(duì)列中存在時(shí)間最長(zhǎng)的元素2012-11-11
Java Netty HTTP服務(wù)實(shí)現(xiàn)過程解析
這篇文章主要介紹了Java Netty HTTP服務(wù)實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java項(xiàng)目中獲取路徑的絕對(duì)路徑問題和相對(duì)路徑問題
這篇文章主要介紹了如何Java項(xiàng)目中獲取文件地址,在 Java 項(xiàng)目中我們經(jīng)常會(huì)讀取配置文件,但是文件的路徑在獲取時(shí)我們是怎么得到的?下面我們就一起進(jìn)入文章學(xué)習(xí)該內(nèi)容吧,需要的朋友可以參考下2022-02-02
springboot Controller直接返回String類型帶來的亂碼問題及解決
文章介紹了在Spring Boot中,當(dāng)Controller直接返回String類型時(shí)可能出現(xiàn)的亂碼問題,并提供了解決辦法,通過在`application.yaml`中設(shè)置請(qǐng)求和響應(yīng)的編碼格式,并在自定義配置類中進(jìn)行配置,可以有效解決這一問題2024-11-11

