zoukankan      html  css  js  c++  java
  • springboot2.0 Mybatis 整合

    原文:https://blog.csdn.net/Winter_chen001/article/details/80010967

    环境/版本一览:

    • 开发工具:Intellij IDEA 2017.1.3
    • springboot: 2.0.1.RELEASE
    • jdk:1.8.0_40
    • maven:3.3.9
    • alibaba Druid 数据库连接池:1.1.9

    额外功能:

    开始搭建:

    创建项目:

    添加基础的依赖: 

    依赖文件:

    按照pom文件补齐需要的依赖:

    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.winterchen</groupId>
        <artifactId>springboot2-mybatis-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <name>springboot2-mybatis-demo</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.4</version>
            </dependency>
    
    
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.datatype</groupId>
                <artifactId>jackson-datatype-joda</artifactId>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.module</groupId>
                <artifactId>jackson-module-parameter-names</artifactId>
            </dependency>
            <!-- 分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.5</version>
            </dependency>
            <!-- alibaba的druid数据库连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.9</version>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96

    项目结构:

    项目结构

    项目启动类:

    package com.winterchen;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @MapperScan("com.winterchen.dao")
    public class Springboot2MybatisDemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(Springboot2MybatisDemoApplication.class, args);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    配置:

    可以根据个人使用习惯选择使用properties或者yml文件,本项目使用的是yml配置文件,所以把原本application.properties删除,创建一个application.yml文件

    在resource文件夹下创建application.yml

    server:
      port: 8080
    
    
    spring:
        datasource:
            name: mysql_test
            type: com.alibaba.druid.pool.DruidDataSource
            #druid相关配置
            druid:
              #监控统计拦截的filters
              filters: stat
              driver-class-name: com.mysql.jdbc.Driver
              #基本属性
              url: jdbc:mysql://127.0.0.1:3306/mytest?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
              username: root
              password: root
              #配置初始化大小/最小/最大
              initial-size: 1
              min-idle: 1
              max-active: 20
              #获取连接等待超时时间
              max-wait: 60000
              #间隔多久进行一次检测,检测需要关闭的空闲连接
              time-between-eviction-runs-millis: 60000
              #一个连接在池中最小生存的时间
              min-evictable-idle-time-millis: 300000
              validation-query: SELECT 'x'
              test-while-idle: true
              test-on-borrow: false
              test-on-return: false
              #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
              pool-prepared-statements: false
              max-pool-prepared-statement-per-connection-size: 20
    
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.winterchen.model
    
    #pagehelper
    pagehelper:
        helperDialect: mysql
        reasonable: true
        supportMethodsArguments: true
        params: count=countSql
        returnPageInfo: check
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    创建包:

    modeldaomapper

    创建数据库和数据表

    CREATE DATABASE mytest;
    
    CREATE TABLE t_user(
      userId INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      userName VARCHAR(255) NOT NULL ,
      password VARCHAR(255) NOT NULL ,
      phone VARCHAR(255) NOT NULL
    ) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    创建实体类:UserDomain.java

    package com.winterchen.model;
    
    public class UserDomain {
        private Integer userId;
    
        private String userName;
    
        private String password;
    
        private String phone;
    
        // get,set方法略...
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    创建dao:

    UserDao.java

    package com.winterchen.dao;
    
    
    
    import com.winterchen.model.UserDomain;
    import org.apache.ibatis.annotations.Mapper;
    
    import java.util.List;
    
    public interface UserDao {
    
    
        int insert(UserDomain record);
    
    
    
        List<UserDomain> selectUsers();
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    创建mybatis映射文件: 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.winterchen.dao.UserDao" >
      <sql id="BASE_TABLE">
        t_user
      </sql>
    
      <sql id="BASE_COLUMN">
        userId,userName,password,phone
      </sql>
    
      <insert id="insert" parameterType="com.winterchen.model.UserDomain">
        INSERT INTO
          <include refid="BASE_TABLE"/>
        <trim prefix="(" suffix=")" suffixOverrides=",">
          userName,password,
          <if test="phone != null">
            phone,
          </if>
        </trim>
        <trim prefix="VALUES(" suffix=")" suffixOverrides=",">
          #{userName, jdbcType=VARCHAR},#{password, jdbcType=VARCHAR},
          <if test="phone != null">
            #{phone, jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
    
      <select id="selectUsers" resultType="com.winterchen.model.UserDomain">
          SELECT
            <include refid="BASE_COLUMN"/>
          FROM
            <include refid="BASE_TABLE"/>
      </select>
    
    
    </mapper>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    创建剩余的controllerservice包和文件

    UserService.java

    package com.winterchen.service.user;
    
    import com.github.pagehelper.PageInfo;
    import com.winterchen.model.UserDomain;
    
    import java.util.List;
    
    /**
     * Created by Administrator on 2018/4/19.
     */
    public interface UserService {
    
        int addUser(UserDomain user);
    
        PageInfo<UserDomain> findAllUser(int pageNum, int pageSize);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    UserServiceImpl

    package com.winterchen.service.user.impl;
    
    import com.github.pagehelper.PageHelper;
    import com.github.pagehelper.PageInfo;
    import com.winterchen.dao.UserDao;
    import com.winterchen.model.UserDomain;
    import com.winterchen.service.user.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    /**
     * Created by Administrator on 2017/8/16.
     */
    @Service(value = "userService")
    public class UserServiceImpl implements UserService {
    
        @Autowired
        private UserDao userDao;//这里会报错,但是并不会影响
    
        @Override
        public int addUser(UserDomain user) {
    
            return userDao.insert(user);
        }
    
        /*
        * 这个方法中用到了我们开头配置依赖的分页插件pagehelper
        * 很简单,只需要在service层传入参数,然后将参数传递给一个插件的一个静态方法即可;
        * pageNum 开始页数
        * pageSize 每页显示的数据条数
        * */
        @Override
        public PageInfo<UserDomain> findAllUser(int pageNum, int pageSize) {
            //将参数传给这个方法就可以实现物理分页了,非常简单。
            PageHelper.startPage(pageNum, pageSize);
            List<UserDomain> userDomains = userDao.selectUsers();
            PageInfo result = new PageInfo(userDomains);
            return result;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    UserController.java

    package com.winterchen.controller;
    
    import com.github.pagehelper.PageHelper;
    import com.winterchen.model.UserDomain;
    import com.winterchen.service.user.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * Created by Administrator on 2017/8/16.
     */
    @Controller
    @RequestMapping(value = "/user")
    public class UserController {
    
        @Autowired
        private UserService userService;
    
        @ResponseBody
        @PostMapping("/add")
        public int addUser(UserDomain user){
            return userService.addUser(user);
        }
    
        @ResponseBody
        @GetMapping("/all")
        public Object findAllUser(
                @RequestParam(name = "pageNum", required = false, defaultValue = "1")
                        int pageNum,
                @RequestParam(name = "pageSize", required = false, defaultValue = "10")
                        int pageSize){
            return userService.findAllUser(pageNum,pageSize);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    项目最终的结构

    项目结构

    到这里如果项目就成功搭建完成了,如果还是报错的话,请仔细看看配置,后面会给出源码地址,程序员就是要不断和bug进行斗争,加油。

    测试

    启动项目

    启动项目

    这样就表示启动成功了

    然后,开始测试吧,博主使用的是postMan,一个进行http请求的测试工具

    添加数据

    添加数据

    查询数据

    查询数据

    如果需要使用多数据源的请戳这里

    源码地址:

    https://github.com/WinterChenS/springboot2-mybatis-demo

  • 相关阅读:
    什么是API
    理解RESTful架构
    SDN的深入思考(1):SDN的核心本质到底是什么?
    SDN-数据控制分离
    浅析html+css+javascript之间的关系与作用
    python调用win32接口进行截图
    解决tensorflow问题:Your CPU supports instructions that this TensorFlow binary was not compiled to use:
    去除警告: FutureWarning: In future, it will be treated as `np.float64 == np.dtype(float).type`.
    Anaconda清华大学开源镜像
    python控制windows剪贴板,向剪贴板中写入图片
  • 原文地址:https://www.cnblogs.com/youqc/p/9336318.html
Copyright © 2011-2022 走看看