每日知识记载总结54

Posted cuiyf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日知识记载总结54相关的知识,希望对你有一定的参考价值。

mybatis中在同一个事务,循环执行同一个sql语句,只有第一次会执行的问题 (来源

一、问题描述:

使用spring @Transaction事务时,在for循环中需要多次执行同一查询语句,第一次查询出对象后,对对象进行修改后,结果再进行第二次查询的时候,查询返回的数据是自己第一次修改后的数据。因为业务需要每次查询都需要取更改数据库,以后的查询都会根据上一次循环修改后的值进行操作。

二、解决方法:
在xml文件 select语句添加 flushCache="true" ,告诉mybatis查询结束后刷新缓存,不记录查询结果到一级缓存中

<select id="pageListCount" resultType="int" flushCache="true">

三、原因:

mybatis有一级缓存和二级缓存,mybatis对查询的语句会存在一级缓存中,如果在一个事务中,mybatis对同一个session多次查询同一个sql语句就会去找缓存而不是再去查一次数据库

mysql使用外连接替换in和not in (来源

select * from table t where t.id not in (select id from table2)
-->
select a.* from table1 a left join table2 b on a.id = b.id where b.id is null; 
-->
select a.* from table1 a left join table2 b on a.id = b.id where b.id is not null; 

String.format()字符串(来源

String.format()字符串常规类型格式化的两种重载方式
format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object… args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

转换符 详细说明 示例
%s 字符串类型 “喜欢请收藏”
%c 字符类型 ‘m’
%b 布尔类型 true
%d 整数类型(十进制) 88
%x 整数类型(十六进制) FF
%o 整数类型(八进制) 77
%f 浮点类型 8.888
%a 十六进制浮点类型 FF.35AE
%e 指数类型 9.38e+5
%g 通用浮点类型(f和e类型中较短的) 不举例(基本用不到)
%h 散列码 不举例(基本用不到)
%% 百分比类型 %(%特殊字符%%才能显示%)
%n 换行符 不举例(基本用不到)
%tx 日期与时间类型(x代表不同的日期与时间转换符) 不举例(基本用不到)

高级功能:
标志 说明 示例 结果

  • 为正数或者负数添加符号 (“%+d”,15) +15
    0 数字前面补0(加密常用) (“%04d”, 99) 0099
    空格 在整数之前添加指定数量的空格 (“% 4d”, 99) 99
    , 以“,”对数字分组(常用显示金额) (“%,f”, 9999.99) 9,999.990000
    ( 使用括号包含负数 (“%(f”, -99.99) (99.990000)
    # 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 (“%#x”, 99)(“%#o”, 99) 0x63 0143
    < 格式化前一个转换符所描述的参数 (“%f和%<3.2f”, 99.45) 99.450000和99.45

第一个例子中有说到 %tx x代表日期转换符 我也顺便列举下日期转换符

标志 说明 示例
c 包括全部日期和时间信息 星期六 十月 27 14:21:20 CST 2007
F “年-月-日”格式 2007-10-27
D “月/日/年”格式 10/27/07
r “HH:MM:SS PM”格式(12时制) 02:25:51 下午
T “HH:MM:SS”格式(24时制) 14:28:16
R “HH:MM”格式(24时制) 14:28

Multipartfile与File类型相互转换

用org.apache.commons.io这个包中的类

1.M转F

File file = new File(path); 

FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);  

2.F转M

File file = new File("src/test/resources/input.txt");

FileInputStream input = new FileInputStream(file);

MultipartFile multipartFile =new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(input));

StringBuffer 相关操作 (来源

字符串实现原理通过该类实现的。
StringBuffer可以对字符串内容进行增删。
StringBuffer是个容器。是字符串缓冲区。
很多方法与String相同。
StringBuffer是可变长度。

容器的特点:
长度可变化,可以操作多个类型,最终可以通过toString( )转换为字符串。

存储。
StringBuffer append( ):指定数据类型作为参数添加到已有数据类型的结尾处。
StringDuffer insert(index,数据):可以将数据插入到index位置。

删除。
StringBuffer delete( start, end ):删除缓冲区的数据,包含start,不包含end。
StringBuffer deleteCharAt( index ):删除指定位置的字符。

获取。
char charAt( int index )
int indexOf( String str )
int lastIndexOf( String str)
int length( )
String substring(int start, int end)

修改。
StringBuffer replace(int start, int end)
void setCharAt(int index, char ch)

反转。
StringBuffer reverse( );

将缓冲区的指定的数据存储到指定字符数组中。
void getChars( int srcBegin, int srcEnd, char[ ] dst, int dstBegin)

以上是关于每日知识记载总结54的主要内容,如果未能解决你的问题,请参考以下文章

每日记载内容总结46

12.16第三周总结

线程学习知识点总结

寒假每日总结——2020.2.3

5.18每日总结

SQL每日一题(20220303)及知识点总结