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. 2-SAT 问题与解法小结

    2-SAT 问题与解法小结 这个算法十分的奇妙qwq... 将一类判定问题转换为图论问题,然后就很容易解决了. 本文有一些地方摘录了一下赵爽<2-SAT解法浅析> (侵删) 一些概念: \ ...

  2. 关于win系统下Anaconda与TensorFlow的安装相关事宜以及错误:ImportError: No module named 'tensorflow'的解决

    1.安装TensorFlow之前应该先安装Anaconda,不需要安装python,否则会出问题,我安装的版本是Anaconda3-4.2.0-Windows-x86_64,在这个链接上可以找到--h ...

  3. Geth 控制台使用及 Web3.js 使用实战

    在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3.Geth 控制台(REPL)实现了所有的web3 API及Admin API,使用好 Geth 就是必修课.结合Geth命令用法阅 ...

  4. 员工选票系统-java

    Yuangong.java package com.toupiao; public class Yuangong { private String name; private int piao; pu ...

  5. Ubuntu修改密码之后无法登录

    问题:Ubuntu修改密码之后无法登录,停留在登录界面,输入正确的密码之后,画面一闪又回到了登录界面. 解决:ctrl+alt_f1进入终端,输入用户名和密码,$cd /home/userXXX &a ...

  6. 归档日志空间满导致DB启动失败

    现象 登录失败 告警日志: 由此可知,归档日志空间已满 解决方式: 一.增大归档日志空间 1.启动数据库至nomount [oracle@CentOS ~]$ sqlplus / as sysdba ...

  7. business expressions(二)

    1,to give someone a heads up = to inform someone about something important ("heads up") be ...

  8. Greetings

    1,Common English Greetings Hey! Hey man! Hey girl! Hi. How's it going? How are you doing? What's up? ...

  9. 用C#语言编写:集合管理器

    static void Main(string[] args)        {            List<int> numbers = new List<int>(); ...

  10. 使用Bootatrap的心得

    使用Bootatrap的心得: 更新中... 在使用过一端时间的Bootstrap之后, 发现自己进入了使用误区,本来人家就为你提供好了样式丰富的各种样式,容器.但是我却在一边使用人家的样式,一边自己 ...