第一步:導入依賴
關(guān)鍵依賴就mybatis-spring-boot-starter這一個冀膝,其他的作為輔助測試用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
第二步:配置yml
server:
port: 8088
spring:
application:
name: your-service-name
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:your database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: ${MYSQL-USER:root}
password: ${MYSQL-PWD:root}
mybatis:
mapper-locations: classpath:mapper/*.xml #對應(yīng)MenuConfigMapper.xml
type-aliases-package: com.nico.mybatis.entity #對應(yīng)resultType="CastMenuConfig"
注意:mybatis的配置少了任何一個都 無法啟動唁奢,因為你得告訴他這個MenuConfigMapper.xml這種文件去哪里找,resultType="CastMenuConfig"對應(yīng)去哪里找
第三步:配置啟動類
要加這個包掃描路徑@MapperScan(basePackages = "com.nico.mybatis.mapper")
@MapperScan(basePackages = "com.nico.mybatis.mapper")
@SpringBootApplication
public class MyMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MyMybatisApplication.class,args);
}
}
如果不想在這里加也可以畸写,換個地方在接口類CastMenuConfigMapper 上加@Mapper也一樣的效果驮瞧,注意包路徑org.apache.ibatis.annotations.Mapper和繼承的Mapper路徑tk.mybatis.mapper.common.Mapper他們是不一樣的
@org.apache.ibatis.annotations.Mapper
public interface CastMenuConfigMapper extends Mapper<CastMenuConfig> {
CastMenuConfig findById(String id);
}
第四步:準備測試
等等氓扛!看看你的實體類好了沒有枯芬,數(shù)據(jù)庫連起來沒有,好的先看實體類采郎,這里避免太長只貼部分字段 get set方法省略了千所,最好重寫個toString方法,方便控制臺打印查看
public class CastMenuConfig implements Serializable {
private Long id; //主鍵
private String menuName; //菜單名稱
private int menuType; //菜單類型
private int menuSort; //菜單順序
//get set此處省略蒜埋。淫痰。。
@Override
public String toString() {
return "CastMenuConfig{" +
"id=" + id +
", menuName='" + menuName + '\'' +
", menuType=" + menuType +
", menuSort=" + menuSort +
'}';
}
}
看一下數(shù)據(jù)庫
好的整份,再把CastMenuConfigMapper.xml 文件配置一下,namespace的包路徑為上面CastMenuConfigMapper 接口的包路徑待错,resultType="CastMenuConfig"是通過yml中這個配置的包路徑 type-aliases-package: com.nico.mybatis.entity找到對應(yīng)實體類CastMenuConfig的,還有接口方法名findById和 id="findById"是對應(yīng)一致的烈评,好了不再疑惑火俄,繼續(xù)看
<?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.nico.mybatis.mapper.CastMenuConfigMapper">
<select id="findById" parameterType="String" resultType="CastMenuConfig">
select * from cast_menu_config where id=#{id}
</select>
</mapper>
再看看項目文件結(jié)構(gòu),test里面的內(nèi)容是創(chuàng)建測試類生成的讲冠,當然你可以創(chuàng)建controller和業(yè)務(wù)層service代碼瓜客,通過postman或瀏覽器發(fā)起訪問完成整個調(diào)用邏輯,但是這里通過測試來快速訪問竿开。
第五步:進入測試
先創(chuàng)建一個測試類
點擊ok后就生成了測試類谱仪,由上面的文件結(jié)構(gòu)可以看到在test目錄下的文件CastMenuConfigMapperTest
@SpringBootTest
class CastMenuConfigMapperTest {
@Autowired
private CastMenuConfigMapper castMenuConfigMapper;
@Test
void findById() {
CastMenuConfig CastMenuConfig = castMenuConfigMapper.findById("1322078827776266241");
System.out.println("查詢結(jié)果:"+CastMenuConfig);
}
}
寫好參數(shù),好了否彩,點擊測試
發(fā)現(xiàn)測試通過且返回結(jié)果疯攒,但是返回的值怎么都是null呢
由于數(shù)據(jù)庫字段是這樣的manu_name,實體類是manuName的駝峰命名規(guī)則,所以無法映射匹配上列荔,所以需要在yml的mybatis下配置一個規(guī)則 map-underscore-to-camel-case: true
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.nico.mybatis.entity
configuration:
map-underscore-to-camel-case: true
配置好后再次測試就有值了
第六步:如何配置mybatis打印sql日志
首先要配置yml文件mybatis配置項 log-impl: org.apache.ibatis.logging.stdout.StdOutImp
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.nico.mybatis.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql日志到控制臺
map-underscore-to-camel-case: true
再次測試查看就有sql日志輸出了
但是這樣配置你是看不出日志是哪個服務(wù)輸出的敬尺,無法定位称杨,所以還可以使用另一種方式,同樣配置yml中l(wèi)ogging 用com.nico.mybatis.mapper包名作為key筷转,輸出debug級別的sql日志
logging:
level:
com:
nico:
mybatis:
mapper: debug
這樣再次測試姑原,就能看到是哪個接口mapper,哪個方法輸出的sql
配置時發(fā)現(xiàn)有這樣一個配置 base-packages: com.nico.mybatis.mapper 跟啟動類上的配置一樣呜舒,試試能否替代啟動類上的注解锭汛,所以都注釋掉@Mapper注解和@MapperScan(basePackages = "com.nico.mybatis.mapper") 后測試
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.nico.mybatis.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
base-packages: com.nico.mybatis.mapper #啟動會報錯,并沒有生效
報錯袭蝗,找不到這個CastMenuConfigMapper文件
所以這個配置不能這么用
第七步:使用注解
@Mapper
public interface CastMenuConfigMapper {
CastMenuConfig findById(String id);
@Select("select * from cast_menu_config")
List<CastMenuConfig> findAll();
}
同上唤殴,生成測試方法進行測試
@SpringBootTest
class CastMenuConfigMapperTest {
@Autowired
private CastMenuConfigMapper castMenuConfigMapper;
@Test
void findById() {
CastMenuConfig castMenuConfig = castMenuConfigMapper.findById("1322078827776266241");
System.out.println("查詢結(jié)果:"+castMenuConfig);
}
@Test
void findAll() {
List<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.findAll();
castMenuConfigList.forEach(item->System.out.println("查詢結(jié)果:"+item));
}
}
遍歷返回查詢結(jié)果
第八步:使用pagehelper分頁助手
導入依賴
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
編寫測試方法
@Test
void findPage() {
PageHelper.startPage(1,2);//獲取第1頁 每頁2條記錄
List<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.findAll();
PageInfo<CastMenuConfig> castMenuConfigPageInfo = new PageInfo<>(castMenuConfigList);
castMenuConfigPageInfo.getList().forEach(item->System.out.println("查詢結(jié)果:"+item));
}
查看查詢結(jié)果,打印輸出了分頁sql語句
總結(jié):注解方式就不需要掃描xml文件了到腥,還有@update朵逝、@delete、@insert等注解支持乡范,其他配置可參考官方文檔 https://mybatis.org/mybatis-3/zh/getting-started.html