Basic Knowledge
各种查询条件组装
参考:https://mynews.likecoder.com/News/54208
mybaties数据源配置类型(POOLED、JNDI、UNPOOLED)
- dataSource的类型可以配置成其内置类型之一,如UNPOOLED、POOLED、JNDI。
- 如果将类型设置成UNPOOLED,mybaties会为每一个数据库操作创建一个新的连接,并关闭它。该方式适用于只有小规模数量并发用户的简单应用程序上。
- 如果将属性设置成POOLED,mybaties会创建一个数据库连接池,连接池的一个连接将会被用作数据库操作。一旦数据库操作完成,mybaties会将此连接返回给连接池。在开发或测试环境中经常用到此方式。
- 如果将类型设置成JNDI。mybaties会从在应用服务器向配置好的JNDI数据源DataSource获取数据库连接。在生产环境中优先考虑这种方式。
自动分页要开启PaginationInterceptor插件
https://mybatis.plus/guide/page.html
1 | @Bean |
${} vs #{}
1 | #方式能够很大程度防止sql注入。 |
mybatis的二级缓存 vs redis
Mybatis一级缓存作用域是session,session commit之后缓存就失效了。
Mybatis二级缓存作用域是sessionFactory,该缓存是以namespace为单位的(也就是一个Mapper.xml文件),不同namespace下的操作互不影响。所有对数据表的改变操作都会刷新缓存。但是一般不要用二级缓存,例如在UserMapper.xml中有大多数针对user表的操作。但是在另一个XXXMapper.xml中,还有针对user单表的操作。这会导致user在两个命名空间下的数据不一致。如果在UserMapper.xml中做了刷新缓存的操作,在XXXMapper.xml中缓存仍然有效,如果有针对user的单表查询,使用缓存的结果可能会不正确,读到脏数据。
Redis比之一、二级缓存的好处很多,Redis可以搭建在其他服务器上,缓存容量可扩展。Redis可以灵活的使用在需要缓存的数据上,比如一些热点数据。
来源
Problem Solution
mapping xml映射文件中order by后面的参数如果是变量传进去的话
排序如果直接这样写:
1 | order by #{params.orderBy} #{params.order} |
会报错:
1 | order by ? ?; nested exception is java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'rder by ? ?', expect QUES |
升降序不能通过变量#{}传进去,因为这样会被底层解释为:
1 | order by xxx 'desc' |