SpringBoot之整合MyBatis實(shí)現(xiàn)CRUD方式
SpringBoot整合MyBatis實(shí)現(xiàn)CRUD
SpringBoot項(xiàng)目的持久層一般都是使用JPA或者M(jìn)yBatis,我個(gè)人是比較喜歡MyBatis。
首先我們打開pom.xml
添加上mybatis需要的一些依賴
<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.1</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>在resources下創(chuàng)建mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 獲取數(shù)據(jù)庫自增id -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 支持別名 -->
<setting name="useColumnLabel" value="true" />
<!-- 支持駝峰命名轉(zhuǎn)換,例如表字段create_time 對(duì)應(yīng)實(shí)體類的createTime屬性 -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>建表
CREATE TABLE `t_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT '' COMMENT '用戶名', `create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間', `update_time` datetime DEFAULT NULL COMMENT '修改時(shí)間', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
創(chuàng)建對(duì)應(yīng)的實(shí)體類
package com.example.demo.entity;
import java.util.Date;
public class User {
private Integer userId;
private String username;
private Date createTime;
private Date updateTime;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}創(chuàng)建Dao
package com.example.demo.dao;
import com.example.demo.entity.User;
import java.util.List;
public interface UserDao {
List<User> getAll();
User find(int userId);
int insert(User user);
int delete(int userId);
}resources目錄下創(chuàng)建mybatis目錄,用于存放mapper文件
整體目錄結(jié)構(gòu)如下

在application.yml配置文件中配置數(shù)據(jù)庫連接信息和mybatis
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/demo?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
username: root
password: root
mybatis:
config-location: classpath:mybatis-config.xml
mapper-locations: classpath:mybatis/*Mapper.xml編寫UserMapper.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserDao">
<select id="getAll" resultType="com.example.demo.entity.User">
select * from t_user order by user_id desc
</select>
<select id="find" resultType="com.example.demo.entity.User">
select * from t_user where user_id = #{userId}
</select>
<insert id="insert" useGeneratedKeys="true" keyProperty="userId" keyColumn="user_id" parameterType="com.example.demo.entity.User">
insert into t_user(username,create_time,update_time) values(#{username},#{createTime},#{updateTime})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
update t_user
<set>
<if test="username != null">username=#{username},</if>
<if test="updateTime != null">update_time=#{updateTime},</if>
</set>
where user_id=#{userId}
</update>
<delete id="delete">
delete from t_user where user_id=#{userId}
</delete>
</mapper>修改SpringBoot啟動(dòng)類,加上 @MapperScan 注解
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.dao")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}下面進(jìn)行測(cè)試,打開UserDao,點(diǎn)擊接口名UserDao,然后按alt+回車,點(diǎn)擊create test:

選中userdao中要進(jìn)行測(cè)試的方法

選擇確定,然后會(huì)自動(dòng)創(chuàng)建UserDaoTest,編寫測(cè)試方法然后右鍵,點(diǎn)擊run執(zhí)行測(cè)試方法
package com.example.demo.dao;
import com.example.demo.entity.User;
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.Date;
import java.util.List;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {
@Autowired
private UserDao userDao;
@Test
public void getAll() {
List<User> list = userDao.getAll();
assertEquals(1,list.size());
}
@Test
public void find() {
User user = userDao.find(1);
assertEquals("tom",user.getUsername());
}
@Test
public void insert() {
User user = new User();
user.setUsername("jack");
user.setCreateTime(new Date());
int num = userDao.insert(user);
assertEquals(1,num);
}
@Test
public void delete() {
int num = userDao.delete(1);
assertEquals(1,num);
}
}注意:
- 要給測(cè)試類加上
@RunWith和@SpringBootTest注解 - 如果你用的是IDEA,那么在Autowired UserDao時(shí),可能會(huì)提示錯(cuò)誤,原因是找不到對(duì)應(yīng)的bean。
- UserDao是接口,找不到bean是正常的,可以不用管這個(gè)錯(cuò)誤,運(yùn)行時(shí)是不會(huì)報(bào)錯(cuò)的。
- 如果你想把錯(cuò)誤提示去掉,可以在setting設(shè)置中錯(cuò)誤級(jí)別從Error改為Warning,具體見下圖:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD
- SpringBoot整合MyBatis實(shí)現(xiàn)CRUD操作項(xiàng)目實(shí)踐
- SpringBoot整合MyBatis Plus實(shí)現(xiàn)基本CRUD與高級(jí)功能
- SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼
- springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解
- SpringBoot+Mybatis+Vue 實(shí)現(xiàn)商品模塊的crud操作
- 詳解springboot+mybatis-plue實(shí)現(xiàn)內(nèi)置的CRUD使用詳情
- SpringBoot整合Mybatis實(shí)現(xiàn)CRUD
- Spring Boot整合MyBatis-Plus實(shí)現(xiàn)CRUD操作的示例代碼
相關(guān)文章
java利用遞歸調(diào)用實(shí)現(xiàn)樹形菜單的樣式
這篇文章主要給大家介紹了關(guān)于java利用遞歸調(diào)用實(shí)現(xiàn)樹形菜單樣式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例
這篇文章主要介紹了 Java 創(chuàng)建動(dòng)態(tài)類和查看方法列表信息的實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06
log4j2 項(xiàng)目日志組件的實(shí)例代碼
下面小編就為大家分享一篇log4j2 項(xiàng)目日志組件的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2017-12-12
Java 中的FileReader和FileWriter源碼分析_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本文給大家分享一段示例程序,通過示例代碼可以看出FileReader是基于InputStreamReader實(shí)現(xiàn)的,FileWriter是基于OutputStreamWriter實(shí)現(xiàn)的,具體程序代碼大家通過本文了解下吧2017-05-05
SpringBoot集成Swagger2生成接口文檔的方法示例
我們提供Restful接口的時(shí)候,API文檔是尤為的重要,它承載著對(duì)接口的定義,描述等,本文主要介紹了SpringBoot集成Swagger2生成接口文檔的方法示例,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12
MyBatis 動(dòng)態(tài)SQL之where標(biāo)簽的使用
本文主要介紹了MyBatis 動(dòng)態(tài)SQL之where標(biāo)簽,where 標(biāo)簽主要用來簡(jiǎn)化 SQL 語句中的條件判斷,可以自動(dòng)處理 AND/OR 條件,下面就來具體介紹一下2024-01-01
Java中HashSet和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java中HashSet和HashMap的區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理,需要的朋友可以參考下2017-04-04

