SpringBoot之整合MyBatis實(shí)現(xiàn)CRUD方式
SpringBoot整合MyBatis實(shí)現(xiàn)CRUD
SpringBoot項(xiàng)目的持久層一般都是使用JPA或者M(jìn)yBatis,我個人是比較喜歡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 對應(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)建時間', `update_time` datetime DEFAULT NULL COMMENT '修改時間', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
創(chuàng)建對應(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啟動類,加上 @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)行測試,打開UserDao,點(diǎn)擊接口名UserDao,然后按alt+回車,點(diǎn)擊create test:
選中userdao中要進(jìn)行測試的方法
選擇確定,然后會自動創(chuàng)建UserDaoTest,編寫測試方法然后右鍵,點(diǎn)擊run執(zhí)行測試方法
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); } }
注意:
- 要給測試類加上
@RunWith
和@SpringBootTest
注解 - 如果你用的是IDEA,那么在Autowired UserDao時,可能會提示錯誤,原因是找不到對應(yīng)的bean。
- UserDao是接口,找不到bean是正常的,可以不用管這個錯誤,運(yùn)行時是不會報錯的。
- 如果你想把錯誤提示去掉,可以在setting設(shè)置中錯誤級別從Error改為Warning,具體見下圖:
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD
- SpringBoot整合MyBatis實(shí)現(xiàn)CRUD操作項(xiàng)目實(shí)踐
- SpringBoot整合MyBatis Plus實(shí)現(xiàn)基本CRUD與高級功能
- 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)文章
mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法
這篇文章主要介紹了mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn)
在軟件開發(fā)中,利用Spring?Boot進(jìn)行分模塊項(xiàng)目搭建能夠提高代碼的模塊化和復(fù)用性,本文主要介紹了Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn),感興趣的可以了解一下2024-10-10SpringBoot教程_創(chuàng)建第一個SpringBoot項(xiàng)目
這篇文章主要介紹了SpringBoot教程_創(chuàng)建第一個SpringBoot項(xiàng)目,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot工程搭建打包、啟動jar包和war包的教程圖文詳解
這篇文章主要介紹了SpringBoot工程搭建打包、啟動jar包和war包的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼
Java對各種變量、方法和類等要素命名時使用的字符序列稱為標(biāo)識符,凡是自己可以起名字的地方都叫標(biāo)識符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下2022-05-05Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績的劃分
這篇文章主要介紹了Java利用條件運(yùn)算符的嵌套來完成學(xué)習(xí)成績的劃分,需要的朋友可以參考下2017-02-02排查Failed?to?validate?connection?com.mysql.cj.jdbc.Connec
這篇文章主要介紹了Failed?to?validate?connection?com.mysql.cj.jdbc.ConnectionImpl問題排查,具有很好的參考價值,希望對大家有所幫助2023-02-02Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)
這篇文章主要介紹了Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn),文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Springboot實(shí)現(xiàn)多文件上傳代碼解析
這篇文章主要介紹了Springboot實(shí)現(xiàn)多文件上傳代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04