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,可以看到方法执行成功,数据库也有相关记录

猜你喜欢

转载自www.cnblogs.com/CarryStone/p/10228414.html