SpringBoot之整合MyBatis實(shí)現(xiàn)CRUD方式
SpringBoot整合MyBatis實(shí)現(xiàn)CRUD
SpringBoot項(xiàng)目的持久層一般都是使用JPA或者M(jìn)yBatis,我個(gè)人是比較喜歡MyBatis。
首先我們打開(kāi)pom.xml
添加上mybatis需要的一些依賴(lài)
<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ù)庫(kù)自增id --> <setting name="useGeneratedKeys" value="true"/> <!-- 支持別名 --> <setting name="useColumnLabel" value="true" /> <!-- 支持駝峰命名轉(zhuǎn)換,例如表字段create_time 對(duì)應(yīng)實(shí)體類(lèi)的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 '用戶(hù)名', `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í)體類(lèi)
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ù)庫(kù)連接信息和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
編寫(xiě)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)類(lèi),加上 @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è)試,打開(kāi)UserDao,點(diǎn)擊接口名UserDao,然后按alt+回車(chē),點(diǎn)擊create test:
選中userdao中要進(jìn)行測(cè)試的方法
選擇確定,然后會(huì)自動(dòng)創(chuàng)建UserDaoTest,編寫(xiě)測(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è)試類(lèi)加上
@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àn)下圖:
總結(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)文章
mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法
這篇文章主要介紹了mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn)
在軟件開(kāi)發(fā)中,利用Spring?Boot進(jìn)行分模塊項(xiàng)目搭建能夠提高代碼的模塊化和復(fù)用性,本文主要介紹了Springboot分模塊項(xiàng)目搭建的實(shí)現(xiàn),感興趣的可以了解一下2024-10-10SpringBoot教程_創(chuàng)建第一個(gè)SpringBoot項(xiàng)目
這篇文章主要介紹了SpringBoot教程_創(chuàng)建第一個(gè)SpringBoot項(xiàng)目,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06SpringBoot工程搭建打包、啟動(dòng)jar包和war包的教程圖文詳解
這篇文章主要介紹了SpringBoot工程搭建打包、啟動(dòng)jar包和war包的教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Java實(shí)現(xiàn)駝峰和下劃線(xiàn)互相轉(zhuǎn)換的示例代碼
Java對(duì)各種變量、方法和類(lèi)等要素命名時(shí)使用的字符序列稱(chēng)為標(biāo)識(shí)符,凡是自己可以起名字的地方都叫標(biāo)識(shí)符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線(xiàn)命名的互轉(zhuǎn),感興趣的可以了解一下2022-05-05淺談Java中各種修飾符與訪(fǎng)問(wèn)修飾符的說(shuō)明
下面小編就為大家?guī)?lái)一篇淺談Java中各種修飾符與訪(fǎng)問(wèn)修飾符的說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01Java利用條件運(yùn)算符的嵌套來(lái)完成學(xué)習(xí)成績(jī)的劃分
這篇文章主要介紹了Java利用條件運(yùn)算符的嵌套來(lái)完成學(xué)習(xí)成績(jī)的劃分,需要的朋友可以參考下2017-02-02排查Failed?to?validate?connection?com.mysql.cj.jdbc.Connec
這篇文章主要介紹了Failed?to?validate?connection?com.mysql.cj.jdbc.ConnectionImpl問(wèn)題排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2023-02-02Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)
這篇文章主要介紹了Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn),文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07Springboot實(shí)現(xiàn)多文件上傳代碼解析
這篇文章主要介紹了Springboot實(shí)現(xiàn)多文件上傳代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04