一、MySQL和Oracle中分页的sql语句
MySQL中:(主要利用limit关键字)
select * from table_name limit start,size;
Oracle:(主要利用了子查询)
select emp_xx.* from (select rownum id,emp.* from emp where rownum < end) emp_xx where id > start ;
二、使用ThreadLocal的提高插入数据库的性能问题
今天在学习mybatis时,发现使用for循环向数据库插入20条数据的时候,发现特别的慢,将近花了20的时间。此时sqlSession的获取是如下的:
public static SqlSession getSqlSession(){
SqlSession sqlSession = null ;
if(sqlSession == null ){
sqlSession = sqlSessionFactory.openSession() ;
}
return sqlSession ;
}
接着,我使用了ThreadLocal了封装sqlSession
private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>() ;
获取sqlSession
/**
* 获取sqlSession
* @return
*/
public static SqlSession getSqlSession(){
SqlSession sqlSession = threadLocal.get() ;
if(sqlSession == null ){
sqlSession = sqlSessionFactory.openSession() ;
threadLocal.set(sqlSession) ;
}
return sqlSession ;
}
再次使用for循环插入20条数据,发现才用了2s。
注意:在使用ThreadLocal封装SQLSession的时,如果需要关闭sqlSession,必须调用如下方法,否则会报错。
threadLocal.remove() ;