SpringBoot整合Mybatis

SpringBoot整合Mybatis

?> 技术栈:springboot、mybatis、mysql || 学习目的: Springboot整合MyBatis基于Restful风格实现增删改查功能


1、项目结构


2、项目POM文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.mmdz</groupId>
    <artifactId>sbt_mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>sbt_mybatis</name>
    <description>Demo mybatis project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--validator-->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.6.Final</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies><build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3、项目配置文件

application.yml

server:
  port: 8081

spring:
  profiles:
    active: dev

application-dev.yml || application-test.yml (个人设定)

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.mmdz.entity
  # sql 打印
#  configuration:
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  config-location: classpath:mybatis/mybatis-config.xml

# pagehelper
pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

#showSql
logging:
  level:
    com:
      example:
        mapper : debug

两个文件的意思是:

在项目中配置多套环境的配置方法。

因为现在一个项目有好多环境,开发环境,测试环境,准生产环境,生产环境,每个环境的参数不同,所以我们就可以把每个环境的参数配置到 yml 文件中,这样在想用哪个环境的时候只需要在主配置文件中将用的配置文件写上就行如 application.yml

笔记:在 Spring Boot 中多环境配置文件名需要满足 application-{profile}.yml 的格式,其中 {profile} 对应你的环境标识,比如:

  • application-dev.yml:开发环境

  • application-test.yml:测试环境

  • application-prod.yml:生产环境


4、实体&SQL

sql(数据库使用的是 MySQL)

CREATE TABLE `user` (
  `id` int(32) NOT NULL AUTO_INCREMENT,
  `userName` varchar(32) NOT NULL,
  `passWord` varchar(50) NOT NULL,
  `realName` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-- 数据自行添加

entity

import com.mmdz.common.validator.Update;
import lombok.Data;
import javax.validation.constraints.NotBlank;
​
@Data
public class User {
    @NotBlank(message = "id不能为空",groups = {Update.class})
    private Integer id;
    @NotBlank
    private String userName;
    @NotBlank
    private String passWord;
    private String realName;
}

5、控制层

UserController.java

import com.mmdz.common.Result;
import com.mmdz.common.validator.Update;
import com.mmdz.entity.User;
import com.mmdz.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
​
@RestController
public class UserController {
​
    @Autowired
    private IUserService userService;
​
    @RequestMapping("/getAll")
    public Result getAllUser(){
        return Result.success(userService.getAllUser());
    }
    @RequestMapping("/getUserById/{id}")
    public Result getUserById(@PathVariable Integer id){
        return Result.success(userService.getUserById(id));
    }
    @RequestMapping("/getUserByName/{name}")
    public Result getUserByName(@PathVariable String name){
        return Result.success(userService.getUserByName(name));
    }
    @PostMapping("/insert")
    public Result insert(@RequestBody @Valid User user){
        User selective = userService.getUserBySelective(user);
        if(selective != null)
            return Result.error("用户名重复!");
        return userService.insert(user) == 1 ?
                Result.success("新增成功!") : Result.error("新增失败!");
    }
    @PutMapping("/update")
    public Result update(@RequestBody @Validated(Update.class) User user){
        User selective = userService.getUserBySelective(user);
        if(selective != null)
            return Result.error("用户名重复!");
        return userService.update(user) == 1 ?
                Result.success("更新成功!") : Result.error("更新失败!");
    }
    @DeleteMapping("/delete/{id}")
    public Result getUserByName(@PathVariable Integer id){
        return userService.deleteById(id) == 1 ?
                Result.success(userService.deleteById(id)) : Result.error("删除失败!");
    }
}

6、服务层

service

// User接口
import com.mmdz.entity.User;
import java.util.List;
​
public interface IUserService {
    List<User> getAllUser();
    User getUserById(Integer id);
    User getUserByName(String userName);
    User getUserBySelective(User user);
    int deleteById(Integer id);
    int insert(User user);
    int update(User user);
}
// =========================================================================
import com.mmdz.entity.User;
import com.mmdz.mapper.UserMapper;
import com.mmdz.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
​
@Service
public class UserServiceImpl implements IUserService {
​
    @Autowired
    UserMapper userMapper;
​
    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
​
    @Override
    public User getUserById(Integer id) {
        return userMapper.getUserById(id);
    }
​
    @Override
    public User getUserByName(String userName) {
        return userMapper.getUserByName(userName);
    }
​
    @Override
    public User getUserBySelective(User user) {
        return userMapper.getUserBySelective(user);
    }
​
    @Override
    public int deleteById(Integer id) {
        return userMapper.deleteById(id);
    }
​
    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }
​
    @Override
    public int update(User user) {
        return userMapper.update(user);
    }
}

7、数据层

mapper

import com.mmdz.entity.User;
import org.springframework.stereotype.Repository;
import java.util.List;
​
@Repository
public interface UserMapper {
    List<User> getAllUser();
    User getUserById(Integer id);
    User getUserByName(String userName);
    User getUserBySelective(User user);
    int deleteById(Integer id);
    int insert(User user);
    int update(User user);
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmdz.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.mmdz.entity.User">
        <result column="id" jdbcType="INTEGER" property="id" />
        <result column="userName" jdbcType="VARCHAR" property="userName" />
        <result column="passWord" jdbcType="VARCHAR" property="passWord" />
        <result column="realName" jdbcType="VARCHAR" property="realName" />
    </resultMap><sql id="Base_Column_List" >
        select id, userName, passWord, realName
    </sql><select id="getAllUser" resultMap="BaseResultMap">
        <include refid="Base_Column_List" />
        from db_user
    </select><select id="getUserById" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
        <include refid="Base_Column_List" />
        from db_user
        where id = #{id,jdbcType=INTEGER}
    </select><select id="getUserByName" resultMap="BaseResultMap" parameterType="java.lang.String" >
        <include refid="Base_Column_List" />
        from db_user
        where userName = #{userName,jdbcType=VARCHAR}
    </select><select id="getUserBySelective" resultMap="BaseResultMap" parameterType="com.mmdz.entity.User" >
        <include refid="Base_Column_List" />
        from db_user where 1 = 1
        <if test="userName != null">
            and userName =  #{userName,jdbcType=VARCHAR}
        </if>
        <if test="id != null">
            and id !=  #{id,jdbcType=VARCHAR}
        </if>
        ORDER BY id ASC LIMIT 1
    </select><delete id="deleteById" parameterType="java.lang.Integer" >
        delete from db_user
        where id = #{id,jdbcType=INTEGER}
    </delete><insert id="insert" parameterType="com.mmdz.entity.User" >
        insert into db_user (id, userName, passWord, realName)
        values (#{id,jdbcType=INTEGER},
                #{userName,jdbcType=VARCHAR},
                #{passWord,jdbcType=VARCHAR},
                #{realName,jdbcType=VARCHAR})
    </insert><update id="update" parameterType="com.mmdz.entity.User" >
        update db_user
        set userName = #{userName,jdbcType=VARCHAR},
            passWord = #{passWord,jdbcType=VARCHAR},
            realName = #{realName,jdbcType=VARCHAR}
        where id = #{id,jdbcType=INTEGER}
    </update></mapper>

8、启动类

启动类扫描的 mapper 文件路径 @MapperScan("com.xxx.mapper")

9、测试

自行测试

 

原文地址:https://www.cnblogs.com/mmdz/p/14831320.html