SpringBoot 整合MyBatis案例详解
Posted carrystone
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 整合MyBatis案例详解相关的知识,希望对你有一定的参考价值。
SpringBoot约定大于配置的特点,让框架的配置非常简洁,与传统的SSM框架相比,简化了大量的XML配置,使得程序员可以从繁琐的配置中脱离出来,将精力集中在业务代码层面,提高了开发效率,并且后期的维护成本也大大降低。
从源码中可以看到,每一个springboot集成的jar包也是一个maven的子module,springboot已经将相关依赖的jar包自动添加到工程中,不需要开发人员手动去添加了,这也是springboot能够简化配置的一个重要原因。
下面开始说明springboot是如何整合mybatis框架以及如何实现和数据库的交互的
首先需要在pom.xml中引入springboot整合mybatis的jar包以及mysql-connector-java
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
然后在application.properties中添加数据库相关参数
spring.datasource.url=jdbc:mysql://localhost:3306/mysql spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=org.gjt.mm.mysql.Driver
到这里mybatis的相关配置已经完成,可以看出配置非常的简单
下一步开始编写mapper映射文件,我们放弃传统的xml配置,改用注解的方式,编写一个mapper接口
需要说明的是,springboot的启动类需要在目录最上层,保证所有的类可以被springboot扫描到
接口外面需要添加@Mapper,才可以被spring识别,@Param注解声明的名称要和sql语句传入的参数保持一致,
传参的方式可以是String类型,也可以是map集合,或者是User对象
package com.didispace.domain; import java.util.Map; import org.apache.ibatis.annotations.*; @Mapper public interface UserMapper { @Insert("insert into users(name,age) values (#{name},#{age})") public void insertUser(@Param("name") String name,@Param("age") Integer age); @Insert("insert into users(name,age) values (#{name},#{age})") public void insertUserMap(Map<String, Object> map); @Update("update users set age=#{age} where name=#{name}") public void updateUser(User user); @Select("select * from users where name=#{name}") public User selectUserByName(@Param("name") String name); @Select("select count(*) from users") public Integer selectAllUsers(); @Delete("delete from users") public void deleteAllUsers(); }
最后,编写一个Junit测试类,测试方法是否能够成功执行
@SpringApplicationConfiguration(Application.class),将springboot启动类添加到测试类中,实现每次测试都同时启动springboot
@Before,在测试之前先删除该表所有记录,保证每次执行都能确保数据一致。
首先插入两笔记录,然后根据名称查找,最后分别使用map和user对象方式传参
package demo; import java.util.HashMap; import java.util.Map; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.didispace.Application; import com.didispace.domain.User; import com.didispace.domain.UserMapper; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(Application.class) public class ApplicationTest { @Autowired private UserMapper userMapper; @Before public void deleteAll() throws Exception{ userMapper.deleteAllUsers(); } @Test public void test() throws Exception{ userMapper.insertUser("lirenjie", 28); userMapper.insertUser("carrystone", 19); Assert.assertEquals(2, userMapper.selectAllUsers().intValue()); Assert.assertEquals(28, userMapper.selectUserByName("lirenjie").getAge().intValue()); Map<String, Object> map = new HashMap<>(); map.put("name", "frankseoul"); map.put("age", 17); userMapper.insertUserMap(map); Assert.assertEquals(17, userMapper.selectUserByName("frankseoul").getAge().intValue()); User user = new User("frankseoul",19); userMapper.updateUser(user); System.out.println(userMapper.selectUserByName("frankseoul").getAge()); } }
执行Junit,可以看到方法执行成功,数据库也有相关记录
以上是关于SpringBoot 整合MyBatis案例详解的主要内容,如果未能解决你的问题,请参考以下文章