1.springboot+mybatis集成自定义缓存ehcache用法笔记
2.Mybatis 记源plus学习笔记(常用注解/条件构造器)
3.MyBatis 批量插入包含 BLOB 类型的数据到 Oracle 异常问题分析
4.MybatisPlus基础篇学习笔记(六)------更新及删除
5.MybatisPlus基础篇学习笔记(一)------简介
6.Win下Jenkins-2.138源码编译及填坑笔记
springboot+mybatis集成自定义缓存ehcache用法笔记
今天,我们将深入探讨Spring Boot与MyBatis结合时如何集成自定义缓存Ehcache的源码实用指南,希望能对你的详解工作带来帮助。Ehcache简介
Ehcache是记源一款强大的纯Java本地缓存管理框架,它是源码一款开源的Java分布式缓存解决方案,适用于通用缓存和轻量级Java应用环境。详解类似斗鱼直播源码其特点包括:简单易用,记源性能卓越
提供多种缓存策略,源码灵活应对需求
数据分为内存和磁盘两级存储,详解确保数据持久性
重启时能自动将内存数据同步至磁盘
支持分布式缓存,记源通过RMI和API扩展
提供Hibernate缓存支持,源码兼容其他框架
支持多实例和多个缓存区域,详解管理更精细
Spring Boot集成Ehcache步骤
Spring Boot对缓存管理做了简化,记源它自动配置合适的源码CacheManager。要集成Ehcache,详解你需要:在项目中添加ehcache.xml配置文件
配置application.properties
在启动类上添加@EnableCaching注解,启用缓存功能
在UserInfoService.java文件中添加缓存注解,实现缓存策略
创建TestController.java,进行实际的缓存测试
最后,这里推荐关注IT技术分享社区,获取更多专业内容,例如个人博客programmerblog.xyz上分享的程序员效率提升技巧和在线工具。同时,不要错过远程办公必备的远程协助软件和硬件基础知识,如单片机程序下载、ISP及串口等。Mybatis plus学习笔记(常用注解/条件构造器)
一、常用注解
1. 表字段注解
2. 排除非表字段注解
二、普通查询
1. 列表查询
2. 条件构造器查询
3. 使用select不展示全部字段的示例
4. Condition的作用
5. 传入实体参数进行查询
6. AllEq参数的使用
7. 其他构造方法介绍
8. Lambda条件构造器应用
MyBatis 批量插入包含 BLOB 类型的数据到 Oracle 异常问题分析
背景
本周项目开发过程中,有一个简单的批量插入附件到 Oracle 数据库的功能,DAO 编写测试期间都是用的小文件,BLOB 类型的强度尺源码字段插入正常。
真正联调测试时,上传的都是超过 字节的文件,总是报下列异常:
Cause:java.sql.SQLException:ORA-:仅能绑定要插入LONG列的LONG值;uncategorizedSQLException;SQLstate[];errorcode[];ORA-:仅能绑定要插入LONG列的LONG值;nestedexceptionisjava.sql.SQLException:ORA-:仅能绑定要插入LONG列的LONG值本文记录这个问题的分析过程,作为网络笔记,以备后续查看!
问题排查这是一个简单的批量插入,用的是 UNION ALL :
<insertid="batchInsert"parameterType="java.util.List">INSERTINTOFELE_ATTACHMENT(ID,ATTACHMENT,ATTACHMENT_NAME,ATTACHMENT_SIZE)<foreachcollection="list"item="tempData"index="index"separator="UNIONALL">(SELECT#{ tempData.id,jdbcType=VARCHAR},#{ tempData.attachment,jdbcType=BLOB},#{ tempData.attachmentName,jdbcType=VARCHAR},#{ tempData.attachmentSize,jdbcType=DECIMAL}FROMDUAL)</foreach></insert>起先以为是表中一个 Number 类型、存储文件长度字段的问题,去掉它后,插入还是报异常,但是实体字段用 byte[] 类型存储附件二进制流的思路是正确的。
把批量插入换成 MyBatis 的单条插入后,数据也能正常插入,所以确定问题还是在批量插入SQL 语句上。
最终确定了问题原因:批量将 byte[] 保存到 BLOB 字段时,不能使用 Union all ,因为它使用from dual 从虚表查询获取数据。
而从虚表取数据时,如果字段长度介于 - 之间时,Oracle 会将字段类型转为 Long 类型,原来如此。
问题修正修改批量插入的方式,使用 begin end 连接批量插入语句:
<insertid="batchInsert"parameterType="java.util.List">begin<foreachcollection="list"item="tempData"index="index"separator=";">INSERTINTOFELE_ATTACHMENT(ID,ATTACHMENT,ATTACHMENT_NAME,ATTACHMENT_SIZE)VALUES(#{ tempData.id,jdbcType=VARCHAR},#{ tempData.attachment,jdbcType=BLOB},#{ tempData.attachmentName,jdbcType=VARCHAR},#{ tempData.attachmentSize,jdbcType=DECIMAL})</foreach>;end;</insert>参考文章www.cnblogs.com/zhuifenglang/p/.html
MybatisPlus基础篇学习笔记(六)------更新及删除
本章节主要介绍MybatisPlus中的更新与删除操作。更新操作提供了两种方式:一种是通过id更新,使用updateById方法,实体类中的id必须存在,其他需要更新的字段值通过set方法设置。控制台打印的SQL语句显示id作为where条件,其他set的字段为需要修改的内容。然而,可能出现实体类中未设置的egg源码解读字段被误设置的情况,这通常与Java中int类型默认赋值为0有关。将字段类型改为Integer可以避免此问题,因为Integer默认赋值为null,不会被SQL语句设置为默认值。另一种方式是以条件构造器作为参数进行更新,通过传入set部分和where条件部分的SQL语句。
在条件构造器中使用set方法时,可以采用链式调用简化代码,尤其在实体类属性较多,仅需更新少量字段的情况下。此外,lambda表达式提供了避免误写操作的解决方案,它能有效防止手动输入字段名称时可能引发的错误。lambdaChain方法则与lambda类似,但它返回一个布尔值,指示操作是否成功,避免了set值与原值相同导致的无效操作。
删除操作同样有多种方法。使用deleteById方法时,只需传入主键id即可执行删除操作。若需要更灵活的删除条件,可以使用deleteByMap方法,通过map集合封装where查询条件。最后,delete方法通过传入条件构造器进行删除,通常使用lambda表达式创建LambdaQueryWrapper构造器并传入条件。
需要注意的是,在实际应用中应谨慎执行删除操作,考虑逻辑删除而非物理删除的场景。通过修改表字段状态值可以实现逻辑删除,避免数据丢失或无法恢复的mipcms源码下载问题。
MybatisPlus基础篇学习笔记(一)------简介
MyBatis-Plus(简称MP)是一款MyBatis的增强工具,旨在简化开发、提高效率。它是在MyBatis的基础上进行的二次封装,保留了MyBatis的原有特性,同时增加了简化开发的新功能,实质上是一个基于MyBatis的增强插件。 在使用MyBatis进行项目开发时,通常需要为数据库中的每个表建立对象,并对每个对象编写CRUD相关代码,这会重复编写大量代码。而MybatisPlus的引入可以显著减少重复性工作。通过MybatisPlus,可以直接调用预先封装好的方法进行CRUD操作,省去了自己编写代码的繁琐步骤。此外,MybatisPlus还提供了代码生成器功能,可以一键生成entity、dao、mapper.xml、service和controller相关的代码,大大提高了开发效率。 MybatisPlus拥有丰富的功能,包括但不限于: 不影响Mybatis原有功能:在使用MybatisPlus时,不会对现有工程产生影响。 自带常用增删改查:内置通用Mapper、通用Service,实现单表大部分CRUD操作。 条件构造器:强大的条件构造器,能够满足各类复杂的查询条件编写需求。 Lambda表达式调用:简化代码编写,flowplayer源码编译通过Lambda表达式编写查询条件,无需担心字段拼写错误。 MybatisPlus还支持多种数据库,包括MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、PostgreSQL、SQLServer等,并且支持主键自动生成、XML热加载、 ActiveRecord模式调用、自定义全局通用操作、关键词自动转义、代码生成器、分页插件和性能分析插件等功能。 MybatisPlus的特性包括: 无侵入性:只做增强不做改变,使用过程丝滑顺畅,不影响原有代码。 性能损耗小:启动自动注入基本CURD,性能基本无损耗,支持面向对象操作。 此外,MybatisPlus还支持Lambda形式调用,支持多种数据库连接,提供主键生成策略,支持XML热加载,支持AR模式调用,内置代码生成器,支持分页插件和性能分析插件,提供全局拦截插件以避免误操作。 如果您在使用过程中遇到问题或有建议,欢迎指正和交流,感谢您的支持,让我们一同成长进步!Win下Jenkins-2.源码编译及填坑笔记
安装JDK与配置环境
首先安装JDK版本1.8-,确保操作系统中已添加JDK环境变量。通过执行"Java -version"命令验证JDK安装。注意,JDK版本必须在1.8.0-以上,Jenkins 2.版本不支持Java9,Maven版本需在3.5.3以上。
设置Maven环境与仓库路径
解压Maven3.5.4至指定英文路径,并添加Maven环境变量。配置Maven的conf\setting.xml文件,定位到行,设置本地Maven仓库路径为"C:\jstao\soft\sprintbootjar\repository"。定位到行,配置远端阿里云仓库,以方便访问相关资源。
解压Jenkins源码
解压Jenkins-2.源码至英文路径下。注意,解压前需确保目标目录为空。
源码编译与打包
以管理员身份运行CMD,进入Jenkins解压目录。执行命令"mvn validate"进行项目校验,首次执行可能需等待一段时间。接着执行"mvn clean install -Dmaven.test.skip=true"跳过单元测试编译项目,首次编译亦需等待。校验和编译过程完成后,可在war\target目录下找到GeoDevOps.war文件。
启动与测试
运行GeoDevOps.war文件,执行命令"java -jar GeoDevOps.war",访问http://localhost:进行测试。确认编译打包过程顺利。
源码编译踩坑记录
使用GitHub最新版本Jenkins源码编译时,因依赖包问题而失败,后切换至稳定版本Jenkins-2.。发现JDK版本需在1.8.0-以上,以避免校验失败。编译过程中,可能存在包依赖无法解决的问题,通过手动下载缺失jar包和对应POM文件至本地仓库,可有效解决冲突。
环境配置不当引发的问题
使用本地Maven版本3.3.9编译时,编译失败,原因是Maven版本需在3.5.3以上以兼容Jenkins-2.版本需求。执行编译命令时,可能会遇到war\target目录无法删除的问题,需先排查并解除目录占用,以确保编译顺利进行。
学习资源
对于有兴趣深入学习Java工程化、高性能及分布式、微服务、Spring、MyBatis、Netty源码分析的朋友,推荐加入交流群。群内有资深阿里专家直播讲解技术,并免费分享Java大型互联网技术的视频资源。
EL-ADMIN 学习笔记
EL-ADMIN学习笔记
一,支持接口限流,避免恶意请求导致服务层压力过大
通过封装限流功能,EL-ADMIN实现了易用的限流策略。使用注解设置允许访问的次数和限流键,通过Redis的TTL失效机制限制访问频率。限流原则不仅基于key,还考虑了客户端IP限制。Redis操作优化使用Lua脚本,保证原子性、减少网络数据传输,提升性能。
二,支持接口级别的功能权限与数据权限,可自定义操作
功能权限基于RBAC思想,通过角色授予用户权限。数据权限在MyBatis框架中,通过超类冗余字段和请求处理切面实现。EL-ADMIN封装了数据权限获取和注入流程,优化了权限管理。
三,自定义权限注解与匿名接口注解,可快速对接口拦截与放行
EL-ADMIN通过自定义注解实现权限拦截与放行。使用Spring EL表达式获取权限判断结果,放行注解覆盖原有的@RequestMapping注解,支持无配置自动化放行和特定请求放行。
四,前后端统一异常拦截处理,统一输出异常,避免繁琐的判断
通过过滤器、拦截器实现异常统一处理,结合Spring MVC的注解,提供异常处理、初始化数据绑定和特殊请求参数绑定等功能。控制器层及业务层抛出的异常进行差异化的拦截处理。
五,支持运维管理,可方便地对远程服务器的应用进行部署与管理
通过本地与EL-ADMIN交互上传应用包,自动部署到远端服务器。实现状态监控、应用部署、卸载等运维操作,结合开源组件jsch、ganymed-ssh2及websocket技术,提供实时信息推送功能。
工作笔记(十四)——mybatis-plus 操作
在mybatis-plus操作中,更新功能通过queryWrapper和update方法实现。举例说明,假设要更新用户表中id为1的用户信息,可以创建queryWrapper,设置其条件为id等于1,然后调用update方法并传入要更新的属性值。
MyBatisPlus提供强大的查询功能,queryWrapper可以用于多条件查询。例如,查询用户表中性别为'男'且年龄大于岁的用户,通过设置queryWrapper的多个条件即可。
有时候,SQL语句较为复杂,难以通过mybatis-plus直接拼接。在这种情况下,可以手动编写SQL语句进行操作。通常,使用mybatis-plus的mapper文件定义SQL方法,这样在调用时更为灵活。
对于复杂的SQL语句,mybatis-plus与普通mybatis的使用方式类似。在mapper中定义SQL方法,然后在调用时传入参数。
值得注意的是,mybatis-plus中无法直接使用SQL的内置函数。为解决这一问题,mybatis-plus引入了apply函数,允许用户在SQL语句中嵌入复杂逻辑,从而实现动态SQL。
在进行数据检索时,mybatis-plus提供了limit功能,用于分页查询。例如,查询用户表中前条数据,通过limit函数轻松实现。
最后,mybatis-plus的in语句用于条件查询,例如查询用户表中年龄在到之间的用户,只需使用in语句即可实现。
mybatisç¬è®°-MappedStatement
MappedStatementç»´æ¤äºä¸æ¡<select|update|delete|insert>èç¹çå°è£æ¯å¦Mapper.xmlä¸ä¸ä¸ª<select />èç¹
转æ¢æJava类就æ¯ä¸ä¸ªMappedStatement
使ç¨ConfigurationçgetMappedStatementæ¹æ³æ¥è·åMappedStatement对象
è·åçæ¹å¼keyçç»æ为å½å空é´+id
è´è´£æ ¹æ®ç¨æ·ä¼ éçparameterObjectï¼å¨æå°çæSQLè¯å¥ ï¼å°ä¿¡æ¯å°è£ å°BoundSql对象ä¸ï¼å¹¶è¿å
表示å¨æçæçSQLè¯å¥ä»¥åç¸åºçåæ°ä¿¡æ¯
å½è°ç¨SqlSourceçgetBoundSqlæ¹æ³ï¼ä¼ å ¥çå°±æ¯parameterMappingsç¸å¯¹åºçåæ°,æç»çæBoundSql对象,æäºBoundSqlå°±å¯ä»¥æ§è¡sqlè¯å¥äº