KoJun. 2024-04-11 16:25 采纳率: 0%
浏览 12
已结题

mybatis每次查询都生产一次sqlsession

如题,我每次查询sql的时候就会生成一个sqlsession.
而且查询很慢
这是我的查询的语句,他返回的是100条数据(我数据库里面的数据只有100条),

img

这是他的大小总和,大概600kb

img

这是每次查询都会创建的sqlsession语句

img

我已经配置了连接池,但是他好像没起作用,我是否配置正确

  • 写回答

4条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-04-11 16:33
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:每次查询SQL时都会创建一个SQLSession,查询很慢,已配置连接池但好像没起作用,是否配置正确? 回答:
    1. 对于每次查询都会创建一个SQLSession的问题,可以考虑将SQLSession的创建放入方法外,改为使用注入的方式,例如使用Spring中的Mybatis-Spring插件实现。这样可以避免每次查询都创建一个SQLSession的问题,提高查询效率。 示例代码:
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private SqlSessionFactory sqlSessionFactory;
        @Override
        public List<User> queryUsers() {
            try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
                // 使用SqlSession进行查询操作
                UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
                return userMapper.queryUsers();
            }
        }
    }
    
    1. 对于查询速度慢的问题,可以考虑使用Mybatis提供的二级缓存进行优化。二级缓存是Mybatis提供的全局性的缓存,可以避免频繁从数据库中查询数据,提高查询效率。需要注意的是,启用二级缓存需要在mybatis-config.xml中进行配置。 示例代码: 在mybatis-config.xml中添加如下配置:
    <cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>
    
    1. 对于连接池不起作用的问题,可以检查连接池的配置是否正确。正确的配置应该包括以下几个方面:
    2. 配置数据源的基本信息,如数据库连接地址、用户名、密码等;
    3. 配置连接池的大小、最大等待时间等参数;
    4. 配置数据库连接的其他属性,如自动提交、事务隔离级别等。 正确的配置可以参考以下示例:
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
        <property name="driverClassName" value="${driverClassName}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="initialSize" value="5"/>
        <property name="minIdle" value="5"/>
        <property name="maxActive" value="20"/>
        <property name="maxWait" value="60000"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
        <property name="validationQuery" value="select 1"/>
        <property name="testWhileIdle" value="true"/>
        <property name="testOnBorrow" value="false"/>
        <property name="testOnReturn" value="false"/>
        <property name="removeAbandoned" value="true"/>
        <property name="removeAbandonedTimeout" value="60"/>
        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
        <property name="minEvictableIdleTimeMillis" value="300000"/>
        <property name="connectionProperties" value="clientEncoding=UTF-8"/>
    </bean>
    

    以上就是解决每次查询都会创建SQLSession、查询速度慢以及连接池不起作用的一些方法和建议。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月18日
  • 创建了问题 4月11日

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?