1 版本说明

  springboot:2.0

  jdk:1.8

  

2 创建springBoot项目

  创建项目时勾选必要web,MySQL,mybatis相关依赖

  创建完成后再pom文件中添加自动部署、lombok相关依赖

  2.1 编写测试类

    技巧01:项目创建成功后先将mybatis和mysql相关的jar注释掉,在到控制层中创建一个简单的测试类来确认项目是否创建成功

package cn.test.demo.mybatis_demo02.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @author 王杨帅
* @create 2018-04-08 7:53
* @desc 控制层测试类
**/
@RestController
@RequestMapping(value = "/test")
public class TestController { @GetMapping(value = "/test01")
public String test01() {
return "HELLO BOY";
}
}

  2.2 配置文件信息

server.port=9999
server.servlet.path=/dev jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/testdemo?useUnicode=true&characterEncoding=UTF-8&&useSSL=false
jdbc.username=root
jdbc.password=root mabatis_config_file=mybatis-config.xml
mapper_path=/mapper/**.xml
entity_package=cn.test.demo.mybatis_demo02.entity

3 创建数据库

  根据springboot的配置信息,创建一个数据库;并在数据库中创建一个表

  技巧01:必须在springboot配置文件中配置的那个数据库中进行数据表的创建

/*
Navicat MySQL Data Transfer Source Server : mysql5.4
Source Server Version : 50540
Source Host : localhost:3306
Source Database : testdemo Target Server Type : MYSQL
Target Server Version : 50540
File Encoding : 65001 Date: 2018-04-08 13:33:08
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for `tb_area`
-- ----------------------------
DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
`area_id` int(2) NOT NULL AUTO_INCREMENT,
`area_name` varchar(200) NOT NULL,
`priority` int(2) NOT NULL DEFAULT '',
`create_time` datetime NOT NULL,
`last_edit_time` datetime NOT NULL,
PRIMARY KEY (`area_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; -- ----------------------------
-- Records of tb_area
-- ----------------------------
INSERT INTO `tb_area` VALUES ('', '东苑', '', '2018-03-07 08:50:37', '2018-04-08 13:28:58');
INSERT INTO `tb_area` VALUES ('', '南苑', '', '2018-04-08 09:44:48', '2018-04-08 09:44:48');

4 创建实体类

  技巧01:可以利用mybatis提供的生成器来自动生成entity、dao、xml、service、controller对应的代码,具体步骤请参见上一篇博文

  技巧02:在编写代码时可以开启代码提示

    

package cn.test.demo.mybatis_demo02.entity;

import java.util.Date;

/**
* @author 王杨帅
* @create 2018-04-08 8:40
* @desc
**/
public class Area {
// @TableId(value="area_id", type= IdType.AUTO)
private Integer areaId;
// @TableField("area_name")
private String areaName;
private Integer priority;
// @TableField("create_time")
private Date createTime;
// @TableField("last_edit_time")
private Date lastEditTime; public Integer getAreaId() {
return areaId;
} public void setAreaId(Integer areaId) {
this.areaId = areaId;
} public String getAreaName() {
return areaName;
} public void setAreaName(String areaName) {
this.areaName = areaName;
} public Integer getPriority() {
return priority;
} public void setPriority(Integer priority) {
this.priority = priority;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Date getLastEditTime() {
return lastEditTime;
} public void setLastEditTime(Date lastEditTime) {
this.lastEditTime = lastEditTime;
} @Override
public String toString() {
return "Area{" +
"areaId=" + areaId +
", areaName='" + areaName + '\'' +
", priority=" + priority +
", createTime=" + createTime +
", lastEditTime=" + lastEditTime +
'}';
}
}

  

5 配置部分

  5.1 POM配置

    保证pom.xml文件中有mybatis、mysql、mysql驱动这三个对应的依赖

        <!--mysql数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>

  5.2 mybatis相关配置

    在ersources文件夹中创建一个mybatis-config.xml文件用来mybatis相关的配置

    技巧01:在项目启动的时候会自动加载resources中的文件进行全局的配置,所有mybatis的配置文件也会被加载

    5.2.1 <setting name="useGeneratedKeys" value="true"/>

      开启JDBC的getGeneratedKeys获取数据库自增主键,即:当我们新增一条数据时会自动设置主键值

    5.2.2 <setting name="useColumnLabel" value="ture" />

      使用列标签替换列别名

    5.2.3 <setting name="mapUnderscoreToCamelCase" value="true" />

      开启驼峰转换,即:数据库中的字段名全部是小写和下划线组成,实体类中的属性全部使用驼峰原则时他们之间就会是一一对应的关系

<?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>
<settings>
<!--使用JDBC的getGeneratedKeys获取数据库自增主键-->
<setting name="useGeneratedKeys" value="true"/>
<!--使用列标签替换列别名-->
<setting name="useColumnLabel" value="ture" />
<!--开启驼峰转换-->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>

  5.3 DataSource配置和SqlSessionFactory配置

    由于我们使用c3p0作为数据库连接池,所以我们在配置DataSource直接对成c3p0的连接信息进行配置即可

    5.3.1 创建一个DataSourceConfiguration类来配置DataSource

      注意:类名可以随便取

      技巧01:在启动类同一级别或启动类下面级别的地方创建一个config包来存放java配置类

        

      技巧02:java配置类需要在类上添加@Configuration注解来指明该类是一个配置类

      技巧03:DataSourceConfiguration配置类说明

        》生成一个DataSource实例并注入到Bean容器中

          技巧01:向数据库连接信息,我们可以把它放到springboot的全局配置文件中去,然后在需要用到的地方通过@Value注解来获取获取,这样就可以做到一改全改的作用  

   

          技巧02:DataSource配置类上还需要利用@MapperScan注解来配置mapper映射器的扫描路径,例如:

@MapperScan("cn.test.demo.mybatis_demo02.dao") // mapper映射器的扫描路径

          

package cn.test.demo.mybatis_demo02.config.dao;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.CommonDataSource;
import java.beans.PropertyVetoException; /**
* @author 王杨帅
* @create 2018-04-08 8:09
* @desc DataSource配置
**/
@Configuration
@MapperScan("cn.test.demo.mybatis_demo02.dao") // mapper映射器的扫描路径
public class DataSourceConfiguration { @Value("${jdbc.driver}")
private String jdbcDriver;
@Value("${jdbc.password}")
private String jdbcPassword;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.url}")
private String jdbcUrl; @Bean(name = "dataSource")
public ComboPooledDataSource createDataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(jdbcDriver);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUser(jdbcUsername);
dataSource.setPassword(jdbcPassword);
dataSource.setAutoCommitOnClose(false); // 关闭连接后不会自动进行事务提交
return dataSource;
}
}

    5.3.2 创建一个crateSqlSessionFactoryBean类来配置SqlSessionFactory

      注意:类名可以随便取

      技巧01:java配置类需要在类上添加@Configuration注解来指明该类是一个配置类

      技巧02:在配置SqlSessionFactoryBean时需要用到DataSrouce实例,所以需要在配置SqlSessionFactoryBean的配置类依赖注入DataSrouce实例,例如:

    @Autowired
@Qualifier("dataSource")
private DataSource dataSource;

      技巧03:配置说明

        》SqlSessionFactoryBean并注入到Bean容器中

          

package cn.test.demo.mybatis_demo02.config.dao;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import javax.sql.DataSource;
import java.io.IOException; /**
* @author 王杨帅
* @create 2018-04-08 8:22
* @desc SessionFactory配置类
**/
@Configuration
//@MapperScan
public class SessionFactoryConfiguration {
@Value("${mabatis_config_file}")
private String mybatisConfigFilePath;
@Value("${mapper_path}")
private String mapperPath;
@Value("${entity_package}")
private String entityPackage; @Autowired
@Qualifier("dataSource")
private DataSource dataSource; @Bean(name = "sqlSessionFactory")
public SqlSessionFactoryBean crateSqlSessionFactoryBean() throws IOException {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); // 创建SqlSessionFactoryBean实例
sqlSessionFactoryBean.setConfigLocation(new ClassPathResource(mybatisConfigFilePath)); // 扫描mybatis配置文件 // 设置mapper映射器对应的XML文件的扫描路径
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
String packageSearchPath = PathMatchingResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + mapperPath;
sqlSessionFactoryBean.setMapperLocations(resolver.getResources(packageSearchPath)); // 设置数据库连接信息
sqlSessionFactoryBean.setDataSource(dataSource); // 设置实体类扫描路径
sqlSessionFactoryBean.setTypeAliasesPackage(entityPackage);
return sqlSessionFactoryBean;
} }

        》将扫描路径配置到springboot的全局配置配置文件中,然后利用@Value去获取即可,这样既可以实现一改全改的效果;例如:

        

      

        》@Autowired进行依赖注入的时候可以利用@Qualifier指定名字,例如:   

    @Autowired
@Qualifier("dataSource")
private DataSource dataSource;

6 创建Dao层代码

  Dao层在使用mybatis实现时也叫作Mapper映射器,其实Mapper映射器就是一个接口而已

package cn.test.demo.mybatis_demo02.dao;

import cn.test.demo.mybatis_demo02.entity.Area;
import com.sun.applet2.preloader.event.InitEvent; import java.util.List; /**
* @author 王杨帅
* @create 2018-04-08 8:42
* @desc
**/
public interface AreaDao {
List<Area> queryArea();
Area queryById(Integer areaId);
Integer insertArea(Area area);
Integer updateArea(Area area);
Integer deleteArea(Integer areaId);
}

7 创建XML文件代码

  一个XML文件和一个Mapper映射器对应,具体这么对应请参见mybatis先关博文

<?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="cn.test.demo.mybatis_demo02.dao.AreaDao"> <!-- 通用查询映射结果 -->
<!--<resultMap id="BaseResultMap" type="org.ibase4j.entity.TbArea">-->
<!--<id column="area_id" property="areaId" />-->
<!--<result column="area_name" property="areaName" />-->
<!--<result column="priority" property="priority" />-->
<!--<result column="create_time" property="createTime" />-->
<!--<result column="last_edit_time" property="lastEditTime" />-->
<!--</resultMap>--> <select id="queryArea" resultType="cn.test.demo.mybatis_demo02.entity.Area">
SELECT
*
FROM
tb_area
ORDER BY
priority
DESC
</select> <select id="queryById" resultType="cn.test.demo.mybatis_demo02.entity.Area">
SELECT
*
FROM
tb_area
WHERE
area_id = #{areaId}
</select> <insert id="insertArea"
useGeneratedKeys="true" keyProperty="areaId" keyColumn="area_id"
parameterType="cn.test.demo.mybatis_demo02.entity.Area">
INSERT INTO
tb_area(area_name, priority, create_time, last_edit_time)
VALUES
(#{areaName}, #{priority}, #{createTime}, #{lastEditTime})
</insert> <update id="updateArea" parameterType="cn.test.demo.mybatis_demo02.entity.Area">
UPDATE tb_area
<set>
<if test="areaName!=null">area_name=#{areaName},</if>
<if test="priority!=null">priority=#{priority},</if>
<if test="lastEditTime!=null">last_edit_time=#{lastEditTime}</if>
</set>
WHERE
area_id = #{areaId}
</update> <delete id="deleteArea">
DELETE FROM
tb_area
WHERE
area_id = #{areaId}
</delete> </mapper>

8 创建Dao层测试类

  坑01:在测试类中进行依赖注入时可能会报错,报错信息为:找不到相关的Bean

  原因:IDEA是一个比较智能的编辑器,所以在进行依赖注入的时候就会检查需要注入的Bean在容器中是否存在,如果不存在就会报出这样的错误;但是由于IDEA的该功能还不够完善所以即使Bean容器有对应的Bean也会报出找不到相关Bean的错误

  解决办法:将IDEA这个功能的报错级别调低,调成warning即可,例如:

    

package cn.test.demo.mybatis_demo02.dao;

import cn.test.demo.mybatis_demo02.entity.Area;
import lombok.extern.slf4j.Slf4j;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import java.util.Date;
import java.util.List; import static org.junit.Assert.*; @RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class AreaDaoTest { @Autowired
private AreaDao areaDao; @Test
public void queryArea() throws Exception {
List<Area> areaList = areaDao.queryArea();
// assertEquals(1, areaList.size());
log.info("获取到的数据为:{}", areaList);
} @Test
public void queryById() throws Exception {
Area area = areaDao.queryById(1);
log.info("获取到的数据为:{}",area.toString());
} @Test
// @Ignore
public void insertArea() throws Exception {
Area area = new Area();
area.setAreaName("南苑");
area.setPriority(1);
area.setCreateTime(new Date());
area.setLastEditTime(new Date());
Integer result = areaDao.insertArea(area);
log.info("插入完成的数据为:{}", result);
} @Test
public void updateArea() throws Exception {
Area area = new Area();
area.setAreaName("东苑");
area.setLastEditTime(new Date());
area.setAreaId(1);
Integer result = areaDao.updateArea(area);
log.info("更新完成后得到的结果为:{}", result);
} @Test
public void deleteArea() throws Exception {
} }

9 SpringBoot集成mybatis脚手架

  点击前往

  

·下面是我的公众号二维码,欢迎关注·

尋渝記

微信号:xyj_fury

SpringBoot14 SpringBoot整合mybatis的更多相关文章

  1. SpringBoot整合Mybatis之项目结构、数据源

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  2. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

  3. SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]

    SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...

  4. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)

    这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...

  5. springboot整合mybatis出现的一些问题

    springboot整合mybatis非常非常的简单,简直简单到发指.但是也有一些坑,这里我会详细的指出会遇到什么问题,并且这些配置的作用 整合mybatis,无疑需要mapper文件,实体类,dao ...

  6. springBoot整合mybatis、jsp 或 HTML

    springBoot整合mybatis.jsp Spring Boot的主要优点: 1:  为所有Spring开发者更快的入门: 2:  开箱即用,提供各种默认配置来简化项目配置: 3:  内嵌式容器 ...

  7. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)

    1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...

  8. SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

    接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...

  9. SpringBoot整合Mybatis完整详细版

    记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...

随机推荐

  1. angular路由详解五(辅助路由)

    在HTML文件中 //主路由 <router-outlet></router-outlet> //辅助路由 <router-outlet  name="aux& ...

  2. windows下 python3.5+tensorflow 安装

    个人随笔,备忘参考 首先最近的tensorflow 对python3.5.x友好,我先装了Python3.6,查其他的一些博客说出现问题,后来重装3.5.0.下载用迅雷,超快. 安装比较简单,官网下载 ...

  3. css样式加载顺序

    css样式加载顺序: A: id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式 B: 如果要让某个样式的优先级变高,可以使用!important来指定: .clas ...

  4. springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法

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

  5. Windows cmd命令反斜杠问题

    在Windows的终端输入命令的时候,如果在命令中存在斜杠就无法执行,因为它只支持反斜杠,而在Unix系统中是支持斜杠的,这是两者的区别.所以在Windows终端下执行命令需要注意斜杠问题

  6. WP-player——WordPress的一款好用的音乐插件

    作者的主页:http://webjyh.com/wp-player/ 安装:在WordPress后台搜索安装即可,或者去作者的主页下载安装. 使用方法:这个插件是通过短代码调用的,安装好插件之后便可以 ...

  7. Linux中安装字体

    Linux中安装字体 查看系统中的字体 fc-list 查看系统中的中文字体 fc-list :lang=zh将然后将字体文件拷贝到/usr/share/fonts/中 cp aa.ttl /usr/ ...

  8. 冒泡排序及优化(Java实现)

    向大端冒泡 public class BubbleSort { public static <T extends Comparable<? super T>> void sor ...

  9. 神奇的Python

    不断学习新的知识,不断掌新的技能是一件非常有趣的事情,其实Python在我学习这门课之前从没听过,刚上第一节课老师给我们讲了一个它的应用比如可以筛选单词,定时放歌等,虽然感觉自己还没有真正理解这门课程 ...

  10. Mycat 分片规则详解--日期范围 hash 分片

    实现方式:其思想和范围取模分片一样,由于日期取模会出现数据热点问题,所以先根据日期分组,再根据时间 hash 使得短期数据分布跟均匀. 优点:避免扩容时的数据迁移,可以在一定程度上避免范围分片的热点问 ...