SpringBoot14 SpringBoot整合mybatis
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的更多相关文章
- SpringBoot整合Mybatis之项目结构、数据源
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- SpringBoot整合Mybatis【非注解版】
接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 选择Spring Initializr,配置JDK版本 输入项目名 选择构建web项目所需的state ...
- 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 ...
- springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)
这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...
- springboot整合mybatis出现的一些问题
springboot整合mybatis非常非常的简单,简直简单到发指.但是也有一些坑,这里我会详细的指出会遇到什么问题,并且这些配置的作用 整合mybatis,无疑需要mapper文件,实体类,dao ...
- springBoot整合mybatis、jsp 或 HTML
springBoot整合mybatis.jsp Spring Boot的主要优点: 1: 为所有Spring开发者更快的入门: 2: 开箱即用,提供各种默认配置来简化项目配置: 3: 内嵌式容器 ...
- SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
1.概念:SpringBoot 整合 MyBatis 2.背景 SpringBoot 得到最终效果是一个简化到极致的 WEB 开发,但是只要牵扯到 WEB 开发,就绝对不可能缺少数据层操作,所有的开发 ...
- SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置
接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...
- SpringBoot整合Mybatis完整详细版
记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...
随机推荐
- Android消息机制解析
我们知道在编程时许多操作(如更新UI)需要在主线程中完成,而且,耗时操作(如网络连接)需要放在子线程中,否则会引起ANR.所以我们常使用Handler来实现线程间的消息传递,这里讨论的也就是Handl ...
- Open source operational tools
操作系统:Centos,Ubuntu,Redhat,suse,Freebsd 网站服务:nginx,apache,lighttpd,php,tomcat,resin 数据 库:MySQL,Mari ...
- threejs - uv 映射 简要
啥也不说先上way+code+demo; https://github.com/Thinkia/threejs_/blob/master/test/test2-%20uv/readme.md 如何理解 ...
- C语言最后一次作业--总结报告
1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当时选择计算机专业,是基于自己的高考分数和想出省的 ...
- 常用到的html页面布局和组件: 自己用
1. 用div当作圆 <div style="border: 1px solid blue;height: 100px; width: 100px; border-radius: 20 ...
- 走近webpack(0)--正文之前的故事
在前端工作的过程中,只要你接触过vue,angular,react,gulp就一定知道webpack或者听说过或者使用过webpack,但是或许你对webpack的使用方法并不是十分了解,只是会用写好 ...
- 开源一个定时任务调度器 webscheduler
在企业应用中定时任务调度的需求是必不可少的,比如定时同步数据,定时结转数据,定时检测异常等等.公司之前是在使用一款采用.net 开发的windows服务形式的定时程序,基本能满足需求,在一段时间的时候 ...
- 如何使用一次for循环得到数组中第二大的数和第三大的数
装载声明:http://blog.csdn.net/lxsmk9059/article/details/77920206?locationNum=1&fps=1 ,,,,,,,,}; ]; ] ...
- Java 小记 — RabbitMQ 的实践与思考
前言 本篇随笔将汇总一些我对消息队列 RabbitMQ 的认识,顺便谈谈其在高并发和秒杀系统中的具体应用. 1. 预备示例 想了下,还是先抛出一个简单示例,随后再根据其具体应用场景进行扩展,我觉得这样 ...
- linux下各种解压方法
linux下各种格式的压缩包的压缩.解压方法.但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善,谢谢! .tar 解包:tar xvf FileName.tar 打包:t ...