ibatis mysql 性能_iBatis分页查询的性能问题分析

1.insert,update,delete 返回值

(1).insert 返回的为插入的主键值,但必须在配置文件中加入如果主键值为StringSELECT @@IDENTITY AS ID如果主键值为Int型SELECT @@IDENTITY AS ID或者SELECT @@IDENTITY AS ID注:@@IDENTITY只是SQL Server的写法,其他数据库也有相关的属性。

(2).Update,和Delete返回为修改数据影响的条数;2.SQL模糊查询的两种方法

(1).如果是模糊查询,在关键字传入前加‘%’; 例:String keyword=”%”+keyword+”%”;

(2).配置文件的写法: select name,sex from t_userwherename like'%$name$%'3.在ibatis的bean.xml配置文件中,日期的转换

select count(1) from dbu_windowwhere(

( DATE_FORMAT('$dateStartTemp$','%Y-%m-%d')>=f_start_date and

DATE_FORMAT('$dateStartTemp$','%Y-%m-%d')<=f_end_date )

or

( DATE_FORMAT('$dateEndTemp$','%Y-%m-%d')>=f_start_date and

DATE_FORMAT('$dateEndTemp$','%Y-%m-%d')<=f_end_date ) )

]]>4.$sql$即程序预定义sql语句的应用

java代码:String selSql="select count(*) from `bbs_config`;";

sqlMapClient.queryForObject("execSelSqlStr", selSql );

bean.xml文件:5.ResultClass和ResultMap的区别

resultClass:可以把结果自动映射到相应的JAVA类中,但无法指定输出字段的类型,会对性能产生轻微的影响。

resultMap:可以预先定义resultMap元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段,

parameterClass和parameterMap的区别

parameterClass属性值是JAVA类的全限定名,目的是限制输入参数的类型为指定的JAVA类,如果不指定,任何带有合适属性(get/set方法)的JAVA BEAN都可以作为输入参数

parameterMap:预先定义parameterMap的属性值,用于有次序的参数匹配JDBC符号6.“#”和“$”的区别

“#” 为占为符,#在是用prepareStatement的?插入参数,$是文本替换

“$”为直接替换,但为出现SQL引入问题和性能上的影响,like,limit和表名的引入必须使用“$”7.where条件的组装比较属性值和静态值或另一个属性值是否相等比较属性值和静态值或另一个属性值是否不相等比较属性值是否大于静态值或另一个属性值比较属性值是否大于等于静态值或另一个属性值比较属性值是否小于静态值或另一个属性值比较属性值是否小于等于静态值或另一个属性值检查属性是否为NULL检查属性是否不为NULL检查属性是否为NULL或空检查属性是否不为NULL或不为空检查是否存在该属性检查是否不存在该属性8.的含义

用了特殊字符的SQL语句(比如>,9.ibatis自带缓存的运用//可以用hours/minutes/second//需要缓存的方法,可以为多个缓存策略:

LRU:最近最少使用

MEMORY:适用于没有统一的对象重用模式,property的属性值必须是STRONG,

SOFT,WEAK,这三个值分别对应于JVM不同内存reference类型。

WEAK,大多数情况下,WEAK是最佳选择,缺省值就是WEAK,它能大大提高常用查询的性能,对于当前不被使用的查询数据,将被清除

SOFT,在查询结果对象不被使用,可以减少内存不足的可能性

STRONG,对查询的结果一直保留在内存中,可以使用在数据量很少或者静态数据的时

FIFO:先进先出

OSCACHE:配置oscache.properties10.value的使用

假如没有必要写JAVA BEAN作为参数,可以直接使用基本类型,也可以直接传入参数值。如果是直接传入参数值就配置文件中必须写 #value#做为参数传入11.事务的处理

startTransacton();

commitTransaction();

rollbackTransaction();

批处理

如果有很多非查询的(insert/update/delete)语句要处理,为了减少网络通讯的流量,可以进行批处理

sqlMaClientp.startBatch();

sqlMapClient.endBatch();12.iterate在ibatis里的运用,List参数名后面一定要加“[]”,防止解析器简单的把List解析成Stringselect*from tuserinfowheref_user_codein

#value[]#

]]>

13.xmlResultName的运用 详细输出结果,直接把查存出来的结果映射成XML document

select name,sex from t_userwhereid=#id#

]]>

String xml=(String)sqlMapClient.queryForObject("getUser",user );

System.out.println(xml);<?xml  version="1.0"encoding="UTF-8"?>we are good!214.分页功能的实现1). 用ibatis自带的分页功能,但是自带分页是把所有数据读入内存再分页的,所以必须自己覆写LimitSqlExecutor方法,2). 直接使用limit实现15.ibatis的IDE:http://ibatis.apache.org/ibator.html16.容易出错的地方 :1) 在parameterMap和resultMap中,字段数据类型是java.sql.Types类定义的常量名称。常用的数据类型包括BLOB,CHAR,CLOB,DATE,LONGVARBINARY, INTEGER,NULL,NUMERIC,TIME,TIMESTAMP和VARCHAR等。2) 对于数据表中NULLBALE的字段,必须在parameterMap和resultMap中指定字段的数据类型。3) 对于数据类型是DATE,CLOB或BLOB的字段,最好在parameterMap和resultMap中指定数据类型。4) 对于二进制类型的数据,可以将LONGVARBINARY映射成byte[]。5) 对于文本类型较大的数据,可以将CLOB映射成String。6) Java Bean必须拥有缺省的构造器(即无参数的构造器)。7) Java Bean最好实现Serializable接口,以备应用的进一步扩展。17.曾经写了一个ibatis动态查询的例子:

排序代码如下:竟然无法排序,后来查了下资料,把“#”改成了“$”就可以了。

现总结下经验:#xxx# xxx代表是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的wherexxx='xxx';而$xxxx$ 则是把xxxx作为字符串拼接到你的sql语句中,比如 order by topicId , 如果你不用$来拼接而用#的话,外面就会被加上引号,比如你的语句这样写 ... order by #xxx# (xxx就是你传进来的字符串topicId),ibatis 就会把他翻译成 order by'topicId'这样就报错了,用$的结果就是这样 order by topicId。18.ibatis通用sql语句可以单独定义如:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PageHelper是一个用于在MyBatis中进行分页查询的插件。通过配置PageHelper,可以方便地实现分页功能。具体使用方法如下: 1. 在pom.xml文件中添加PageHelper和MySQL的JDBC数据库驱动的依赖。示例配置如下: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> ``` 2. 将默认的application.properties文件的后缀修改为“.yml”,即配置文件名称为:application.yml,并配置数据库连接等相关信息。示例配置如下: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/db_admin?useSSL=false username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver mybatis: type-aliases-package: com.pjb.entity configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: true lazy-loading-enabled: true aggressive-lazy-loading: false lazy-load-trigger-methods: "" cache-enabled: true pagehelper: helper-dialect: mysql reasonable: true support-methods-arguments: true ``` 3. 在Mapper接口的方法参数中添加分页参数,PageHelper会自动根据配置的字段中取值,并实现自动分页。示例代码如下: ```java public interface UserMapper { List<User> getUserList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize); } ``` 通过以上步骤,就可以使用PageHelper进行分页查询了。当调用getUserList方法时,传入pageNum和pageSize参数,即可实现分页查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值