当前位置:首页 > Java技术文章 > springboot整合通用Mapper简化单表操作详解

springboot整合通用Mapper单表操作实例

  • 发布时间:
  • 作者:码农之家原创
  • 点击:111

这篇文章主要知识点是关于springboot、Mapper、简化单表操作、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下java相关资源

Spring Boot 2企业应用实战

本书全面介绍了全新的Spring Boot 2和常用第三方框架整合开发相关的各方面知识。书中操作步骤细致,编程思路清晰,语言平实易懂。读者参考本书的架构,可以身临其境地感受企业实际项目开发。

查看详情

springboot整合通用Mapper简化单表操作详解

前言

数据库访问是web应用必不可少的部分。现今最常用的数据库ORM框架有Hibernate与Mybatis,Hibernate貌似在传统IT企业用的较多,而Mybatis则在互联网企业应用较多。通用Mapper 是一个基于Mybatis,将单表的增删改查通过通用方法实现,来减少SQL编写的开源框架,且也有对应开源的mapper-spring-boot-starter提供。我们在此基础上加了一些定制化的内容,以便达到更大程度的复用。

框架源码地址

Demo源码地址

在开源mapper-spring-boot-starter的基础上,增加了如下内容:

  1. 针对MySQL数据库与PostgreSQL数据库添加了一些Java类型与数据库类型的转换处理类,如将List、Map类型与MySQL数据库的json类型进行转换处理
  2. 对Domain、Mapper、Service、Controller各层进行了封装,将基本的增删改查功能在各层通用化
  3. 提供了基于druid连接池的自动配置
  4. 其它一些调整,如默认映射复杂类型属性(主要是List、Map类型,其它自定义类型需要自定义转换处理类),将枚举作为简单类型处理
  5. 提供了一个parent项目,将一些常用的框架进行集成,实际项目可继承parent简化依赖配置(持续更新完善)

该框架可用于实际基于springboot的项目,只需简单配置数据源,即可引入druid连接池及通用mapper的功能,以及各层基本的增删改查方法。

如何使用?

下文给出使用步骤,可参考示例

1. 框架Maven部署安装

下载框架源码后,在项目根路径下执行mvn clean install可安装到本地maven库。如果需要共享,且搭了Nexus私服,则在根路径pom.xml文件中添加distributionManagement配置,指定Nexus仓库分发地址,使用mvn clean deploy安装到远程maven仓库,如

<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>
http://ip:port/repository/maven-releases/
</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>
http://ip:port/repository/maven-snapshots/
</url>
</snapshotRepository>
</distributionManagement>

上述指定的repository需要在maven的全部配置文件settings.xml中有对应账号配置(id需要一一对应),如

<servers>
<server>
<id>nexus-snapshots</id>
<username>admin</username>
<password>xxx</password>
</server>
<server>
<id>nexus-releases</id>
<username>admin</username>
<password>xxx</password>
</server>
</servers>

2. pom.xml配置

项目中引入该数据库框架有三种方式:

  1. 直接引入 cn.jboost.springboot:tkmapper-spring-boot-starter(没有连接池)
  2. 直接引入 cn.jboost.springboot:druid-spring-boot-starter(druid连接池支持)
  3. 项目继承 cn.jboost.springboot:spring-boot-parent(使用的是druid连接池)

三种方式的pom.xml配置如下

#第一种方式
<dependency>
<groupId>cn.jboost.springboot</groupId>
<artifactId>tkmapper-spring-boot-starter</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>

#第二种方式
<dependency>
<groupId>cn.jboost.springboot</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>

#第三种方式
<parent>
<groupId>cn.jboost.springboot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>1.2-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

根据情况引入mysql或postgresql的驱动依赖(其它数据库暂未做类型转换支持,未作测试)

3. 配置数据源

如果使用druid连接池,则在application.yml配置文件中,加入如下数据源配置(推荐)

spring:
datasource:
druid:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
username: root
password:
# 自定义配置
initialSize: 2 # 初始化大小
minIdle: 1 # 最小连接
maxActive: 5 # 最大连接
druidServletSettings:
allow: 127.0.0.1
deny:
loginUsername: admin
loginPassword: Passw0rd
resetEnable: true
druidFilterSettings:
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
maxWait: 60000 # 配置获取连接等待超时的时间
timeBetweenEvictionRunsMillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒
validationQuery: SELECT 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true # 打开PSCache,并且指定每个连接上PSCache的大小
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat #,wall(添加wall代码里不能直接拼接sql,druid有sql注入校验) # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
useGlobalDataSourceStat: true # 合并多个DruidDataSource的监控数据

如果不使用连接池,则配置相对简单,如下

spring:
datasource:
url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
username: root
password:
driver-class-name: com.mysql.jdbc.Driver

4. 定义相应domain,mapper,service,controller各层对象

以demo为例(demo数据库脚本见resources/schema.sql),domain定义一个User类,

@Table(name = "user")
@Getter
@Setter
@ToString
public class User extends AutoIncrementKeyBaseDomain<Integer> {
private String name;
@ColumnType(jdbcType = JdbcType.CHAR)
private Gender gender;
private List<String> favor;
private Map<String, String> address;
public enum Gender{
M,
F
}
}

需要添加@Table注解指定数据库表名,可通过继承AutoIncrementKeyBaseDomain来实现自增主键,或UUIDKeyBaseDomain来实现UUID主键,如果自定义其它类型主键,则继承BaseDomain。

该框架Service层通用方法实现BaseService只支持单列主键,不支持组合主键(也不建议使用组合主键)

框架默认对List、Map等复杂类型属性会映射到mysql的json类型或postgresql的jsonb类型,如果某个属性不需要映射,可添加@Transient注解;枚举类型需添加@ColumnType指定jdbcType。

dao层定义UserMapper,

@Repository
public interface UserMapper extends BaseMapper<User> {
}

BaseMapper默认实现了单表的增删改查及批量插入等功能,如需定义复杂查询,可在该接口中定义,然后通过mapper xml文件编写实现。

service层定义 UserService,继承了BaseService的通用功能(具体可查看源码),同样可在该类中自定义方法

@Service
public class UserService extends BaseService<Integer, User> {
@Transactional
public void createWithTransaction(User user){
create(user);
//用于测试事务
throw new RuntimeException("抛出异常,让前面的数据库操作回滚");
}
}

controller层定义 UserController,继承了BaseController的通用接口(具体可查看源码)

@RestController
@RequestMapping("/user")
public class UserController extends BaseController<Integer, User> {
}

如上,只需要定义各层对应的接口或类,继承基础接口或类,便完成了用户基本的增删改查功能,不需要写一行具体的实现代码。

5. 测试、运行

示例中提供了两个新建用户的单元测试,参考SpringbootTkmapperApplicationTests类

运行,在主类上直接运行,然后浏览器里打开http://localhost:8080/user 则可列出单元测试中创建的用户(其它接口参考BaseController实现)

6. 总结

本文介绍框架基于tk.mybatis:mapper-spring-boot-starter做了一些自定义扩展,以更大程度地实现复用。可用于实际项目开发。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于Java的全部知识点内容总结,大家还可以在下方相关文章里找到Java实现快速排序原理分析、 java图形界面编程的代码详、 Java文件和base64流相互转换、 等java文章进一步学习,感谢大家的阅读和支持。

上一篇:Java封装器的实例用法讲解

下一篇:Spring Boot构建优雅的RESTful接口过程知识点总结

展开 +

收起 -

springboot实例 相关内容
SpringBoot揭秘:快速构建微服务体系

《SpringBoot揭秘:快速构建微服务体系》 以微服务的基本概念介绍性开篇, 逐步引出Java平台下打造微服务的利器SpringBoot微框架,从SpringBoot微框架的出身和源头,循序渐进,一步步为大家剖析

查看详情
一步一步学Spring Boot 2

本书主要内容包括Spring Boot环境搭建、Spring Boot常用标签、Spring Boot集成Redis、数据库MySQL、Spring Data、日志Log4J、Thymeleaf模板引擎、ActiveMQ消息、MyBatis等流行技术,以及利用Spring Boot实现邮件发送、Quartz定时器、过滤器Filter和监听器Listener等。

查看详情
Spring Boot 企业级应用开发实战

《Spring Boot 企业级应用开发实战》 围绕如何整合以 Spring Boot 为核心的技术栈,来实现一个完整的企业级博客系统 NewStarBlog 而展开。该博客系统支持市面上博客系统的常见功能。读者朋友可以

查看详情
深入浅出Spring Boot 2.x

spring boot 2实战精髓 企业级应用开发实战 微服务实战指南 结合主流持久层框架MyBatis 讲述企业级Spring Boot开发要点 赠送作者讲解的部分配套视频课程

查看详情
Spring Boot+Vue全栈开发实战

传统的JavaEE开发效率低下、配置臃肿、调试不便,严重制约了程序员的生产力。Spring Boot致力于简化开发配置,并为企业级开发提供一系列非业务性功能;而Vue则采用数据驱动视图的方式将程序

查看详情
微服务实战(Dubbox+Spring Boot+Docker)

在这个凡事皆互联的时代,越来越多的人和物成为互联网上的节点,不断扩充着互联网这张大网的边界。节点即价值,更多的节点意味着更大的价值。

查看详情
Spring Boot 2精髓-从构建小系统到架构分布式大系统

这本书系统介绍了Spring Boot 2的主要技术,涵盖Spring Boot框架、Spring MVC、视图技术、数据库访问技术,并且介绍多环境部署、自动装配、单元测试等高级特性,介绍如何平滑地用Spring Boot实现分布式架构等

查看详情
微服务架构实战:基于Spring Boot、Spring Cloud、Docker

1.根据SpringBoot、SpringCloud、Docker等技术性搭建微保障体系。 2.精减而详细的经典案例展现保持分布式架构的详细宏伟蓝图。 3.融合业务流程情景,根据全方位实例得出专用工具在搭建分布式架构

查看详情
springboot实例 学习笔记
网友NO.196121

springboot~ObjectMapper~dto到entity的自动赋值

实体与Dto自动赋值 在开发的过程中,实体之间相互赋值是很正常的事,但是我们一般的方法都通过set和get方法来进行的,如果要赋值的字段少那还行,但是需要赋值的字段超过10个,那就是个灾难,你会看到整屏代码中全是set和get方法。 两个实体属性字段几乎完全相同 两个字体有部分字段相同 源实体只有部分字段赋值,目标实体有完整的值 第一种情况 对于第1点来说,我们用到最多的就是entity和dto之间的转换了,这个我们可以使用Spring的工具类BeanUtils来解决,这里要注意的一点是,==第一个参数是源,第二个参数是目标==。 import org.springframework.beans.BeanUtils;BeanUtils.copyProperties(origin, target); 第二种情况 但是对于第2点来说,就没有那么简单了,再使用BeanUtils已经不能满足我们的需要了。 我们可以使用jackson的ObjectMapper import com.fasterxml.jackson.databind.Deseri……

网友NO.231499

Spring Boot集成MyBatis实现通用Mapper的配置及使用

什么是通用Mapper 通用Mapper就是为了解决单表增删改查,基于Mybatis的插件。开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法。 关于MyBatis,大部分人都很熟悉。MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 不管是DDD(Domain Driven Design,领域驱动建模)还是分层架构的风格,都会涉及到对数据库持久层的操作,本文将会讲解Spring Boot集成MyBatis如何实现通用Mapper。 Spring Boot集成MyBatis 引入依赖 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId/dependencydepend……

网友NO.296061

Mybatis MapperScannerConfigurer自动扫描Mapper接口生成代理注入到Spring的方法

前言 Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring Mybatis在与Spring集成的时候可以配置 MapperFactoryBean来生成Mapper接口的代理。 例如: bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" property name="mapperInterface" value="com.bijian.study.dao" / property name="sqlSessionFactory" ref="sqlSessionFactory" //bean MapperFactoryBean创建的代理类实现了 UserMapper 接口,并且注入到应用程序中。 因为代理创建在运行时环境中(Runtime,译者注) ,那么指定的映射器必须是一个接口,而 不是一个具体的实现类。 上面的配置有一个很大的缺点,就是系统有很多的配置文件时 全部需要手动编写,所以上述的方式已经很用了。 没有必要在 Spring 的 XML 配置文件中注册所有的映射器。相反,你可以使用一个 MapperScannerConfigurer,它 将 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创……

<
1
>

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757