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,具体见下图:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。