开篇博客 - 优化NAYNEHC大神写的一段Java代码。

针对NAYNHC大神的一段Java程序代码进行了优化,优化后的代码更加的简洁,并且还避免了JDBC链接池泄露的问题。java

优化点:mysql

1)在select操做的方法里面,出现异常的时候,我的以为是不须要执行session.rollback()操做的。sql

2)在全部数据库链接使用完成之后,我的以为须要执行下session.close()方法,将使用完成的链接从新返还到链接池,以免数据库链接的泄露。数据库

如下为优化后的代码:apache

package com.cy.mybatis.tools;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.cy.mybatis.beans.UserBean;
import com.cy.mybatis.mapper.UserMapper;
import com.cy.mybatis.service.DBTools;

public class UserService {
    
    public static void main(String[] args) {
//      insertUser();
//      deleteUser();
//      selectUserById();
        selectAllUser();
    }
    
    /**
     * 新增用户
     */
    private static void insertUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        UserBean user = new UserBean("lisi", "5432109876", 1100.0);
        try {
            mapper.insertUser(user);
            session.commit();
            session.close();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }
    
    /**
     * 删除用户
     */
    private static void deleteUser(){
        SqlSession session=DBTools.getSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        try {
            mapper.deleteUser(1);
            // 增删改须要commit()会话;
            session.commit();
            session.close(); 
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }
    
    /**
     * 根据id查询用户
     */
    private static void selectUserById(){
        SqlSession session=DBTools.getSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        try {
            UserBean user = mapper.selectUserById(2);
       session.commit(); session.close(); }
catch (Exception e) { e.printStackTrace(); } } /** * 查询全部的用户 */ private static void selectAllUser(){ SqlSession session=DBTools.getSession(); UserMapper mapper=session.getMapper(UserMapper.class); try { List<UserBean> user=mapper.selectAllUser(); System.out.println("ResultSet has " + user.size() +" rows."); for(int i=0; i<user.size();i++){ System.out.println("ID="+user.get(i).getId()+" | " + "username="+user.get(i).getUsername()+" | " + "password="+user.get(i).getPassword()+" | " + "account="+user.get(i).getAccount()); }
       session.commit(); session.close(); }
catch (Exception e) { e.printStackTrace(); } } }

 下面是增长session.close()方法后,在日志里面记录到的MyBatis将使用过的JDBC链接返还到链接池的记录。session

1
2
3
4
5
6
7
8
9
 
2019-2-15 15:38:55[DEBUG](JdbcTransaction.java:137) Opening JDBC Connection
2019-2-15 15:38:56[DEBUG](PooledDataSource.java:406) Created connection 372038137.
2019-2-15 15:38:56[DEBUG](JdbcTransaction.java:101) Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@162cd9f9]
2019-2-15 15:38:56[DEBUG](BaseJdbcLogger.java:159) == >   Preparing: select * from t_user 
2019-2-15 15:38:56[DEBUG](BaseJdbcLogger.java:159) ==
>  Parameters: 
2019-2-15 15:38:56[DEBUG](BaseJdbcLogger.java:159) 
< ==      Total: 3
2019-2-15 15:38:56[DEBUG](JdbcTransaction.java:123) Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@162cd9f9]
2019-2-15 15:38:56[DEBUG](JdbcTransaction.java:91) Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@162cd9f9]
2019-2-15 15:38:56[DEBUG](PooledDataSource.java:363) Returned connection 372038137 to pool.

 关键字:MyBatis,JDBC,链接池泄露,链接回收mybatis

相关文章
相关标签/搜索