springboot整合mybatis(注解方式,上接Mybatis教程操作User表)

准备

springboot 快速入门-创建工程

介绍

springboot整合mybatis,配置方式:

  • 注解+配置文件,sql写在xml中。适合传统大项目
  • 全注解,sql写在注解中。适合简单快速开发

在测试时,需要实现controller、service、mybatis相关类、相关配置文件,以及使用druid数据库连接池,比较复杂,稍有不慎,就会报错

本文使用 注解+配置文件,sql写在xml中

准备mysql表

详见:mybatis 准备mysql环境

druid数据库连接池

略

springboot使用druid连mysql5.7(mysql5驱动)

springboot使用druid连mysql5.7(mysql8驱动)

mybatis依赖

找到mybatis依赖

在 https://mvnrepository.com/ 搜索 mybatis,找到MyBatis Spring Boot Starter

添加依赖

将上图中的红框处粘贴到pom.xml文件中

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

已经包含 spring-boot-starter-jdbc

注意:必须是 2.0.1 以上,否则没有下面用到的 @MapperScan 注解

实体类

详见:mybatis 创建maven工程,实现select查询

mapper接口

package top.malaoshi.mapper;

import org.apache.ibatis.annotations.*;
import top.malaoshi.entity.User;

import java.util.List;

@Mapper
public interface IUserMapper {
    @Select("select id,username,password,age,sex,status from user")
    public List<User> selectAll();

    /**
     * 保存 登录用户数据
     * @param user 封装用户信息
     * @return 保存的条数,保持成功返回1,失败了抛异常
     */
    @Insert("insert into user ( id, username,password,age,sex,status )\n" +
            "        values\n" +
            "        ( #{id},#{username},#{password},#{age},#{sex},#{status} )")
    public int save(User user);

    /**
     * 修改用户信息
     * @param user 封装用户信息
     * @return 更新的记录数
     */
    @Update("update user set age = #{age} ,status = #{status} where id = #{id}")
    public int updateById(User user);

    /**
     * 根据id删除,不要其他的值,所以此时就只传基本数据类型
     * @param id
     * @return
     */
    @Delete("delete from user where id = #{id}")
    public int deleteById(String id);
}

让 mapper 接口生效

springboot+mybatis,有2种方式让 mapper 接口生效:

  1. mapper接口由 @Mapper 注解修饰

  2. mapper接口由 @Repository 注解修饰
    主启动类由 @MapperScan("top.malaoshi.mapper") 修饰,扫描 top.malaoshi.mapper 包下的类,使其生效

mybatis总配置文件

保存位置

在 resources/mybatis 目录下,如下图:

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>
</configuration>

注意: <package name="top.malaoshi.entity"/>必须是上面 实体类的包路径

修改springboot配置文件

整合mybatis

application.yml

增加下面部分

# 整合mybatis
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml   #mybatis总配置文件
  mapperLocations: classpath:mybatis/mapper/*.xml   # xxxMapper.xml配置文件

application.properties

增加下面部分

# 整合mybatis
#mybatis总配置文件
mybatis.config-location: classpath:mybatis/mybatis-config.xml

注意

classpath指src/main/resources路径,

  • classpath:mybatis/mybatis-config.xml指src/main/resources/mybatis/mybatis-config.xml

创建service接口

package top.malaoshi.service;

import top.malaoshi.entity.User;

import java.util.List;

public interface IUserService {
    public List<User> selectAll();
    public int save(User user);
    public int deleteById(String id);
    public int updateById(User book);
    public User selectById(String id);
}

创建service接口实现类

package top.malaoshi.service.impl;

import org.springframework.stereotype.Service;
import top.malaoshi.entity.User;
import top.malaoshi.mapper.IUserMapper;
import top.malaoshi.service.IUserService;

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

@Service
public class UserSrvImpl implements IUserService {
    @Resource
    private IUserMapper userMapper;

    @Override
    public List<User> selectAll() {
        return userMapper.selectAll();
    }

    @Override
    public int save(User user) {
        String uuid= UUID.randomUUID().toString().replace("-","");
        user.setId(uuid);
        int i=userMapper.save(user);
        return i;
    }

    @Override
    public int deleteById(String id) {
        return userMapper.deleteById(id);
    }

    @Override
    public int updateById(User user) {
        return userMapper.updateById(user);
    }

    @Override
    public User selectById(String id) {
        return userMapper.getById(id);
    }
}

JsonResult

package top.malaoshi.vo;

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class JsonResult <T> {
    private int code;
    private String msg;
    private T data;

    public JsonResult() {
    }

    public JsonResult(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

创建Controller

package top.malaoshi.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import top.malaoshi.entity.User;
import top.malaoshi.service.IUserService;
import top.malaoshi.vo.JsonResult;

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

@RestController
public class LoginCtrl {
    @Resource
    private IUserService userService;
    @RequestMapping("/login")
    public JsonResult login(String username, String password){

        System.out.println("username:"+username);
        System.out.println("password:"+password);
        List<User> list = userService.selectAll();
        for ( User user: list  ) {
            System.out.println(user.getUsername()+","+user.getPassword());
        }
        return JsonResult.success("登录成功!");

    }
}

修改主启动类

mapper 接口使用 @Repository 注解修饰时,需要在主启动类增加下面注解:

@MapperScan("org.example.mapper")

扫描 top.malaoshi.mapper 包下的类,使其生效

注意: 如果 mapper 接口使用 @Mapper 注解修饰,则 不需要修改主启动类(加上也不报错)

例子

@SpringBootApplication
@MapperScan("top.malaoshi.mapper")
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
    }
}

为什么增加此注解?

见下面链接:
https://www.malaoshi.top/show_1EF6RCe0gjUK.html

mapper
https://www.cnblogs.com/ityouknow/p/6037431.html

dao
https://segmentfault.com/a/1190000017211657


原文出处:/show_1GW1VmCoiItl.html