您好,欢迎访问一九零五行业门户网

springboot中如何通过整合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配置
项目中引入该数据库框架有三种方式:
直接引入 cn.jboost.springboot:tkmapper-spring-boot-starter(没有连接池)
直接引入 cn.jboost.springboot:druid-spring-boot-starter(druid连接池支持)
项目继承 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.driverurl: jdbc:mysql://localhost:3306/test?autoreconnect=true&useunicode=true&characterencoding=utf-8username: rootpassword:# 自定义配置initialsize: 2 # 初始化大小minidle: 1 # 最小连接maxactive: 5 # 最大连接druidservletsettings:allow: 127.0.0.1deny:loginusername: adminloginpassword: passw0rdresetenable: truedruidfiltersettings:exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'maxwait: 60000 # 配置获取连接等待超时的时间timebetweenevictionrunsmillis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒minevictableidletimemillis: 300000 # 配置一个连接在池中最小生存的时间,单位是毫秒validationquery: select 'x'testwhileidle: truetestonborrow: falsetestonreturn: falsepoolpreparedstatements: true # 打开pscache,并且指定每个连接上pscache的大小maxpoolpreparedstatementperconnectionsize: 20filters: 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-8username: rootpassword:driver-class-name: com.mysql.jdbc.driver
4. 定义相应domain,mapper,service,controller各层对象
以demo为例(demo数据库脚本见resources/schema.sql),domain定义一个user类,
@table(name = user)@getter@setter@tostringpublic 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,
@repositorypublic interface usermapper extends basemapper<user> {}
basemapper默认实现了单表的增删改查及批量插入等功能,如需定义复杂查询,可在该接口中定义,然后通过mapper xml文件编写实现。
service层定义 userservice,继承了baseservice的通用功能(具体可查看源码),同样可在该类中自定义方法
@servicepublic class userservice extends baseservice<integer, user> {@transactionalpublic 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实现)
以上就是springboot中如何通过整合mapper实现单表操作的详细内容。
其它类似信息

推荐信息