zoukankan      html  css  js  c++  java
  • 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、测试

    自行测试

     

  • 相关阅读:
    JS 数字时钟的代码(摘录,忘了是从哪了)
    数据写入DataTable C# 2005
    C# 进制转化问题测试下再说(网上的直接转化不好用)
    防sql 注入,就是将sql 的执行命令给排除
    今天研究了一下午网站窄屏/宽屏的切换实现
    解决VS2005下中文输入法全角半角混乱的补丁
    一些实用的站长查询工具
    UE(用户体验)无处不在,留心处处皆学问
    添加了方便聚合的链接
    该好好整理一下自己了
  • 原文地址:https://www.cnblogs.com/mmdz/p/14831320.html
Copyright © 2011-2022 走看看