Spring Boot(四) Mybatis-MySql

0.准备数据库表


-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(11) DEFAULT NULL,
`gender` char(255) DEFAULT NULL,
`remark` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', '法师', '25', '男', null);
INSERT INTO `person` VALUES ('2', '锤子', '28', '男', null);
INSERT INTO `person` VALUES ('3', '土豆', '18', '女', null);
INSERT INTO `person` VALUES ('4', '甜心', '19', '女', null);

一.pom.xml文件添加maven依赖

 	    <!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<!--集成druid,使用连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.0</version>
</dependency>

注意:druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,据说是“目前最好的连接池”。

二.修改配置文件application.properties

server.port=9997
# 数据库连接配置
spring.datasource.name=spring-boot-mybatis-mysql
spring.datasource.url=jdbc:mysql://47.105.66.132:3307/demo
spring.datasource.username=root
spring.datasource.password=xingying
# mybatis 配置
mybatis.mapper-locations=classpath:mapping/*.xml
mybatis.type-aliases-package=spring.boot.mybatis.mysql.model
# 使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

三.MyBatis配置

  1. 在resources目录下面新建2个目录:generator和mapping,用于存放mybatis的配置文件和映射文件

  2. 在包spring.boot.mybatis.mysql下新建包mapper和model,用于存放mybatis生成的代码

  3. 在generator目录下,新建文件generatorConfig.xml,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="D:\Software\apache-maven-3.6.0-bin\repository\mysql\mysql-connector-java\8.0.17\mysql-connector-java-8.0.17.jar"/>
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/demo" userId="root" password="xingying">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成模型的包名和位置-->
<javaModelGenerator targetPackage="spring.boot.mybatis.mysql.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置-->
<sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="spring.boot.mybatis.mysql.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="person" domainObjectName="Person" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>修改pom添加mybatis的maven插件
  <!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile> ${basedir}/src/main/resources/generator/generatorConfig.xml
</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
  1. 添加并导入包后打开View->Tool Windows->Maven Projects可看到如下插件

  1. 双击运行,运行完后项目目录将会自动生成如下几个文件:

  1. 打开PersonMapper.xml就是Mybatis的映射文件,里面的内容其实就是Sql。

    注意:使用这个插件的时候,生成的的映射文件可能会有多个ResultMap,导致启动的时候会报错

    Result Maps collection already contains value for...

    这是因为数据库中可能有多个schema中都有同样名字的一张表。这个时候简单的办法就是打开这个文件删除掉多余的配置即可。

    打开PersonMapper

//自动生成的没有下面这个注解,如果在依赖注入的时候报错,记得加上这个注解
//@Component
public interface PersonMapper {
int deleteByPrimaryKey(Integer id); int insert(Person record); int insertSelective(Person record); Person selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Person record); int updateByPrimaryKey(Person record);
}
  1. 添加我们的service和controller
/*
Service 接口
*/
public interface IPerson {
int deleteByPrimaryKey(Integer id); int insert(Person record); int insertSelective(Person record); Person selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(Person record); int updateByPrimaryKey(Person record);
} /*
Person Service
*/
@Service
public class PersonImpl implements IPerson { /*
注入 personMapper
*/
@Autowired
private PersonMapper personMapper; @Override
public int deleteByPrimaryKey(Integer id) {
return personMapper.deleteByPrimaryKey(id);
} @Override
public int insert(Person record) {
return personMapper.insert(record);
} @Override
public int insertSelective(Person record) {
return personMapper.insertSelective(record);
} @Override
public Person selectByPrimaryKey(Integer id) {
return personMapper.selectByPrimaryKey(id);
} @Override
public int updateByPrimaryKeySelective(Person record) {
return personMapper.updateByPrimaryKeySelective(record);
} @Override
public int updateByPrimaryKey(Person record) {
return personMapper.updateByPrimaryKey(record);
}
} @RestController
@RequestMapping("/person")
public class PersonController { @Autowired
public IPerson person; @RequestMapping(method = RequestMethod.GET)
public Person get(@RequestParam Integer id) {
return person.selectByPrimaryKey(id);
}
}

注意:如果personMapper下方红线报错,是因为PersonMapper没有配置依赖注入扫描注解,可在类上方增加@Component注解。当然也可以修改idea的错误提示,降低Autowired检测的级别,将Severity的级别由之前的error改成warning或其它可以忽略的级别。

  1. 启动类新增注解@MapperScan("spring.boot.mybatis.mysql.mapper")

  2. 测试运行

四、更优雅的方式

    通过上面的过程,可以发现又出现了一系列的配置文件,如果我们想更优雅一点的编码,Mybatis为此也提供了,不需要配置文件的方式。注意,是更优雅一些不是更好一些,至于哪种方式更好要结合实际。

只需要在PersonMapper接口的方法上添加相应的SQL注解即可

package spring.boot.mybatis.mysql.annotate.mapper;

import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
import spring.boot.mybatis.mysql.annotate.model.Person; @Component
public interface PersonMapper { @Delete("DELETE FROM person WHERE id =#{id}")
int deleteByPrimaryKey(Integer id); @Insert("INSERT INTO person(name,age,gender,remark) VALUES(#{name}, #{age}, #{gender},#{remark})")
int insert(Person record); @Select("SELECT * FROM person WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "name", column = "name"),
@Result(property = "age", column = "age"),
@Result(property = "gender", column = "gender"),
@Result(property = "remark", column = "remark")
})
Person selectByPrimaryKey(Integer id); @Update("UPDATE person SET name=#{name},age=#{age} WHERE id =#{id}")
int updateByPrimaryKey(Person record);
}
  • @Select 是查询类的注解,所有的查询均使用这个
  • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
  • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
  • @Update 负责修改,也可以直接传入对象
  • @delete 负责删除

想要了解更多特性,可以参考Mybatis官网

五、踩坑记

  1. Service中注入personMapper报错

    PersonMapper类上加注解@Component

  2. 启动的时候报错

    Result Maps collection already contains value for...

    这是因为数据库中可能有多个schema中都有同样名字的一张表。这个时候简单的办法就是打开这个文件删除掉多余的配置即可。

示例代码

Spring Boot(四) Mybatis-MySql的更多相关文章

  1. Spring boot教程mybatis访问MySQL的尝试

    Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...

  2. Spring Boot 整合 Mybatis 实现 Druid 多数据源详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...

  3. Spring Boot整合Mybatis并完成CRUD操作

    MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...

  4. Spring Boot 整合MyBatis(1)

    这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...

  5. spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务

    文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...

  6. Spring Boot系列(三):Spring Boot整合Mybatis源码解析

    一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...

  7. 使用intelliJ创建 spring boot + gradle + mybatis站点

    Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...

  8. Spring boot整合Mybatis

    时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...

  9. spring boot 整合 mybatis 以及原理

    同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...

随机推荐

  1. CodeForces - 445B - DZY Loves Chemistry-转化问题

    传送门:http://codeforces.com/problemset/problem/445/B 参考:https://blog.csdn.net/littlewhite520/article/d ...

  2. cogs2823求组合数(lucas定理

    http://cogs.pro:8080/cogs/problem/problem.php?pid=vNQJJVUVj 再写个数学水题,其实lucas适用于m,n比较大而p比较小的情况. 题意:给出两 ...

  3. 2019 HZNU Winter Training Day 13 Comprehensive Training

    A.Jongmah   CodeForces-1110D 题意:你在玩一个数字游戏,有一堆写在瓦片上的数字,希望你能组成最多的三元组(三个数字相同,或顺子). 这题用到的方法是动态规划.f[i][j] ...

  4. poj 2253 Frogger(floyd变形)

    题目链接:http://poj.org/problem?id=1797 题意:给出两只青蛙的坐标A.B,和其他的n-2个坐标,任一两个坐标点间都是双向连通的.显然从A到B存在至少一条的通路,每一条通路 ...

  5. webpack多页面应用打包问题-新增页面打包JS影响旧有JS资源

    webpack多页面应用打包问题:如果在项目里新增页面,pages目录中插入一个页面文件,然后打包代码,在webpack3中,新增页面文件上方文件打包出来的JS文件内容全部会改变,点击查看比对,发现问 ...

  6. Postgresql-rman

    联机程序. 并且目标数据库必须处于归档模式. 支持在线全备, 增量备份, 归档备份 增量备份基于已经存在的一个全库备份 rman 本身使用pg_start_backup(), copy, pg_sto ...

  7. git 生成密钥

    1.本地安装好git: 2.桌面右键 Git Bash Here 打开git命令行: 3.ssh-keygen -t rsa -C "nideyouxiang@xxx.com"  ...

  8. MySQL5.7初始化后5种密码重置方法

    前言:由于好几次安装MySQL5.7后一直被重置密码所困扰,因此特意整理重置的方法 安装MySQL5.7 [root@node1 db]# ll 以下的rpm安装包可以随处下载 total 40235 ...

  9. Django ORM 知识点总结

    Query是如何工作的 Django QuerySet是懒执行的,只有访问到对应数据的时候,才会去访问数据库.另外如果你再次读取查询到的数据,将不会触发数据库的访问,而是直接从缓存获取. 比如 # 这 ...

  10. 增删改查——DBUtils

    利用QueryRunner类实现对数据库的增删改查操作,需要先导入jar包:commons-dbutils-1.6.利用QueryRunner类可以实现对数据步骤的简化. 1.添加 运用JDBC工具类 ...