Mybatis延迟加载中有两个标签支持延迟加载

20. Mybatis 自定义结果集映射-一对多 Mybatis 的一对多映射和一对一映射类似, 可以采用联表查询方式, 也可以采用分步查询方式. 分步查询时, 默认为立即查询, 支持延迟加载策略. 1. 联表查询 联表查询指的时, 使用联表查询sql 查询出一对多关系中多的记录. 然后采用collection 标签对查询结果集进行封装. collection 标签必要属性: property: 要封装的属性 ofType: 每个元素的类型 ... 阅读详情

1 延迟加载

延迟加载也叫做懒加载lazy

按需要进行加载,是优化查询速度的方法

Mybatis中有两个标签支持延迟加载

<association>

<collection>

 

操作步骤:

1. 打开延迟加载开关,关闭积极加载开关

核心配置文件sqlMapconfig.xml

<settings>

<!-- 打开延迟加载开关 -->

<setting name="lazyLoadingEnabled" value="true"/>

<!-- 关闭积极加载开关 -->

<setting name="aggressiveLazyLoading" value="false"/>

</settings>

 

2. 编写代码

映射文件:

<resultMap type="cn.itcast.po.Orders" id="orderAndUserLazyResultMap">

<id column="id" property="id"/>

<result column="user_id" property="userId"/>

<result column="number" property="number"/>

<result column="createtime" property="createtime"/>

<result column="note" property="note"/>

<!--

使用延迟加载

select:调用要执行的sql语句,使用那个sql的namespace+.+sql语句的id

例如:cn.itcast.mapper.UserMapper.findUserById

column:是orders表中与user表关联的字段

 -->

<association property="user" javaType="cn.itcast.po.User"

select="cn.itcast.mapper.UserMapper.findUserById" column="user_id">

</association>

</resultMap>

 

<select id="findOrderAndUserLazy" resultMap="orderAndUserLazyResultMap">

select * from orders

</select>

 

接口:

public List<Orders> findOrderAndUserLazy();

 

测试代码:

@Test

public void testFindOrderAndUserLazy() throws Exception{

SqlSession openSession = sqlSessionFactory.openSession();

OrdersMapper ordersMapper = openSession.getMapper(OrdersMapper.class);

List<Orders> list = ordersMapper.findOrderAndUserLazy();

for(Orders order : list){

String number = order.getNumber();

System.out.println(number);

User user = order.getUser();

System.out.println(user.getUsername());

}

}

 

 

 

 

 

2 总结

1. 对单个对象的映射关系使用:<association

2. 对集合对象的映射关系使用:<collection

3. 延迟加载:需要在核心配置文件中配置开关;在mybatis中association和collection支持延迟加载

3 缓存

优化查询速度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.1 一级缓存

是SqlSession级别的,一级缓存由mybatis自己控制,不需要人为干预

1. 第一次查询会查询一级缓存,如果缓存中没有数据会从数据库中查询

2. 如果有更新、删除、修改操作,那么会清空缓存

3. 接着再次执行查询则会去数据库中查询数据并放到缓存中

4. 再次查询则直接从缓存中查询数据

 

映射文件:

<select id="findUserByIdCache1" parameterType="int" resultType="user">

select * from User where id=#{aaa}

</select>

 

接口:

public User findUserByIdCache1(Integer id);

 

测试代码:

@Test

public void testFindUserByIdCache1() throws Exception{

SqlSession openSession = sqlSessionFactory.openSession();

//获得Mapper对象

UserMapper userMapper = openSession.getMapper(UserMapper.class);

//第一次查询

User user1 = userMapper.findUserByIdCache1(1);

System.out.println(user1);

user1.setUsername("李四");

userMapper.updateUserById(user1);

openSession.commit();

//第二次查询

User user2 = userMapper.findUserByIdCache1(1);

System.out.println(user2);

}

 

 

3.2 二级缓存

二级缓存中的数据可以存储在内存中,或者硬盘中。

 

操作步骤:

1. 开启二级缓存

在SqlMapConfig.xml中加入

<!-- 开启二级缓存 -->

<setting name="cacheEnabled" value="true"/>

 

2. 在需要二级缓存的映射文件中加入<cache />

在UserMapper.xml中加入

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--

namespace:命名空间,作用为Sql隔离

 -->

<mapper namespace="cn.itcast.mapper.UserMapper">

<!-- 使用二级缓存 -->

<cache />

3. 将查询的POJO实现Serializable接口

public class User implements Serializable{

private static final long serialVersionUID = -6538886943664906447L;

private int id;

private String username;// 用户姓名

private String sex;// 性别

private Date birthday;// 生日

private String address;// 地址

映射文件:

<select id="findUserByIdCache2" parameterType="int" resultType="user">

select * from User where id=#{aaa}

</select>

 

接口:

public User findUserByIdCache2(Integer id);

 

测试代码:

@Test

public void testFindUserByIdCache2() throws Exception{

SqlSession openSession = sqlSessionFactory.openSession();

//获得Mapper对象

UserMapper userMapper = openSession.getMapper(UserMapper.class);

//第一次查询

User user = userMapper.findUserByIdCache2(1);

System.out.println(user);

openSession.close();

//第二次查询

openSession = sqlSessionFactory.openSession();

userMapper = openSession.getMapper(UserMapper.class);

User user1 = userMapper.findUserByIdCache2(1);

System.out.println(user1);

}

 

测试代码:

@Test

public void testFindUserByIdCache2() throws Exception{

SqlSession openSession = sqlSessionFactory.openSession();

//获得Mapper对象

UserMapper userMapper = openSession.getMapper(UserMapper.class);

//第一次查询

User user = userMapper.findUserByIdCache2(1);

System.out.println(user);

openSession.close();

//执行更新操作

openSession = sqlSessionFactory.openSession();

userMapper = openSession.getMapper(UserMapper.class);

user.setUsername("王六");

userMapper.updateUserById(user);

openSession.commit();

openSession.close();

//第二次查询

openSession = sqlSessionFactory.openSession();

userMapper = openSession.getMapper(UserMapper.class);

User user1 = userMapper.findUserByIdCache2(1);

System.out.println(user1);

openSession.close();

//第三次查询

openSession = sqlSessionFactory.openSession();

userMapper = openSession.getMapper(UserMapper.class);

User user2 = userMapper.findUserByIdCache2(1);

System.out.println(user2);

openSession.close();

}

 

 

3.3 分布式缓存

 

 

 

 

 

 

 

 

 

 

 

 

 

1. 导入jar包

 

2. 添加ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<diskStore path="E:\" />

<!-- maxElementsInMemory内存中缓存的最大个数 -->

<!-- maxElementsOnDisk硬盘上缓存的最大个数 -->

<!-- eternal设置缓存中的数据是否永远不过期 -->

<!-- overflowToDisk设置缓存中的数据是否永远不过期 -->

<!-- overflowToDisk缓存数据闲置时间,超过则删除数据-->

<!-- timeToIdleSeconds缓存数据闲置时间,超过则删除数据-->

<!-- timeToLiveSeconds缓存数据存活时间,超过则删除数据 -->

<!-- diskExpiryThreadIntervalSeconds磁盘缓存清理线程运行间隔-->

<!-- memoryStoreEvictionPolicy缓存策略,最近最少使用,当缓存大小到达极限时删除最近很少使用的-->

<defaultCache 

maxElementsInMemory="1000" 

maxElementsOnDisk="10000000" 

eternal="false" 

overflowToDisk="false" 

timeToIdleSeconds="120"

timeToLiveSeconds="120" 

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU">

</defaultCache>

</ehcache>

 

 

3. 配置映射文件中使用ehcache实现

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

 

4. 测试(同二级缓存测试)

 

 

 

flushCache刷新缓存:不配置默认为true

如果配置成false就是永远不刷新缓存,也就意味着缓存中的数据如果更新或者删除还有添加的时候,就成了脏数据了。

useCache是否使用缓存:如果不配置默认为true使用缓存。

如果遇到刷新,更改,删除操作频繁的情况下可以设置成false,不适用缓存,因为缓存的清空还有填充数据,也是需要耗费资源的

 

 

3.4 缓存的使用:

增加、修改、删除这样的操作很少的情况下才能使用缓存。

比如电话局的话务系统,话单的查询功能可以使用缓存。

医疗AI Agent实战:从零搭建一个能看病的智能助手(附完整代码) 本文详细介绍了如何从零搭建一个医疗AI Agent智能助手,涵盖核心架构设计、症状推理引擎开发、安全与合规实现以及系统集成等关键环节。通过完整的代码示例和实战案例,帮助开发者快速构建具备医疗咨询能力的智能Agent,提升医疗服务的效率和质量。 阅读详情

相关推荐

微带线贴片天线尺寸的计算,利用Matlab计算+常见的RF计算在线公式

微带线贴片天线尺寸的计算,利用Malatb计算 这几天在使用hfss对矩形天线仿真,每次改变频率和实验的材料,都要重新计算一遍,太麻烦了,所以用matlab进行计算。 知道天线的工作频率:f_r 介质板的介电常数:epsilon_r 介质板厚度:h 就可以计算出矩形天线的长:L 矩形天线的宽:W 对于下面公式的单位要注意,公式以及化简了,要注意单位 由于matlab中的变量不能用希腊字母代替,所以用了该字母的读音 代码如下: f_r=2.45; %工作频率,单位GHz epsilon_r=3.5;

weixin_43404609的博客 2万+

mybatis中的延迟加载

延迟加载:在需要使用数据的时候再加载,不用的时候不加载,也叫按需加载或懒加载。(例如在查询用户信息时,用户下的账户信息就应该是什么时候用什么时候查询) 立即加载:不管是否现在就要使用,只要调用方法,马上发起查询。(例如在查询账户信息时,账户所属的用户信息就应该随着账户信息一起查询出来) 在四种表关系一对多、多对多、多对一、一对一中: 一对多和多对多关系:通常情况下我们都是采用延迟加载; 多对一和一对一关系:通常情况下我们都是采用立即加载。 mybatis中延迟加载的配置: 1、在主配置文件中使用settin

xiao____ming的博客 589

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?

是的,MyBatis 支持延迟加载(Lazy Loading),其主要目的是为了提升应用程序性能和减少数据库访问压力。在关系型数据库中,特别是在处理一对多或一对一关联查询时,如果一次性加载所有关联数据可能会导致过多的数据传输和内存占用,尤其是当关联对象不一定会被立即使用时。MyBatis 的延迟加载原理主要是通过代理模式来实现的。来控制是否允许贪婪加载(即一次性加载全部关联对象)。才能开启全局的延迟加载支持。另外,还可以通过设置。来启用延迟加载功能。在 MyBatis 中,通过。标签配置关联映射,并设置。

学亮编程手记 845

【python爬虫实战】Python 抓取京东商品信息与评论,做竞品分析

本项目通过爬取京东平台商品数据,实现了完整的电商竞品分析流程。文章首先介绍了项目目标和技术栈,包括Python、Requests、BeautifulSoup等工具。然后详细解析了京东页面结构,包括商品列表页、详情页和评论页的特点。核心部分展示了商品列表爬取、评论数据获取以及竞品分析三个关键步骤的代码实现,每部分都包含运行结果和原理讲解。通过情感分析和关键词提取,项目能够对比不同产品的用户评价差异。最后,文章还讨论了合规性考量、优化建议和常见问题解答。该方案不仅适用于市场调研,也为企业制定营销策略提供了数据支

2503_91057718的博客 1万+

RealSense D435i深度相机实战:从像素坐标到三维空间的精准映射(Python实现)

本文详细介绍了使用RealSense D435i深度相机实现从二维像素坐标到三维空间坐标精准映射的两种Python实战方法:深度图反投影法与点云直接查找法。文章涵盖环境搭建、相机对齐、代码实现、性能对比及与YOLO等检测模型结合的进阶应用,并提供了关键的避坑指南和参数调优建议,帮助开发者在机器人、三维重建等项目中高效应用。

weixin_29291573的博客 382

mybatis是否支持延迟加载,如果支持他的实现原理是什么?

1.mybatis仅支持关联对象association和关联集合对象collection的延迟加载,association是一对一,collection指的是一对多查询,在mybatis配置文件中可以配置lazyloadingEnable=true/false. 2.原理:使用CGLIB为目标对象建立代理对象,当调用目标对象的方法时进入拦截器方法。比如调用a.getb().getName(),拦截器方法invoke()发现a.getb()为null值,会单独发送事先保存好的查询关联b对象的sql语句,把b查

buuh1的博客 2712

博流BL602开发二 环境搭建与固件烧录实战

本文详细介绍了博流BL602 RISC-V芯片开发环境的搭建与固件烧录全流程。从Linux/WSL系统选择、RISC-V工具链配置、SDK获取,到编译首个Wi-Fi示例并生成固件镜像,再到通过命令行或图形化工具完成烧录及串口测试,提供了完整的实战指南和常见问题解决方案。

weixin_29175469的博客 452

Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

具体来说,当你在 MyBatis 的查询语句中加入一个 LIMIT 子句,它会限制返回的数据行数,只有满足条件的数据才会被返回。例如,如果你有一个查询所有订单的 SQL 语句,你可以使用 LIMIT 子句来限制返回的订单数量。当一个 SQL 查询返回了部分数据后,这些数据就被数据库加上了行级锁,其他查询在获取数据时需要等待前面的查询释放锁。需要注意的是,延迟加载虽然可以提高性能,但是也会带来一些问题,比如可能会造成数据库的负载过高,因为只有当需要时才会去获取数据。

qq_33240556的博客 637

【物联网技术】ESP8266 ESP-01/01s 固件下载烧录+STM32串口通信接线

ESP8266 ESP-01/01s 工作模式接线与MQTT固件下载烧录接线

嵌入式阿齐Archie 3万+

手把手教你学Simulink--移动机器人多轮协同场景实例:基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真

本文介绍了基于Simulink的双轮差速PMSM轮毂电机协同驱动仿真系统。针对移动机器人存在的电机参数不一致、负载分配不均等问题,提出主从同步+力矩补偿的协同控制策略。通过搭建包含运动学模型、PMSM电机模型和矢量控制器的仿真系统,实现了速度同步误差<0.005m/s、轨迹跟踪误差<0.8cm、能耗降低12.5%的优化效果。文章详细阐述了建模步骤、核心算法实现和性能验证,为移动机器人动力系统设计提供了实用参考方案。

MHD0815的博客 134

Mybatis源码剖析:延迟加载源码剖析

Mybatis源码剖析:延迟加载源码剖析 1、什么是延迟加载? 在开发过程中很多时候我们并不需要总是在加载用户信息时就一定要加载他的订单信息。此时就是我们所说的延迟加载。 举个栗子 * 在一对多中,当我们有一个用户,它有个100个订单 在查询用户的时候,要不要把关联的订单查出来? 在查询订单的时候,要不要把关联的用户查出来? * 回答 在查询用户时,用户下的订单应该是,什么时候用,什么时候查询。 在查询订单时,订单所属的用户信息应该是随着订单一起查询出来。 延迟加载 就是在需要用到数据时才进行

丿涛哥哥的博客 797

YOLOv11改进 | Neck篇 | 独创HFPN利用分层特征融合块HFFB模块融合多层次特征改进yolov11(全网独家创新)

本文给大家带来的最新改进是利用分层特征融合块HFFB创新yolov11的neck部分我称之为HFPN,这个模块可以融合局部特征、全局特征、中间特征将三种特征融合在一起辅助yolov11进行检测,经过我的设计分为三种可以针对大目标、小目标、标准目标的检测方式均不同,大家可以根据自己的数据集进行不同的选择,本文的内容为我独家创新。YOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备目录一、本文介绍二、原理介绍三、核心代码四、添加方法4.1 修改一4.2 修改二4.3 修改三4.4 修改四。

Snu77的博客 5219

【SSM】Mybatis的高级映射

分布查询中,`association` 标签下的`javaType` 属性和`collection` 标签下的 `ofType` 属性,如果对应的查询语句(映射接口方法)有返回值的话,`mybatis`可以自行推断,不写也不会报错。但是非分布查询的,`javaType` 和 `ofType` 属性是必须设置的,不然mybatis 无法知道所指定的类型。

qq_63691275的博客 1254

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

一文了解MyBatis

一文精通MyBatis,从执行流程,缓存机制等底层讲解,总结大厂面试最常问的问题

mo_chen1025的博客 1241

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

面试官:哟,Mybatis讲的挺透彻啊? 网友:看完这篇Mybatis,思路突然清晰了!

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。 什么是 MyBatis? 答: MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。 mybatis框架 讲下 MyBatis 的缓存 答: MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,默认就有,二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现 Seri.

Spring boot 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MyBatis学习总结(二)

虽然 MyBatis 解析 xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以定义在任何地方,MyBatis 都可以正确识别。原理是,MyBatis 解析 A 标签,发现 A 标签引用了 B 标签,但是 B 标签尚未解析到,尚不存在,此时,MyBatis 会将 A 标签标记为未解析状态,然后继续解析余下的标签,包含 B 标签,待所有标签解析完毕,MyBatis 会重新解析那些被标记为未解析的标签,此时再解析 A 标签时,B 标签已经存在,A 标签也就可以正常解析完成了。

m0_51431003的博客 845

Mybatis-configuration 配置-settings配置

设置参数描述有效值默认值 cacheEnabled 这个配置使全局的映射器启用或禁用 缓存。 true | false true lazyLoadingEnabled 全局启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载。 true | false true aggressiveLazyLoading 当启用时, 有延迟加载...

bao30015的博客 891

Mybatis详解

优点:缺点:对于查询而言,除了使用resultType指定返回记录类型,也可以使用resultMap进行查询结果的映射。resultMap用于如下两种情况:一对一关系(association):一个员工属于一个部门一对多关系(collection):一个部门有多个员工 动态sql标签:if、where、trim、set、foreach、choose根据条件判断拼接SQL语句 注:if标签一般用于非空验证,如上例,若id为空,if标签里的代码,将不会执行,反之,则会 执行。where一般和if结合使用,根据

qq_45895931的博客 1354

Mybatis-settings的解释

<!-- settings是 MyBatis 中全局的调整设置,它们会改变 MyBatis 的运行时行为,应谨慎设置 --> <settings> <!-- 该配置影响的所有映射器中配置的缓存的全局开关。默认值true --> <setting name="cacheEnabled" value="true"/> <!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 ...

angel_devil1的博客 407

总结:Mybatis映射文件中常用的标签

Mybatis 一个持久层框架,支持动态定制sql、存储过程以及高级映射。 优点:避免了所有的jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的xml或者注解来配置和映射原生信息,将接口和java对象对象映射成数据库中的记录。 整合Mybatis 整合 (1)引入Mybatis依赖关系包,mybatis-xxxx.jar. (2)配置SQLsessionFactory,引入...

好看的皮囊千篇一律有趣的灵魂万里挑一 7620

mybatis的第五天学习笔记

动态SQL执行流程MyBatis如何解析动态SQLSQL语句构建过程参数绑定机制新增示例// 动态条件查询接口示例-- 动态条件查询XML示例 --> < select id = " searchUsers " resultType = " user " > SELECT * FROM users < where > < if test = " name!

m0_73446768的博客 1289

图文详解,带你一文彻底摸透MyBatis。

先吹一下Mybatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement 等繁杂的过程。程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO 映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。再说一下缺点。

2301_76607156的博客 645

MyBatis 高级特性全解(三):缓存、延迟加载、注解开发与

立即加载:一查全查,简单直接延迟加载:按需查询,性能更优企业开发中,一对多场景优先使用延迟加载<if>:条件判断<where>:自动处理多余的 and/or<foreach>:循环遍历集合(批量查询、批量插入)<set>:用于 update 动态更新字段动态 SQL 是 MyBatis 替代原生 JDBC、Hibernate 的核心优势之一,也是复杂业务必备技能。MyBatis 提供一级、二级缓存,用于提升查询效率,分布式场景需结合第三方缓存加载策略分为立即加载与延迟加载。

2201_75940978的博客 528

关于MyBatis

MyBatis 是⼀个可以⾃定义 SQL、存储过程和⾼级映射的持久层框. 关于MyBatis的缓存,MyBatis 的缓存分为⼀级缓存和⼆级缓存,⼀级缓存放在 session ⾥⾯,默认 就有,⼆级缓存放在它的命名空间⾥,默认是不打开的,使⽤⼆级缓存属性类需要 实现 Serializable 序列化接⼝(可⽤来保存对象的状态),可在它的映射⽂件中配置。 MyBatis分页,1)Mybatis 使⽤ RowBounds 对象进⾏分⻚,也可以直接编写 sql 实现分⻚, 也可以使⽤ Mybatis 的分⻚插件。

yishengqianan的博客 1121

持久层框架——Mybatis知识点总结

用来做什么?将数据库中的数据映射到对象中,将对象中的属性映射到数据库字段特点:可以只写dao接口不写实现类sql由开发人员编写,可以充分发挥写sql的技巧,提供了很高的灵活性,需要传入参数,实体对象也可以,变量也可以mybatis会自动拼接sql和参数,拿到数据库中执行,将执行结果依靠反射机制封装成你需要的实体类或是List返回给你。sql写在哪里?1、xml(常用,易于维护,易于拼接参数)2、注...

ycgslh的博客 1395
上一篇: 测试注解事务方式
下一篇: linux下载命令wget
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值