• 每日知识记载总结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)

  • 相关阅读:
    在浏览器中输入url后执行的全过程
    自己搭建一个类似vue,实现响应式的原理
    关于vue是怎么放到服务器上运行的基于vue-cli3
    vue v-modal语法糖
    js中的Map和Set
    js的reduce方法
    vue双向绑定原理
    js对象原型-class类
    (二)仅仅通过Application监听用户行为及App的在线状态和在线时长
    (一)仅仅用ApplicationContext加载界面
  • 原文地址:https://www.cnblogs.com/cuiyf/p/12048377.html
Copyright © 2020-2023  润新知