zoukankan      html  css  js  c++  java
  • 每日知识记载总结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和%❤️.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)

  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/cuiyf/p/12048377.html
Copyright © 2011-2022 走看看