SpringBoot 构建ORM框架
目前常用的ORM框架有 Mybatis(batis)、MybatisPlus,Hibernate、Jpa等几个框架,今天就简单介绍一下搭建Mybatisplus框架的流程。
1.增加依赖
<dependencies><!-- 第一步:选择ORM框架,使用springboot整合mybatis-plus依赖包--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- 第二步:选择数据库驱动,这里是Mysql所以就选择Mysql的驱动,PG的就选择PG--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!-- 第三步(可选):数据库连接池,可以使用druid的连接池。springboot-jdbc已经默认依赖了Hikari的连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version></dependency></dependencies>
2.数据库实体模型
主要使用@TableName和@TableField,配置属性类和数据库表的对应关系
@TableName("userinfo")
@Data
public class UserInfo {@TableId(type = IdType.AUTO)private Integer id;@TableFieldprivate String name;private String usernum;private int sex;private Date createtime;private Date updatetime;
}
3.增加Mapper
方式1:BaseMapper
直接使用继承BaseMapper,然后使用注入的Mapper对象实例即可。
public interface IUserInfoMapper extends BaseMapper<UserInfo> {}
@AutowiredIUserInfoMapper iUserInfoMapper;@Testpublic void queryTest() {LambdaQueryWrapper<UserInfo> lambdaQueryWrapper = new LambdaQueryWrapper();lambdaQueryWrapper.eq(UserInfo::getId,1);List<UserInfo> list = iUserInfoMapper.selectList(lambdaQueryWrapper);System.out.println(list);}
方式2:IService
使用IService实现类,新建IUserInfoService 接口
public interface IUserInfoService extends IService<UserInfo> {void queryList();
}
实现IUserInfoServiceb 接口 ,并继承ServiceImpl
@Service
public class UserInfoServiceImpl extends ServiceImpl<IUserInfoMapper, UserInfo> implements IUserInfoService {public void queryList() {LambdaQueryChainWrapper<UserInfo> userWarpper = this.lambdaQuery();userWarpper.like(UserInfo::getName, "li");System.out.println(userWarpper.list());}public void queryListPage() {LambdaQueryChainWrapper<UserInfo> userWarpper = this.lambdaQuery();Page<UserInfo> page = new Page<>(1, 2);IPage<UserInfo> userInfoIPage = userWarpper.page(page);System.out.println("total=" + userInfoIPage.getTotal());System.out.println("page=" + userInfoIPage.getPages());}
}
如果需要需要开始分页查询或者动态表名,需要开启
@Configuration
public class MybatisPlusConfig {/*** 新的分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();//分页拦截器PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setDbType(DbType.MYSQL);paginationInnerInterceptor.setOverflow(true);//动态表名拦截器DynamicTableNameInnerInterceptor dynamicTableNameInner = new DynamicTableNameInnerInterceptor();dynamicTableNameInner.setTableNameHandler(((sql, tableName) -> "userinfo"));interceptor.addInnerInterceptor(dynamicTableNameInner);interceptor.addInnerInterceptor(paginationInnerInterceptor);return interceptor;}}
开始查询数据
@SpringBootTest(classes = MybatisPlusProgram.class)
public class IUserInfoServiceImplTest {@AutowiredIUserInfoService iUserInfoService;@Testpublic void queryTest() {iUserInfoService.queryList();}
}
总结:
BaseMapper 接口中封装了一系列 CRUD 常用操作
IService 内部进一步封装了 BaseMapper 接口的方法(当然也提供了更详细的方法),使用IService需要继承ServiceImpl。
4.wapper介绍
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
5.LambdaQueryWrapper常用的方法
方法图片来源: https://www.cnblogs.com/javagg/p/12654305.html
6.@Mapper或者@MapperScan
使用@Mapper或者@MapperScan,将Mapper的接口类编译成实现类,才能注入。
@MapperScan:在启动项类上增加@MapperScan,指定扫描的包。指定了变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类
@Mapper:在接口上增加@Mapper,在编译之后会生成相应的接口实现类。
@SpringBootApplication
@MapperScan("com.lx.mybatisplus.mappers")
public class MybatisPlusProgram {public static void main(String[] args) {SpringApplication.run(MybatisPlusProgram.class, args);}
}
7.配置连接
默认数据库配置连接
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/myboot?useUnicode=true&characterEncoding=utf8username: rootpassword: root
durid连接池配置连接:
#druid数据库链接池配置
spring:datasource:#1.JDBCtype: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/myboot?useUnicode=true&characterEncoding=utf8username: rootpassword: rootdruid:#2.连接池配置initial-size: 5 #初始化连接池的连接数量 大小,最小,最大min-idle: 5max-active: 20max-wait: 60000 #配置获取连接等待超时的时间time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒min-evictable-idle-time-millis: 30000 # 配置一个连接在池中最小生存的时间,单位是毫秒validation-query: SELECT 1 FROM DUAL # 检查数据库validation-query-timeout: 20000 #设置检查数据库SQL查询超时时间test-while-idle: true #建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。test-on-borrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。test-on-return: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。pool-prepared-statements: true # 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开max-pool-prepared-statement-per-connection-size: 20filter: # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙stat:merge-sql: trueslow-sql-millis: 5000#3.基础监控配置web-stat-filter:enabled: trueurl-pattern: /*#设置不统计哪些URLexclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"session-stat-enable: truesession-stat-max-count: 100stat-view-servlet:enabled: trueurl-pattern: /druid/*reset-enable: truelogin-username: admin #设置监控页面的登录名和密码 ,监控页访问:http://localhost:端口号/项目名称/druid/login.htmllogin-password: adminallow: 127.0.0.1#deny: 192.168.1.100mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpllogging:level:root: info
8.LambdaQueryWrapper和LambdaQueryChainWrapper区别
LambdaQueryWrapper和LambdaQueryChainWrapper都支持lamdba的写法,用法基本相同。LambdaQueryChainWrapper是在LambdaQueryWrapper的基础上封装的。
LambdaQueryWrapper<UserInfo> userWarpper = new QueryWrapper<UserInfo>().lambda().like(UserInfo::getName, "li");iUserInfoService.list(userWarpper);iUserInfoService.getOne(userWarpper);LambdaQueryChainWrapper<UserInfo> userWarpperChain = iUserInfoService.lambdaQuery().like(UserInfo::getName, "li");userWarpperChain.list(); //等于iUserInfoService.list(userWarpperChain.getWrapper());userWarpperChain.one(); //等于iUserInfoService.getOne(userWarpperChain.getWrapper())
9.开启打印SQL日志
1.第一种方法:使用mybatis配置
#打印sql,但是不出现在log中mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
2.第二种方法:使用Logback日志配置
#打印sql,出现在log中logging.level.com.lx.mybatisplus=debug
参考:
Springboot配置Druid或Hikari连接池(并开启MyBatisPlus事务)_繁华尽头满是殇的博客-CSDN博客
SpringBoot 构建ORM框架相关推荐
- 框架:SpringBoot构建Restful service完成Get和Post请求
SpringBoot构建Restful service完成Get和Post请求 一个基本的RESTful service最经常向外提供的请求Method就是Get和Post. 在Get中,常用的都会 ...
- orm框架有哪些_java技术哪些是必学的?
我们接触过java需要的小伙伴们都知道java是一门强大而又复杂的编程语言,现如今在互联网行业,java的身影随处可见,可能刚学习的小伙伴们会被java语言庞大的体系图吓到,不过知识毕竟是一个积累的过 ...
- [Android]Android端ORM框架——RapidORM(v1.0)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4748077.html Android上主流的ORM框架有很多 ...
- SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
文章目录 Pre Actuator 中的度量指标 Micrometer 度量库 Meter接口 计量器类型 如何创建这些计量器 扩展 Metrics 端点 自定义 Metrics 指标 使用 Mete ...
- MyBatis 一个数据持久层(ORM)框架
MyBatis 的前身就是 iBatis .是一个数据持久层(ORM)框架. MyBatis框架 [1] iBATIS一词来源于"internet"和"abatis&qu ...
- 核心技术靠化缘是要不来的——自己动手写ORM框架
开源市场上的Java的ORM框架一个都不好用,所以花了几天时间自己撸了一个 OrmKids,欢迎大家下载学习.遇到问题请关注公众号进群大家一起讨论. OrmKids 支持分库分表的MySQL单表ORM ...
- flask orm 数据库_Flask:使用ORM框架操作数据库
在Flask中并没有限制我们使用哪种方式来操作数据库,如果使用原生SQL的方式来操作数据库,随着项目代码量的提升会发现有大量操作数据库的冗余代码,以及大量SQL语句与逻辑代码杂糅在一起不利于核心代码的 ...
- php mysql orm_PHP ORM框架与简单代码实现(转)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据 ...
- android ORM框架的性能简单测试(androrm vs ormlite)
2019独角兽企业重金招聘Python工程师标准>>> 前言 看了一下现在的android设备,性能都不差,就懒得直接用sqlite,直接上ORM框架把,上网搜了一圈,觉得andro ...
最新文章
- oracle+linux+oel+6.9,用SecureCRT+Xming轻松远程实现linux的X DISPLAY
- #每天问自己个问题#6. SIP标准协议 RFC3261
- 项目管理基础:系统切换相关知识笔记
- 基于docker 如何部署surging分布式微服务引擎
- python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
- 清明赏春攻略——来一场技术踏青!
- Mysql 分组聚合实现 over partition by 功能
- Mac版Python3安装/升级
- Visual Basic6.0下载及安装
- Java不能做游戏?快来看看这个Java版超级玛丽吧。
- JavaScript的特效
- java赛马游戏_Java程序之赛马游戏
- 万用表怎么测电池内阻_万用表怎么测量电阻
- R 回归分析 非线性回归模型
- Visio方向键无法移动对象的解决办法[笔记本版]
- bury the hatchet
- 【NLP】from glove import Glove的使用、模型保存和加载
- java李兴华笔记 pdf_李兴华视频教程笔记.pdf
- 蓝牙室内定位之高精度AOA定位技术未来发展趋势-新导智能
- 区块链+跨境支付有哪些优势?
热门文章
- ASUS华硕天选3笔记本电脑FA507RM6800原装出厂Windows11系统恢复原厂OEM系统
- 关于如何绕开对通用VMware虚拟机检测的一些收集
- 清退35岁以上基层员工,早已是公开秘密
- Ubuntu安装Vmware Tools解决屏幕比例失调
- 转:什么是决策 -- IT项目管理
- 表单验证[用户名、邮箱、密码、重复密码]
- 2010-11-29 10:52 互联网创业者的故事:我的成功与失败
- C# 模拟浏览器发送post或get请求
- 如何高速有效的锻炼身体,请帮我规划一个锻炼的计划
- 变电所计算机监控系统设计技术规程,《59.DL5149-2016 220-500kV变电所计算机监控系统设计技术规程》.pdf...