本项目使用的环境:

  • 开发工具:Intellij IDEA 2017.1.3
  • springboot: 1.5.6
  • jdk:1.8.0_161
  • maven:3.3.9

额外功能

  • PageHelper 分页插件
  • mybatis generator 自动生成代码插件

步骤:

1. 创建一个springboot项目:

2. 创建项目的文件结构以及jdk的版本

3. 选择项目所需要的依赖

然后点击finish

4. 看一下文件的结构:

5. 查看一下pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5.  
  6. <groupId>com.winter</groupId>
  7. <artifactId>springboot-mybatis-demo</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <packaging>jar</packaging>
  10.  
  11. <name>springboot-mybatis-demo</name>
  12. <description>Demo project for Spring Boot</description>
  13.  
  14. <parent>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-parent</artifactId>
  17. <version>1.5.6.RELEASE</version>
  18. <relativePath/> <!-- lookup parent from repository -->
  19. </parent>
  20.  
  21. <properties>
  22. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  23. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  24. <java.version>1.7</java.version>
  25. </properties>
  26.  
  27. <dependencies>
  28. <dependency>
  29. <groupId>org.mybatis.spring.boot</groupId>
  30. <artifactId>mybatis-spring-boot-starter</artifactId>
  31. <version>1.3.0</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  36. </dependency>
  37. <dependency>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-starter-web</artifactId>
  40. </dependency>
  41.  
  42. <dependency>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-starter-test</artifactId>
  45. <scope>test</scope>
  46. </dependency>
  47. <dependency>
  48. <groupId>mysql</groupId>
  49. <artifactId>mysql-connector-java</artifactId>
  50. <version>5.1.35</version>
  51. </dependency>
  52.  
  53. <dependency>
  54. <groupId>com.fasterxml.jackson.core</groupId>
  55. <artifactId>jackson-core</artifactId>
  56. </dependency>
  57. <dependency>
  58. <groupId>com.fasterxml.jackson.core</groupId>
  59. <artifactId>jackson-databind</artifactId>
  60. </dependency>
  61. <dependency>
  62. <groupId>com.fasterxml.jackson.datatype</groupId>
  63. <artifactId>jackson-datatype-joda</artifactId>
  64. </dependency>
  65. <dependency>
  66. <groupId>com.fasterxml.jackson.module</groupId>
  67. <artifactId>jackson-module-parameter-names</artifactId>
  68. </dependency>
  69. <!-- 分页插件 -->
  70. <dependency>
  71. <groupId>com.github.pagehelper</groupId>
  72. <artifactId>pagehelper-spring-boot-starter</artifactId>
  73. <version>1.1.2</version>
  74. </dependency>
  75. <!-- alibaba的druid数据库连接池 -->
  76. <dependency>
  77. <groupId>com.alibaba</groupId>
  78. <artifactId>druid-spring-boot-starter</artifactId>
  79. <version>1.1.0</version>
  80. </dependency>
  81. </dependencies>
  82.  
  83. <build>
  84. <plugins>
  85. <plugin>
  86. <groupId>org.springframework.boot</groupId>
  87. <artifactId>spring-boot-maven-plugin</artifactId>
  88. </plugin>
  89. <!-- mybatis generator 自动生成代码插件 -->
  90. <plugin>
  91. <groupId>org.mybatis.generator</groupId>
  92. <artifactId>mybatis-generator-maven-plugin</artifactId>
  93. <version>1.3.2</version>
  94. <configuration>
  95. <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
  96. <overwrite>true</overwrite>
  97. <verbose>true</verbose>
  98. </configuration>
  99. </plugin>
  100. </plugins>
  101. </build>
  102.  
  103. </project>

6. 项目不使用application.properties文件 而使用更加简洁的application.yml文件:

将原有的resource文件夹下的application.properties文件删除,创建一个新的application.yml配置文件,

文件的内容如下:

  1. server:
  2. port: 8080
  3.  
  4. spring:
  5. datasource:
  6. name: test
  7. url: jdbc:mysql://127.0.0.1:3306/depot
  8. username: root
  9. password: root
  10. # 使用druid数据源
  11. type: com.alibaba.druid.pool.DruidDataSource
  12. driver-class-name: com.mysql.jdbc.Driver
  13. filters: stat
  14. maxActive: 20
  15. initialSize: 1
  16. maxWait: 60000
  17. minIdle: 1
  18. timeBetweenEvictionRunsMillis: 60000
  19. minEvictableIdleTimeMillis: 300000
  20. validationQuery: select 'x'
  21. testWhileIdle: true
  22. testOnBorrow: false
  23. testOnReturn: false
  24. poolPreparedStatements: true
  25. maxOpenPreparedStatements: 20
  26.  
  27. ## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
  28. mybatis:
  29. mapper-locations: classpath:mapping/*.xml #注意:一定要对应mapper映射xml文件的所在路径
  30. type-aliases-package: com.winter.model # 注意:对应实体类的路径
  31.  
  32. #pagehelper分页插件
  33. pagehelper:
  34. helperDialect: mysql
  35. reasonable: true
  36. supportMethodsArguments: true
  37. params: count=countSql

7. 创建数据库:

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

8. 使用mybatis generator 自动生成代码:

  • 配置pom.xml中generator 插件所对应的配置文件 ${basedir}/src/main/resources/generator/generatorConfig.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
  7. <classPathEntry location="E:\developer\mybatis-generator-core-1.3.2\lib\mysql-connector-java-5.1.25-bin.jar"/>
  8. <context id="DB2Tables" targetRuntime="MyBatis3">
  9. <commentGenerator>
  10. <property name="suppressDate" value="true"/>
  11. <!-- 是否去除自动生成的注释 true:是 : false:否 -->
  12. <property name="suppressAllComments" value="true"/>
  13. </commentGenerator>
  14. <!--数据库链接URL,用户名、密码 -->
  15. <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/mytest" userId="root" password="root">
  16. </jdbcConnection>
  17. <javaTypeResolver>
  18. <property name="forceBigDecimals" value="false"/>
  19. </javaTypeResolver>
  20. <!-- 生成模型的包名和位置-->
  21. <javaModelGenerator targetPackage="com.winter.model" targetProject="src/main/java">
  22. <property name="enableSubPackages" value="true"/>
  23. <property name="trimStrings" value="true"/>
  24. </javaModelGenerator>
  25. <!-- 生成映射文件的包名和位置-->
  26. <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
  27. <property name="enableSubPackages" value="true"/>
  28. </sqlMapGenerator>
  29. <!-- 生成DAO的包名和位置-->
  30. <javaClientGenerator type="XMLMAPPER" targetPackage="com.winter.mapper" targetProject="src/main/java">
  31. <property name="enableSubPackages" value="true"/>
  32. </javaClientGenerator>
  33. <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
  34. <table tableName="t_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
  35. </context>
  36. </generatorConfiguration>
  • 点击run-Edit Configurations

  • 添加配置

  • 运行

注意!!!同一张表一定不要运行多次,因为mapper的映射文件中会生成多次的代码,导致报错,切记

最后生成的文件以及结构:

9. 生成的文件

UserMapper.java

  1. package com.winter.mapper;
  2.  
  3. import com.winter.model.User;
  4.  
  5. public interface UserMapper {
  6. int deleteByPrimaryKey(Integer userId);
  7.  
  8. int insert(User record);
  9.  
  10. int insertSelective(User record);
  11.  
  12. User selectByPrimaryKey(Integer userId);
  13.  
  14. int updateByPrimaryKeySelective(User record);
  15.  
  16. int updateByPrimaryKey(User record);
  17. //这个方式我自己加的
  18. List<User> selectAllUser();
  19. }

User.java

  1. package com.winter.model;
  2.  
  3. public class User {
  4. private Integer userId;
  5.  
  6. private String userName;
  7.  
  8. private String password;
  9.  
  10. private String phone;
  11.  
  12. public Integer getUserId() {
  13. return userId;
  14. }
  15.  
  16. public void setUserId(Integer userId) {
  17. this.userId = userId;
  18. }
  19.  
  20. public String getUserName() {
  21. return userName;
  22. }
  23.  
  24. public void setUserName(String userName) {
  25. this.userName = userName == null ? null : userName.trim();
  26. }
  27.  
  28. public String getPassword() {
  29. return password;
  30. }
  31.  
  32. public void setPassword(String password) {
  33. this.password = password == null ? null : password.trim();
  34. }
  35.  
  36. public String getPhone() {
  37. return phone;
  38. }
  39.  
  40. public void setPhone(String phone) {
  41. this.phone = phone == null ? null : phone.trim();
  42. }
  43. }

对于sql语句这种黄色的背景,真心是看不下去了(解决方案):

**UserMapper.xml **

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  3. <mapper namespace="com.winter.mapper.UserMapper" >
  4. <resultMap id="BaseResultMap" type="com.winter.model.User" >
  5. <id column="user_id" property="userId" jdbcType="INTEGER" />
  6. <result column="user_name" property="userName" jdbcType="VARCHAR" />
  7. <result column="password" property="password" jdbcType="VARCHAR" />
  8. <result column="phone" property="phone" jdbcType="VARCHAR" />
  9. </resultMap>
  10. <sql id="Base_Column_List" >
  11. user_id, user_name, password, phone
  12. </sql>
  13. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
  14. select
  15. <include refid="Base_Column_List" />
  16. from t_user
  17. where user_id = #{userId,jdbcType=INTEGER}
  18. </select>
  19. <!-- 这个方法是我自己加的 -->
  20. <select id="selectAllUser" resultMap="BaseResultMap">
  21. select
  22. <include refid="Base_Column_List" />
  23. from t_user
  24. </select>
  25. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
  26. delete from t_user
  27. where user_id = #{userId,jdbcType=INTEGER}
  28. </delete>
  29. <insert id="insert" parameterType="com.winter.model.User" >
  30. insert into t_user (user_id, user_name, password,
  31. phone)
  32. values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
  33. #{phone,jdbcType=VARCHAR})
  34. </insert>
  35. <insert id="insertSelective" parameterType="com.winter.model.User" >
  36. insert into t_user
  37. <trim prefix="(" suffix=")" suffixOverrides="," >
  38. <if test="userId != null" >
  39. user_id,
  40. </if>
  41. <if test="userName != null" >
  42. user_name,
  43. </if>
  44. <if test="password != null" >
  45. password,
  46. </if>
  47. <if test="phone != null" >
  48. phone,
  49. </if>
  50. </trim>
  51. <trim prefix="values (" suffix=")" suffixOverrides="," >
  52. <if test="userId != null" >
  53. #{userId,jdbcType=INTEGER},
  54. </if>
  55. <if test="userName != null" >
  56. #{userName,jdbcType=VARCHAR},
  57. </if>
  58. <if test="password != null" >
  59. #{password,jdbcType=VARCHAR},
  60. </if>
  61. <if test="phone != null" >
  62. #{phone,jdbcType=VARCHAR},
  63. </if>
  64. </trim>
  65. </insert>
  66. <update id="updateByPrimaryKeySelective" parameterType="com.winter.model.User" >
  67. update t_user
  68. <set >
  69. <if test="userName != null" >
  70. user_name = #{userName,jdbcType=VARCHAR},
  71. </if>
  72. <if test="password != null" >
  73. password = #{password,jdbcType=VARCHAR},
  74. </if>
  75. <if test="phone != null" >
  76. phone = #{phone,jdbcType=VARCHAR},
  77. </if>
  78. </set>
  79. where user_id = #{userId,jdbcType=INTEGER}
  80. </update>
  81. <update id="updateByPrimaryKey" parameterType="com.winter.model.User" >
  82. update t_user
  83. set user_name = #{userName,jdbcType=VARCHAR},
  84. password = #{password,jdbcType=VARCHAR},
  85. phone = #{phone,jdbcType=VARCHAR}
  86. where user_id = #{userId,jdbcType=INTEGER}
  87. </update>
  88. </mapper>

10. 打开类SpringbootMybatisDemoApplication.java,这个是springboot的启动类。我们需要添加点东西:

  1. package com.winter;
  2.  
  3. import org.mybatis.spring.annotation.MapperScan;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6.  
  7. @SpringBootApplication
  8. @MapperScan("com.winter.mapper")//将项目中对应的mapper类的路径加进来就可以了
  9. public class SpringbootMybatisDemoApplication {
  10.  
  11. public static void main(String[] args) {
  12. SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
  13. }
  14. }

注意:@MapperScan("com.winter.mapper")这个注解非常的关键,这个对应了项目中mapper(dao)所对应的包路径,很多同学就是这里忘了加导致异常的

11. 到这里所有的搭建工作都完成了,接下来就是测试的工作,没使用junit4进行测试:

首先看一下完成之后的文件的结构:

现在controller,service层的代码都写好:

UserController.java

  1. package com.winter.Controller;
  2.  
  3. import com.winter.model.User;
  4. import com.winter.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10.  
  11. /**
  12. * Created by Administrator on 2017/8/16.
  13. */
  14. @Controller
  15. @RequestMapping(value = "/user")
  16. public class UserController {
  17.  
  18. @Autowired
  19. private UserService userService;
  20.  
  21. @ResponseBody
  22. @RequestMapping(value = "/add", produces = {"application/json;charset=UTF-8"})
  23. public int addUser(User user){
  24. return userService.addUser(user);
  25. }
  26.  
  27. @ResponseBody
  28. @RequestMapping(value = "/all/{pageNum}/{pageSize}", produces = {"application/json;charset=UTF-8"})
  29. public Object findAllUser(@PathVariable("pageNum") int pageNum, @PathVariable("pageSize") int pageSize){
  30.  
  31. return userService.findAllUser(pageNum,pageSize);
  32. }
  33. }

UserService.java

  1. package com.winter.service;
  2.  
  3. import com.winter.model.User;
  4.  
  5. import java.util.List;
  6.  
  7. /**
  8. * Created by Administrator on 2017/8/16.
  9. */
  10. public interface UserService {
  11.  
  12. int addUser(User user);
  13.  
  14. List<User> findAllUser(int pageNum, int pageSize);
  15. }

UserServiceImpl.java

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

如果强迫症看不下去那个报错:(解决方法)

测试我使用了idea一个很用心的功能。

可以发http请求的插件

点击左侧的运行按钮就可以发送请求了;

如果返回值正确 说明你已经搭建成功了!!

ps:如果出现mapper注入不了的情况,请检查版本,当前博客的搭建方法只适合1.5.*版本的。

spring boot mybatis 整合教程的更多相关文章

  1. Spring boot Mybatis 整合(完整版)

    个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页.个人作品.个人博客) 朋友自制的springboot接口文档组件swagge ...

  2. Spring boot Mybatis 整合

    PS: 参考博客 PS: spring boot配置mybatis和事务管理 PS: Spring boot Mybatis 整合(完整版)   这篇博客里用到了怎样 生成 mybatis 插件来写程 ...

  3. Spring boot Mybatis 整合(注解版)

    之前写过一篇关于springboot 与 mybatis整合的博文,使用了一段时间spring-data-jpa,发现那种方式真的是太爽了,mybatis的xml的映射配置总觉得有点麻烦.接口定义和映 ...

  4. Spring boot Mybatis整合构建Rest服务(超细版)

     Springboot+ Mybatis+MySql整合构建Rest服务(涵盖增.删.改.查) 1.概要 1.1 为什么要使用Spring  boot? 1.1.1 简单方便.配置少.整合了大多数框架 ...

  5. Spring Boot Mybatis 使用教程

    Mybatis 在当下互联网开发环境,十分重要.本章主要讲述 Mybatis 如何使用. 从本系列开始,都需要用到 mysql 数据库 和其他一些参考的数据库.请准备相关环节.本章需要以下环境支撑: ...

  6. spring boot +mybatis 整合 连接数据库测试(从0到1)

    spring boot 整合mybatis 1.打开idea创建一个项目 2.在弹出的窗口中选择spring initializr(初始化项目),点击next 3.接下来填写group 与artifa ...

  7. Spring+SpringMVC+MyBatis整合教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. Spring Boot Mybatis整合

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 特 ...

  9. Spring Boot JPA 使用教程

    JPA 是 Spring Boot 官方推荐的数据库访问组件,其充分体现了面向对象编程思想,有点像 asp.net 的 EFCore.JPA 也是众多 ORM 的抽象. 从本系列开始,都需要用到 my ...

随机推荐

  1. Oozie分布式工作流——流控制

    最近又开始捅咕上oozie了,所以回头还是翻译一下oozie的文档.文档里面最重要就属这一章了--工作流定义. 一提到工作流,首先想到的应该是工作流都支持哪些工作依赖关系,比如串式的执行,或者一对多, ...

  2. AIX上解压缩.tar.Z, .tar.gz, .zip及.tgz

    在AIX上最常见的压缩文件就是.tar檔了,而除了tar文件以外,有时会遇到数据是用其它的压缩文件格式,所以偶顺手整理了一些常见的压缩文件格式,在AIX要怎么解压缩 : ·    .tar.Z fil ...

  3. Windows DIB文件操作具体解释-4.使用DIB Section

    前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB.可是这又遇到一个问题.假设我想操作DIB的数据的话,显然是不能使用DDB:一是由于DIB转DDB时发生了颜色转换.再就是DDB无法直接 ...

  4. ThreadLocal 简介 案例 源码分析 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Postgres空间地理类型POINT POLYGON实现附近的定位和电子围栏功能

    目录 需求和背景 安装插件postgis 点POINT类型和距离 表添加POINT类型 添加空间索引 插入点 两个点之间的距离 附近5公里内的点 最近的10个点 面多边形'POLYGON' 添加字段类 ...

  6. how to use boost program options

    From:  http://www.radmangames.com/programming/how-to-use-boost-program_options If it so happens that ...

  7. 微软BI 之SSIS 系列 - Merge, Merge Join, Union All 合并组件的使用以及Sort 排序组件同步异步的问题

    开篇介绍 SSIS Data Flow 中有几个组件可以实现不同数据源的数据合并功能,比如 Merger, Merge Join 和 Union All.它们的功能比较类似,同时也比较容易混淆,下面是 ...

  8. 微软BI 之SSAS 系列 - 多维数据集维度用法之二 事实维度(退化维度 Degenerate Dimension)

    这篇文章是基于上一篇 SSAS 系列 - 多维数据集维度用法之一 引用维度 Referenced Dimension 继续讲解多维数据集维度用法中的事实维度. 事实维度,顾名思义就是把事实表 Fact ...

  9. openjudge noi 买房子

    题目链接:http://noi.openjudge.cn/ch0105/16/ 总时间限制: 1000ms 内存限制: 65536kB 描述 某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平 ...

  10. 【AI】Exponential Stochastic Cellular Automata for Massively Parallel Inference - 大规模并行推理的指数随机元胞自动机

    [论文标题]Exponential Stochastic Cellular Automata for Massively Parallel Inference     (19th-ICAIS,PMLR ...