Spring Mybatis 在service层不关闭sqlsession连接池一次获取分页查询的总数量和数据

标签: spring mybatis 分页
9人阅读 评论(0) 收藏 举报
分类:

有时候需要分页查询的同时获取查询的总数,然后使用的时候发现在同一个方法里面对同一个dao进行操作查询,在mybatis的日志发现是进行了两次连接,两次释放session,又想到连接是相当耗费资源的,所以就想优化一下。
优化后的代码如下,后期还可以对countByExample进行优化,如果在Redis里面有缓存,直接取缓存就OK了。

/*部分必须的引入*/
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.log4j.Logger;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

@Service
public class MessageServiceImpl implements MessageService {
    private Logger logger = Logger.getLogger(getClass());
    @Autowired
    private MessageMapper msgMapper;

    @Autowired
    private SqlSessionFactory sqlSessionFactory;
    @Override
    public PageResult<Message> getMessage(PageResult<Message> pageResult, int uid) {

        MessageExample example = new MessageExample();
        MessageExample.Criteria criteria = example.createCriteria();
        criteria.andSuidEqualTo(uid);
        /**
         *  在这里不用关闭连接池,接着进行第二次查询
         *
         * */

        SqlSession sqlSession = sqlSessionFactory.openSession();
        try{
        MessageMapper messageMapper = sqlSession.getMapper(MessageMapper.class);
        /*提前获取数量*/
        pageResult.setCount(messageMapper.countByExample(example));

        /*然后配置分页*/
        example.setLimit(pageResult.getLimit());
        example.setOffset(pageResult.getOffset());
        pageResult.setList(messageMapper.selectByExample(example));
    }finally{
        sqlSession.close();
    }
        return pageResult;
    }

在这里没有使用上面定义的msgMapper,而是使用通过SqlSession 获取class文件创建的mapper,从而实现了一次连接,两次查询。

查看评论

spring整合mybatis sqlSession释放问题

http://www.cnblogs.com/daxin/p/3544188.html http://ju.outofmemory.cn/entry/62780 http://fangjian0423...
  • u011686226
  • u011686226
  • 2016-09-29 18:12:24
  • 2943

浅谈Sqlsession和数据库的连接池

之前mybatis关于Sqlsession的事务的提交,有很多的不解,通过这两天的努力,大致了解了下,分享下,也顺便总结下: 其实我们早就应该知道,在使用mybatis的时候,事务提交的时候...
  • u011239468
  • u011239468
  • 2016-03-31 21:53:37
  • 9564

mybatis中SqlSession一定要关闭

今天在使用mybatis查询数据时,出现了一个很奇怪的问题。同一条sql语句,查询时快时慢,并且有一定的规律性,大概每10次查询中有一次会特别特别的慢,快的只需要1ms,慢的要20000ms,sql代...
  • jeryjeryjery
  • jeryjeryjery
  • 2018-01-20 20:57:37
  • 1004

Mybatis源码分析之SqlSessionFactory,SqlSession和连接池

简单介绍下mybatis获取SqlSession和进行sql操作的例子 InputStream inputStream = Resources.getResourceAsStream(resou...
  • hcy54213
  • hcy54213
  • 2017-04-25 14:09:33
  • 2964

mybatis3.1分页自动添加总数

1.mybatis默认分页是内存分页的   类似于下面的DAO签名方法,只要有RowBounds入参,Mybatis即会自动内存分页:  Java代码   @Select("...
  • whatareyouding
  • whatareyouding
  • 2015-12-15 13:49:26
  • 2786

myBatis获取SqlSession连接对象的两种方式

1、spring配置文件applicationContext.xml,代码如下:     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instan...
  • u010643307
  • u010643307
  • 2017-05-18 11:05:30
  • 2606

资料 mybatis 一条语句 分页查询(同时获得符合条件的总记录数)

整理 04-mybatis 一条语句 分页查询。 获得总条数 字段 count select * from  ( select rownum rm ,t.*  from ( sele...
  • huangsong_Java
  • huangsong_Java
  • 2016-11-28 16:37:16
  • 3131

MyBatis多条件分页查询,返回总记录数

select count(1) from article        and markdown like #{paramEntity.markdown}     and title like #{...
  • plgy_Y
  • plgy_Y
  • 2017-05-25 12:50:22
  • 1643

spring+mybatis通用dao层、service层的一些个人理解与实现

首先声明,本文所述只是鉴于本人在开发一些应用时的心得,仅供参考。 1、现在的绝大多数web应用,通常都以action、service、dao三层去组织代码,这样划分结构很清晰,分工明确 2...
  • acweilisky0825
  • acweilisky0825
  • 2016-07-26 11:04:36
  • 14568

MyBatis集合Spring(二)之SqlSession

一旦我们配置了SqlSessionFactory的bean,我们需要配置SqlSessionTemplate的bean,它是Spring的Bean中线程安全的对象,包含了线程安全的SqlSession...
  • owen_william
  • owen_william
  • 2016-07-03 16:07:04
  • 1408
    个人资料
    持之以恒
    等级:
    访问量: 2万+
    积分: 476
    排名: 10万+
    最新评论