SpringBoot框架整合Mybatis簡(jiǎn)單攻略
步驟 1 添加mybatis-starter依賴(lài)
訪問(wèn):https://mvnrepository.com/
搜索mybatis,找到 MyBatis Spring Boot Starter ,點(diǎn)進(jìn)去,復(fù)制到pom.xml
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
我們就用最新的即可。
步驟 2 如何配置mybatis到SpringBoot項(xiàng)目
mybatis: mapper-locations: classpath:mybatis/*.xml type-aliases-package: com.java18.vipmgr.pojo
mapper-locations是定義xml文件所在的目錄。

我們放在resources下面,也就是classpath中。
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.java18.vipmgr.mapper.UserMapper">
<select id="getAllUsers" resultType="User">
select * from users
</select>
</mapper>
里面就寫(xiě)了一個(gè)方法,注意 namespace=“com.java18.vipmgr.mapper.UserMapper” 這個(gè)配置。這個(gè)表示該xml文件是和UserMapper.java綁定的。

代碼如下
@Mapper
public interface UserMapper {
public List<User> getAllUsers();
}
接下來(lái)再看 resultType=“User” 這個(gè)配置,為什么返回類(lèi)型知道是User對(duì)象呢?
User類(lèi)在這:

@Data
public class User {
private Integer id;
private String username;
private String password;
private Integer points;
}
那是因?yàn)?,我們?cè)赼pplication.yml中做了綁定,也就是這個(gè):
mybatis: mapper-locations: classpath:mybatis/*.xml <font color="#c24f4a">type-aliases-package: com.java18.vipmgr.pojo</font>
所以,當(dāng)我們寫(xiě) resultType=“User” 的時(shí)候,就會(huì)自動(dòng)匹配到com.java18.vipmgr.pojo包下面的User類(lèi)。
至此,配置mybatis到SpringBoot項(xiàng)目就成功了!
步驟 3 測(cè)試查詢(xún)

還是在controller中做測(cè)試,首先引入Mapper
@Autowired UserMapper userMapper;
然后編寫(xiě)查詢(xún)方法
@GetMapping("getAllViaMybatis")
public List<User> getAllViaMybatis(){
return userMapper.getAllUsers();
}
啟動(dòng)服務(wù),訪問(wèn)http://localhost:8888/user/getAllViaMybatis,得
[{“id”:1,“username”:“zhangsan”,“password”:“123”,“points”:1000},{“id”:2,“username”:“l(fā)isi”,“password”:“123”,“points”:200}]
步驟 4 mybatis注解方式
除了xml的方式,我們還可以使用mybatis注解方式
UserMapper.java
@Mapper
public interface UserMapper {
public List<User> getAllUsers();
@Select("select * from users where id = #{param1}")
User findById(String id);
}
增加了一個(gè)方法,打了@Select注解,接收ID為參數(shù),這邊用的是mybatis的順序傳參法。
對(duì)應(yīng)的Controller方法
@GetMapping("findById")
public User findById(String id){
return userMapper.findById(id);
}
測(cè)試url:http://localhost:8888/user/findById?id=2
返回 {“id”:2,“username”:“l(fā)isi”,“password”:“123”,“points”:200}
這種的好處就是不用寫(xiě)xml了,很方便,缺點(diǎn)是不夠靈活。
步驟 5 用注解方式做一個(gè)新增操作
mapper代碼
@Update("insert into users values (null,#{username},#{password},#{points})")
void addUser(User user);
controller代碼
@GetMapping("addUser")
public boolean addUser(){
User user = new User();
user.setUsername("wangwu");
user.setPassword("123");
user.setPoints(1000);
userMapper.addUser(user);
return true;
}
測(cè)試效果

PS: 因?yàn)閕d是自動(dòng)增長(zhǎng)的,所以插入null即可。
步驟 6 整合PageHelper分頁(yè)插件
pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
導(dǎo)入這個(gè)依賴(lài)就行了,你可以什么都不配置的。
UserController,原來(lái)的查詢(xún)方法改成這樣
@GetMapping("getAllViaMybatis")
public PageInfo getAllViaMybatis(int page,int rows){
PageHelper.startPage(page,rows);
PageInfo pageInfo = new PageInfo(userMapper.getAllUsers());
return pageInfo;
}
接收page和rows作為分頁(yè)參數(shù)
測(cè)試url http://localhost:8888/user/getAllViaMybatis?page=1&rows=10
測(cè)試前記得多弄幾條數(shù)據(jù)在數(shù)據(jù)庫(kù)。
步驟 7 拓展知識(shí):mybatis四種傳參方式
通過(guò)對(duì)象傳參
<insert id="insertEmp" parameterType="org.zhang.pojo.Emp">
insert into emp (ename,job,hiredate,sal) values (#{ename},#{job},#{hiredate},#{sal});
<selectKey resultType="int" keyColumn="empno" keyProperty="empno" order="AFTER">
select last_insert_id()
</selectKey>
</insert>
方式1:順序傳參法
<!-- 此時(shí)因?yàn)橛卸鄠€(gè)參數(shù) 所以參數(shù)類(lèi)型不能逐一制定 可以省略 有mybatis自動(dòng)匹配-->
<update id="updateEmpByNo2">
update emp set ename=#{param1} where empno=#{param2}
</update>
方式2:@Param注解傳參法
就是在方法的參數(shù)列表中置頂要傳的參數(shù),然后在sql中直接寫(xiě)
public void updateEmpByNo2(@Param("name") String ename,@Param("no") Integer empno) throws IOException;
<update id="updateEmpByNo2">
update emp set ename=#{name} where empno=#{no}
</update>
方式3:Map傳參法
重點(diǎn)就是 parameterType="hashmap" 這句話(huà)
public void updateEmpByNo3(Map<String,Object> argMap) throws IOException;
<update id="updateEmpByNo3" parameterType="hashmap">
update emp set ename=#{name} where empno=#{no}
</update>
方式4:Java Bean傳參法
public User selectUser(Emp emp);
<select id="selectUser" parameterType="org.zhang.pojo.Emp" resultMap="Emp">
select * from user
where user_name = #{userName} and dept_id = #{deptId}
</select>
步驟 8 Mybatis中#{}和${}的區(qū)別是什么?
KaTeX parse error: Expected 'EOF', got '#' at position 10: {}是字符串替換,#̲{}是預(yù)處理; Mybatis…{}時(shí),就是把${}直接替換成變量的值。
而Mybatis在處理#{}時(shí),會(huì)對(duì)sql語(yǔ)句進(jìn)行預(yù)處理,將sql中的#{}替換為?號(hào),調(diào)用PreparedStatement的set方法來(lái)賦值;
使用#{}可以有效的防止SQL注入,提高系統(tǒng)安全性。
步驟 9 Mybatis中模糊查詢(xún)like語(yǔ)句該怎么寫(xiě)?
第1種:在Java代碼中添加sql通配符,就是把通配符也寫(xiě)在字符串里面帶進(jìn)去。(推薦).
string wildcardname = “%smi%”; list<name> names = mapper.selectlike(wildcardname);
對(duì)應(yīng)的xml:
select * from foo where bar like #{value}
第2種:在sql語(yǔ)句中拼接通配符,會(huì)引起sql注入(不推薦)
string wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);
<span style="color: inherit;">對(duì)應(yīng)的xml:</span>
<select id=”selectlike”>
select * from foo where bar like "%"${value}"%"
</select>
步驟 10 SpringBoot整合Mybatis-plus
MyBatis-Plus (opens new window)(簡(jiǎn)稱(chēng) MP)是一個(gè) MyBatis (opens new window)的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開(kāi)發(fā)、提高效率而生。

官網(wǎng)文檔地址:https://mp.baomidou.com/guide/
首先添加依賴(lài),這一步是必不可少的。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
步驟 11 Mybatis-plus 如何與 Mybatis 共存?
因?yàn)樯厦娴拇a都是基于Mybatis的,所以,我們需要讓他們共存。辦法就是修改application.yml
mybatis-plus: mapper-locations: classpath:mybatis/*.xml type-aliases-package: com.java18.vipmgr.pojo
把mybayis改成mybatis-plus就可以了,之前的功能一個(gè)都不影響!
步驟 12 快速上手Mybatis-plus
因?yàn)槲覀兊念?lèi)名和表明不一致,所以需要做一個(gè)配置
User.java
@Data
@TableName("users")
public class User {
private Integer id;
private String username;
private String password;
private Integer points;
}
UserMapper.java
public interface UserMapper extends BaseMapper<User> {
//省略之前的代碼
}
繼承了BaseMapper就可以擁有很多CRUD方法,這一點(diǎn)和JPA很像。
UserController.java
@GetMapping("getAllViaMybatisPlus")
public IPage<User> getAllViaMybatisPlus(Integer page,Integer rows){
IPage<User> pageInfo = new Page<>(page, rows);//參數(shù)一是當(dāng)前頁(yè),參數(shù)二是每頁(yè)個(gè)數(shù)
QueryWrapper<User> wrapper = new QueryWrapper<>();
pageInfo = userMapper.selectPage(pageInfo,wrapper);
return pageInfo;
}
測(cè)試URL:http://localhost:8888/user/getAllViaMybatisPlus?page=1&rows=10
{“records”:[{“id”:1,“username”:“zhangsan”,“password”:“123”,“points”:1000},{“id”:2,“username”:“l(fā)isi”,“password”:“123”,“points”:200},{“id”:3,“username”:“wangwu”,“password”:“123”,“points”:1000},{“id”:4,“username”:“蔡互聽(tīng)”,“password”:“123”,“points”:1000},{“id”:5,“username”:“荀傍支”,“password”:“123”,“points”:1000},{“id”:6,“username”:“養(yǎng)繡洋”,“password”:“123”,“points”:1000},{“id”:7,“username”:“夔惑腔”,“password”:“123”,“points”:1000},{“id”:8,“username”:“戎悅下”,“password”:“123”,“points”:1000},{“id”:9,“username”:“厲觸企”,“password”:“123”,“points”:1000},{“id”:10,“username”:“陸糟調(diào)”,“password”:“123”,“points”:1000}],“total”:22,“size”:10,“current”:1,“orders”:[],“hitCount”:false,“searchCount”:true,“pages”:3}
以上就是SpringBoot框架整合Mybatis簡(jiǎn)單攻略的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot框架整合Mybatis的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java切面(Aspect)的多種實(shí)現(xiàn)方式
這篇文章主要給大家介紹了關(guān)于Java切面(Aspect)的多種實(shí)現(xiàn)方式,在Java開(kāi)發(fā)中切面(Aspect)是一種常用的編程方式,用于實(shí)現(xiàn)橫切關(guān)注點(diǎn)(cross-cutting concern),需要的朋友可以參考下2023-08-08
詳解spring封裝hbase的代碼實(shí)現(xiàn)
本篇文章主要介紹了詳解spring封裝hbase的代碼實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
Spring?IOC?xml方式進(jìn)行工廠Bean操作詳解
這篇文章主要介紹了Spring?IOC?xml方式進(jìn)行工廠Bean操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01
關(guān)于通過(guò)java調(diào)用datax,返回任務(wù)執(zhí)行的方法
今天小編就為大家分享一篇關(guān)于通過(guò)java調(diào)用datax,返回任務(wù)執(zhí)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
解決使用@ResponseBody后返回500錯(cuò)誤的問(wèn)題
這篇文章主要介紹了解決使用@ResponseBody后返回500錯(cuò)誤的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù)
這篇文章主要介紹了Spring WebFlux使用函數(shù)式編程模型構(gòu)建異步非阻塞服務(wù),重點(diǎn)介紹如何使用函數(shù)式編程模型創(chuàng)建響應(yīng)式 RESTful 服務(wù),這種編程模型與傳統(tǒng)的基于 Spring MVC 構(gòu)建 RESTful 服務(wù)的方法有較大差別,感興趣的朋友跟隨小編一起看看吧2023-08-08
Java代碼實(shí)現(xiàn)微信頁(yè)面滾動(dòng)防露底(核心代碼)
這篇文章主要介紹了Java代碼實(shí)現(xiàn)微信頁(yè)面滾動(dòng)防露底的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

