Mybatis和Spring Boot的整合

1.引入相关的jar包

直接在pom.xml中配置:

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.1.0</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>5.1.2</version>
</dependency>

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.1.0</version>
</dependency>
<!--在ide中安装lombok插件-->	
<dependency>
     <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.8</version>
</dependency>

2.创建一个与数据库表中的字段相对应的实体类

数据库表:
在这里插入图片描述
User.java:

package com.dlj.springbootdemo.data;

import java.util.Date;

/**
 * @author ashley
 * @date 2019/9/23-16:19
 */
 @Data//需引入lombok依赖,有了该注解实体类中可省掉get,set方法,减少代码量
public class User {

    private Long id;
    private String email;
    private String phoneNumber;
    private String username;
    private String nickname;
    private String password;
    private Date createTime;
    private Date updateTime;
}

3. 创建数据访问接口

UserMapper.java:

package com.dlj.springbootdemo.dao;

import com.dlj.springbootdemo.data.User;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author ashley
 * @date 2019/9/23-17:43
 */
@Repository
public interface UserMapper {
    User getUserById (Long id);

    List<User> getUserList();

    int deleteUser(Long id);

    int updateNickname(String nickname, Long id);

    int addUser(User user);
}


4.创建实体类的映射Mapper文件

user.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 必须与接口的全类名保持一致-->
<mapper namespace="com.dlj.springbootdemo.dao.UserMapper">
    <!--id必须与接口对应的功能的名称保持一致-->
    <resultMap id="userMap" type="com.dlj.springbootdemo.data.User">
        <!--实体类映射-->
        <!--property和javaType与实体类中保持一致,column和jdbcType与数据库中保持一致-->
        <id property="id" column="id" javaType="java.lang.Long" jdbcType="BIGINT"/>
        <result property="email" column="email" javaType="java.lang.String" jdbcType="VARCHAR"/>
        <result property="phoneNumber" column="phone_number" javaType="java.lang.String" jdbcType="VARCHAR"/>
        <result property="username" column="username" javaType="java.lang.String" jdbcType="VARCHAR"/>
        <result property="password" column="password" javaType="java.lang.String" jdbcType="VARCHAR"/>
        <result property="createTime" column="create_time" javaType="java.util.Date" jdbcType="TIME"/>
        <result property="updateTime" column="update_time" javaType="java.util.Date" jdbcType="TIMESTAMP"/>
    </resultMap>
    <!--sql语句中的#也可以用$,但是#可以避免sql注入-->
    <!--指定单条查询-->
    <select id="getUserById" resultMap="userMap">
        select * from t_user where id = #{id}
    </select>
    <!--查询所有-->
    <select id="getUserList" resultMap="userMap">
        select * from t_user
    </select>

    <!--删-->
    <delete id="deleteUser" parameterType="java.lang.Long">
        delete from t_user where id = #{id}
    </delete>
    <!--改-->
    <update id="updateNickname">
        update t_user set nickname = #{nickname} where id = #{id}
    </update>
    <!--增-->
    <insert id="addUser" parameterType="com.dlj.springbootdemo.data.User"  useGeneratedKeys="true" keyProperty="id"><!--返回主键id-->
        insert into t_user(email, phone_number, username, nickname, password, create_time, update_time)
        values (#{email}, #{phoneNumber}, #{username}, #{nickname}, #{password}, now(), now())
    </insert>

</mapper>

5.完成其他配置文件

application.properties:

#定义数据库连接信息(初始化驱动)
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=

#指定了mybatis基础配置文件和实体类映射文件的地址
mybatis.mapper-locations:classpath:mybatis/mapper/*.xml
mybatis.config-location:classpath:mybatis/mybatis-config.xml

#定义dao包下的日志记录级别为debug,标准输出会显示sql语句
logging.level.com.dlj.springbootdemo.dao=debug

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>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!--映射文件-->
    <typeAliases>
        <package name="com.dlj.springbootdemo.data"/>
    </typeAliases>
</configuration>

6.创建测试类:

package com.dlj.springbootdemo;

import com.dlj.springbootdemo.dao.UserMapper;
import com.dlj.springbootdemo.data.User;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import java.util.List;
import java.util.UUID;

@MapperScan("com.dlj.springbootdemo.dao")//对com.dlj.springbootdemo.dao包进行扫描
@SpringBootTest//单元测试
@RunWith(SpringJUnit4ClassRunner.class)//让测试运行于Spring测试环境
public class UserTest {

    @Resource
    //注入userMapper
    private UserMapper userMapper;

    @Test
    public void testGetUserById(){
        User user = userMapper.getUserById(25L);
        Assert.assertTrue(user != null);
    }

    @Test
    public void testGetUserList(){
        List<User> userList = userMapper.getUserList();
        Assert.assertTrue(userList != null);
    }

    @Test
    public void testDeleteUser() {
        int i = userMapper.deleteUser(8L);
        Assert.assertTrue(i >= 0);
    }

    @Test
    public void testUpdateNickname() {
        int i = userMapper.updateNickname("bob", 15L);
        Assert.assertTrue(i >= 0);
    }

    @Test
    public void tesAddUser() {
        User user = new User();
        user.setEmail("[email protected]");
        user.setPhoneNumber("13498");
        user.setUsername(UUID.randomUUID().toString().substring(0, 8));//用户名取随机的uuid的前八位
        user.setNickname("marry");
        user.setPassword("marry234");
        int i = userMapper.addUser(user);
        Assert.assertTrue(i >= 0);
    }
}

7.建一个controller,用于指定获取指定id所对应的用户信息

package com.dlj.springbootdemo.controller;

import com.dlj.springbootdemo.dao.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author ashley
 * @date 2019/9/24-18:09
 */
@RestController
public class UserTest {

        @Autowired
        private UserMapper userMapper;
        
        //浏览器访问http://localhost:8080/getUser?id=xx即可查看对应id的用户信息
        @RequestMapping(value = "/getUser", method = RequestMethod.GET)
        public Object getUser(@RequestParam long id) {

            return userMapper.getUserById(id);
        }

}

目录结构:
在这里插入图片描述
启动MySQL和spring boot在浏览器访问:
在这里插入图片描述
数据库表信息:
在这里插入图片描述
idea返回日志:
在这里插入图片描述

发布了49 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ashleyjun/article/details/101209923