Springboot整合(2)——MyBatis整合
1. 配置
1. 1 在pom文件中添加依赖
<!-- mysql 驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Mybatis 包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Mybatis代码自动生成-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
1.2 在application.yml文件中增加数据库和mybatis的配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/knowledgeisland?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
mybatis:
##配置mapper.xml扫描路径
mapper-locations: classpath:mapper/*Mapper.xml,classpath:mapper/auto/*Mapper.xml
##配置实体类所在的包
type-aliases-package: tect.luoyu.ki.entity
1.3 在启动类Application里配置mapper接口的扫描路径
@MapperScan("tech.luoyu.ki.mapper")
2. 使用mybatis-generator生成代码
mybatis官方提供的代码生成工具可以为我们自动生成entity,mapper接口类以及mapper.xml。 本节将使用基类产生相应的代码。
2.1 创建表并插入一条数据
CREATE TABLE `sys_user` (
`id` varchar(36) NOT NULL COMMENT '主键uuid',
`userName` varchar(30) NOT NULL COMMENT '用户名',
`mobilephone` varchar(11) DEFAULT NULL COMMENT '联系电话',
`loginName` varchar(30) NOT NULL COMMENT '登录账号',
`loginPassword` varchar(50) NOT NULL COMMENT '登录密码',
`creater` varchar(36) NOT NULL COMMENT '创建人',
`createTime` datetime NOT NULL,
`updater` varchar(36) NOT NULL COMMENT '更新人',
`updateTime` datetime NOT NULL,
`dataStatus` tinyint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `sys_user` VALUES ('1', '风木羽', '18666666666', 'admin', 'admin', '1', '2018-01-01 10:52:00', '1', '2018-01-01 10:52:00', '1');
2.2 创建基类,基类包含以下6个基本属性(具体情况按需)。
private String id;
private String creater;
private Date createTime;
private String updater;
private Date updateTime;
private Byte dataStatus;
...getter,setter,toString,equals,hashCode...
注:创建基类的目的在于可以为所有的entity对象添加一些通用方法,如preInsert(插入前做预插入工作:生成ID,设置creater,设置createTime),preUpdate(更新前做预更新工作:生成ID,设置updater,设置updateTime)
publicvoid preInsert() {
setId(UUID.randomUUID().toString());
this.updater = "1";
this.creater = "1";
this.updateTime = new Date();
this.createTime = this.updateTime;
bytedataStatus = 1;
setDataStatus(dataStatus);
}
publicvoid preUpdate() {
this.updater = "1";
this.updateTime = new Date();
}
2.3 创建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>
<!-- 指定生成一组对象的环境 -->
<context id="mysql" targetRuntime="MyBatis3">
<!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;
一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖
-->
<property name="autoDelimitKeywords" value="false"/>
<!-- 生成的Java文件的编码 -->
<property name="javaFileEncoding" value="UTF-8"/>
<!-- 格式化java代码 -->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!-- 格式化XML代码 -->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>
<!-- beginningDelimiter和endingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 这个plugin是手写的一个用于生成hibernate校验注释的插件,会在下文说明其效果 -->
<plugin type="tech.luoyu.ki.generator.JSR303Plugin"></plugin>
<!-- generate entity时,生成serialVersionUID -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
<plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>
<plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>
<plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin"></plugin>
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是: false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/knowledgeisland"
userId="root"
password="root">
</jdbcConnection>
<!-- 定义Java类型解析器的属性 -->
<javaTypeResolver >
<!-- 指定MyBatis发生器是否应该强迫java.math的使用。BigDecimal十进制数值字段,而不是代替积分类型 -->
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 定义属性的Java模型生成器;包生成的类将被放置的地方;指定一个目标项目生成的对象 -->
<javaModelGenerator targetPackage="tech.luoyu.ki.entity.auto" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="immutable" value="false"/>
<property name="trimStrings" value="true" />
<!-- 设置entity的基类 -->
<property name="rootClass" value="tech.luoyu.ki.entity.BaseEntity"/>
</javaModelGenerator>
<!-- 定义SQL映射生成器的属性 -->
<sqlMapGenerator targetPackage="mapper.auto" targetProject="src/main/resources"><!-- 放置生成的SQL映射文件;指定生成SQL映射的目标项目 -->
<!-- 选择MGB是否根据基于目录和内省表来生成不同的Java包 -->
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- 定义 Java 客户端代码生成器的属性;放置生成的接口和实现类;指定生成接口和类的目标项目 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="tech.luoyu.ki.mapper.auto" targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 选择一个table来生成相关文件。必须要有table元素;tableName(必要):要生成对象的表名-->
<table schema="" tableName="sys_%">
<property name="useActualColumnNames" value="true"/>
</table>
</context>
</generatorConfiguration>
注:红色字体为重点和需要按实际分包修改的内容,注意包名需要与1.2和1.3配置的内容一致,本章末尾会给出当前已分包的结构目录截图
附:JSR303Plugin类的代码
package tech.luoyu.ki.generator;
import java.sql.Types;
import java.util.List;
import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Field;
import org.mybatis.generator.api.dom.java.TopLevelClass;
publicclass JSR303Plugin extends PluginAdapter {
@Override
publicboolean validate(List<String> warnings) {
returntrue;
}
@Override
publicboolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,
IntrospectedTable introspectedTable, ModelClassType modelClassType) {
if (true == introspectedColumn.isStringColumn()) {
if (false == introspectedColumn.isNullable()) {
topLevelClass.addImportedType("org.hibernate.validator.constraints.NotBlank");
field.addAnnotation("@NotBlank");
}
topLevelClass.addImportedType("javax.validation.constraints.Size");
field.addAnnotation(
"@Size(min = 0, max = " + introspectedColumn.getLength() + " , message = \"长度必须在{min}和{max}之间\")");
}
if (introspectedColumn.getJdbcType() == Types.INTEGER) {
if (false == introspectedColumn.isNullable()) {
topLevelClass.addImportedType("javax.validation.constraints.NotNull");
field.addAnnotation("@NotNull");
}
topLevelClass.addImportedType("javax.validation.constraints.Max");
field.addAnnotation("@Max(value=2147483647,message=\"最大值不能高于{value}\")");
topLevelClass.addImportedType("javax.validation.constraints.Min");
field.addAnnotation("@Min(value=-2147483648,message=\"最小值不能低于{value}\")");
}
returnsuper.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType);
}
}
2.4 编写生成代码类:Generator.java,该类里用到一个FileTool工具类,就是一个删除文件夹和删除文件的功能,此处就不贴出代码了
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package tech.luoyu.ki.generator;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
import tech.luoyu.ki.util.FileTool;
public class Generator {
public static void main(String[] args) {
generate();
}
@SuppressWarnings(value = "all")
private static void generate() {
String singleFileName = null;// single
// singleFileName = "SysUserMapper.xml";
// 1. 删除已经存在的mapper.xml
File file = new File(Generator.class.getResource("/").getFile());
File parentFile = file.getParentFile().getParentFile();
String autoMapperRelativePath = "src\\main\\resources\\mapper\\auto";
File autoMapperFile = new File(parentFile.getAbsolutePath() + File.separator + autoMapperRelativePath);
System.out.println(autoMapperFile.getAbsolutePath());
System.out.println(autoMapperFile.exists());
if (singleFileName == null) {
if (autoMapperFile.exists()) {
FileTool.delDir(autoMapperFile.getAbsolutePath(), true);
}
autoMapperFile.mkdirs();
} else {
autoMapperFile = new File(parentFile.getAbsolutePath() + File.separator + autoMapperRelativePath
+ File.separator + singleFileName);
if (autoMapperFile.exists()) {
FileTool.delFile(autoMapperFile.getAbsolutePath());
}
}
// 2. 重新生成mapper.xml
try {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
ConfigurationParser cp = new ConfigurationParser(warnings);
InputStream stream = Generator.class.getClassLoader().getResourceAsStream("generatorConfig.xml");
Configuration config = cp.parseConfiguration(stream);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
} catch (IOException ex) {
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
} catch (XMLParserException ex) {
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidConfigurationException ex) {
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
} catch (InterruptedException ex) {
Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("代码生成完毕");
}
}
2.5 运行generator类,可以看到entity(且为每个entity生成了example),mapper接口,mapper.xml都已经生成
生成的entity里红框内容就是上文中提到的JSR303Plugin插件产生的内容,JSR303Plugin插件内的内容可以自己定制,本文的代码只对String和int做了处理
3. 测试
3.1 在controller里注入mapper,并添加映射方法,这里只是简单测试,就省略service层,直接在controller里调用mapper了
@Resource
SysUserMapper userMapper;
@RequestMapping(value = "user/list")
public ModelAndView showUsers() {
Map<String, Object> model = new HashMap<String, Object>();
model.put("user", userMapper.selectByPrimaryKey("1"));
returnnew ModelAndView("user/list", model);
}
3.2 编写user/list.jsp
<body>
${user.userName }
${user.mobilePhone }
</body>
3.3 运行测试,正常
相关推荐
本项目"springboot+mybatis+bootstrap整合的简单框架"旨在提供一个快速开发的解决方案,将三个流行的开源技术——Spring Boot、MyBatis和Bootstrap融合在一起,以简化Web应用的构建过程。 Spring Boot是由Pivotal...
完成以上步骤后,你就成功地在 Eclipse 上使用 SpringBoot 搭建了一个整合 Mybatis 的项目,并与 MySQL 数据库进行了连接。对于初学者来说,这是一个很好的实践项目,可以帮助理解 SpringBoot 和 Mybatis 如何协同...
《SpringBoot整合Shiro与MyBatis的实战详解》 在现代Java开发中,SpringBoot以其简洁、快速的特性受到了广大开发者的喜爱。而Shiro和MyBatis作为两个非常重要的安全框架和持久层框架,它们的整合可以为Web应用提供...
2. **Mybatis 简介** Mybatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解进行配置和...
SpringBoot整合SSM框架是将Spring、SpringMVC和MyBatis这三大流行Java开发组件融合到一起,以便简化Web应用的开发流程。这个最简单的示例将带你一步步了解如何在SpringBoot项目中实现SSM集成,从而提高开发效率。 ...
在Java开发中,...总的来说,SpringBoot整合MyBatis使得数据库操作变得更加简单,通过自动配置和依赖注入,大大减少了开发者的工作量。无论是配置模式、注解模式还是混合模式,都能提供高效、便捷的持久层支持。
这是一个全面的外卖点餐系统开发项目,采用了当前流行的Java后端技术栈——SpringBoot、Mybatis-Plus,以及前端的Vue框架,同时结合了Redis内存数据库和Mysql关系型数据库来提升性能和用户体验。下面将详细阐述这些...
**SpringBoot整合MyBatis** SpringBoot与MyBatis的整合使得开发更加便捷。首先,我们需要在项目中引入MyBatis的SpringBoot起步依赖。然后,通过配置文件(application.yml或application.properties)设置数据源、...
在提供的描述中提到,可能使用到了MyBatis的扩展库——MyBatis Plus(BaTiSi)。MyBatis Plus提供了一些便捷的CRUD操作,可以减少开发者编写基础的SQL语句。例如,如果项目中包含`CURD_baomidou-master`这个文件,这...
《iadmin后端:SpringBoot、Shiro与MyBatis深度整合详解》 在现代的Web开发中,高效且灵活的框架集成对于构建强大的后台系统至关重要。本文将深入探讨一个基于Java的项目——"iadmin-backend",它巧妙地融合了...
首先,我们需要引入相应的依赖,如Struts2、MyBatis和它们的SpringBoot适配器。然后,配置Struts2的配置文件(struts.xml),定义Action和结果类型,接着配置MyBatis的配置文件(mybatis-config.xml)和Mapper文件。...
SpringBoot+mybatis-plus+VUE民宿管理系统后台-毕业设计 升级为mybatis-plus 加入启动页面类。 修改了一些VUE的其它问题。 本系列环境 环境 win11 工具 idea 2018 jdk 1.8 数据库 mysql5.5 maven 3.6.0 项目导入...
这是一个针对初学者设计的整合项目,它将四个关键的技术栈——SpringBoot、MyBatis、Thymeleaf和MySQL——融合在一起,通过注解的方式来简化开发流程。让我们逐一深入探讨这些技术及其在项目中的作用。 **...
本文将详细讲解如何使用MyBatis和Spring Boot整合实现多数据源,并重点介绍一种方法——AOP(面向切面编程)法。这种方法允许我们在运行时动态地切换数据源。 首先,我们需要理解Spring Boot的自动配置特性。Spring...
在这个“bookkeeping:周先生SpringBoot + Mybatis-plus + Vue整合小案例”中,我们可以学习到如何将三种流行的技术——SpringBoot、Mybatis-plus和Vue.js整合在一起,创建一个简单的会计记账应用。这个项目主要涵盖...
为了提高开发效率,MyBatis提供了一个实用的工具——MyBatis Generator(MBG),它可以自动生成Java模型类、Mapper接口和XML映射文件,极大地减少了手动编写这些重复性工作的时间。在这个压缩包"springboot_mybatis_...
三、SpringBoot整合Mybatis 整合SpringBoot和Mybatis,我们可以充分利用两者的优势,创建一个高效且易于维护的博客系统。主要步骤包括: 1. 添加依赖:在pom.xml中引入SpringBoot的starter-web和Mybatis的相关依赖...
总之,通过SpringBoot整合Mybatis并采用注解的方式,我们可以抛弃XML配置文件,实现更加简洁和高效的开发模式。同时,利用Mybatis的映射注解,可以轻松处理对象属性与数据库字段的映射问题,使代码更加整洁,降低...
### MyBatis与Spring整合详解 #### 一、前言 在现代软件开发中,尤其在Java企业级应用领域,Spring框架和MyBatis框架是非常重要的组成部分。Spring框架以其强大的控制反转(IoC)和面向切面编程(AOP)功能,极大...