SpringBoot之整合MyBatis实现CRUD方式
作者:君君要上天
这篇文章主要介绍了SpringBoot之整合MyBatis实现CRUD方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
SpringBoot整合MyBatis实现CRUD
SpringBoot项目的持久层一般都是使用JPA或者MyBatis,我个人是比较喜欢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下创建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>
<!-- 获取数据库自增id -->
<setting name="useGeneratedKeys" value="true"/>
<!-- 支持别名 -->
<setting name="useColumnLabel" value="true" />
<!-- 支持驼峰命名转换,例如表字段create_time 对应实体类的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 '创建时间', `update_time` datetime DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
创建对应的实体类
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;
}
}创建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目录下创建mybatis目录,用于存放mapper文件
整体目录结构如下

在application.yml配置文件中配置数据库连接信息和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);
}
}下面进行测试,打开UserDao,点击接口名UserDao,然后按alt+回车,点击create test:

选中userdao中要进行测试的方法

选择确定,然后会自动创建UserDaoTest,编写测试方法然后右键,点击run执行测试方法
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时,可能会提示错误,原因是找不到对应的bean。
- UserDao是接口,找不到bean是正常的,可以不用管这个错误,运行时是不会报错的。
- 如果你想把错误提示去掉,可以在setting设置中错误级别从Error改为Warning,具体见下图:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- SpringBoot使用MyBatis实现数据的CRUD
- SpringBoot整合MyBatis实现CRUD操作项目实践
- SpringBoot整合MyBatis Plus实现基本CRUD与高级功能
- SpringBoot整合Mybatis Plus实现基本CRUD的示例代码
- springboot+mybatis-plus实现内置的CRUD使用详解
- SpringBoot+Mybatis+Vue 实现商品模块的crud操作
- 详解springboot+mybatis-plue实现内置的CRUD使用详情
- SpringBoot整合Mybatis实现CRUD
- Spring Boot整合MyBatis-Plus实现CRUD操作的示例代码
