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

1、spring配置文件applicationContext.xml,代码如下:

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jee 
        http://www.springframework.org/schema/jee/spring-jee.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd  
      http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd  
      http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> 
    
     
     
    
     
 
            ${jdbc.driverClassName}  
       
 
         
            ${jdbc.url}  
       
 
         
            ${jdbc.username}  
       
 
         
            ${jdbc.password}  
       
 
          
         
            ${jdbc.c3p0.acquireIncrement}  
       
   
          
         
            ${jdbc.c3p0.initialPoolSize}  
       
 
         
            ${jdbc.c3p0.minPoolSize}  
       
 
         
            ${jdbc.c3p0.maxPoolSize}  
       
 
          
         
            ${jdbc.c3p0.maxIdleTime}  
       
 
          
         
            ${jdbc.c3p0.idleConnectionTestPeriod}  
       
 
          
         
            ${jdbc.c3p0.maxStatements}  
       
 
   
 
    
     
         
         
   
 
    
     
       
   
 
    

 
   
 

 
   
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
abstract="false" lazy-init="default" autowire="default">
 




















 
           
   
 


2、jdbc.properties配置文件代码如下:

jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@172.20.41.214:1521:ifims
jdbc.username=IFIMS
jdbc.password=IFIMSDEV

#c3p0
jdbc.c3p0.minPoolSize=50
jdbc.c3p0.maxPoolSize=300
jdbc.c3p0.initialPoolSize=100
jdbc.c3p0.maxIdleTime=10
jdbc.c3p0.acquireIncrement=3
jdbc.c3p0.maxStatements=0
jdbc.c3p0.maxStatementsPerConnection=100
jdbc.c3p0.idleConnectionTestPeriod=60
jdbc.c3p0.acquireRetryAttempts=30
jdbc.c3p0.breakAfterAcquireFailure=false
jdbc.c3p0.testConnectionOnCheckout=false


3、myBatis映射文件myBatis-config.xml,代码如下:

 
    "http://mybatis.org/dtd/mybatis-3-config.dtd">    
  
     
         
   
 
     
          
   
  


4、实体类TSysUsers.java,代码如下:

public class TSysUsers implements java.io.Serializable {
// Fields
private Long userid;
private TSysDepart TSysDepart;
private String loginname;
private String loginpwd;
private String username;
private String cellphone;
private String deptPort;

// Property accessors
public Long getUserid() {
return this.userid;
}
public void setUserid(Long userid) {
this.userid = userid;
}
public TSysDepart getTSysDepart() {
return this.TSysDepart;
}
public void setTSysDepart(TSysDepart TSysDepart) {
this.TSysDepart = TSysDepart;
}
public String getLoginname() {
return this.loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getLoginpwd() {
return this.loginpwd;
}
public void setLoginpwd(String loginpwd) {
this.loginpwd = loginpwd;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getCellphone() {
return this.cellphone;
}
public void setCellphone(String cellphone) {
this.cellphone = cellphone;
}
public String getDeptPort() {
return deptPort;
}
public void setDeptPort(String deptPort) {
this.deptPort = deptPort;
}

}


5、sql映射配置文件TSysUsers.xml,代码如下:

 
    "-//mybatis.org//DTD Mapper 3.0//EN"    
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">    
 
     
 
 


6、public interface UserDao {
/**
* 登录
* @param loginName 用户名
* @return 用户
*/
public TSysUsers findByAccount(String loginName);
}


7、@Repository("userDaoImpl")
public class UserDaoImpl extends BaseDaoImpl implements UserDao {
@Override
public TSysUsers findByAccount(String loginName) {
TSysUsers tSysUsers = new TSysUsers();
tSysUsers.setLoginname(loginName);
List users= null;
try {
users = this.sqlSession.selectList("TSysUsers.queryByLoginName", tSysUsers);
} catch (Exception e) {
e.printStackTrace();
}
return users.size() == 0 ? null : users.get(users.size()-1);
}

}


8、public abstract class BaseDaoImpl {
      @Autowired
protected SqlSessionTemplate sqlSession;
    
    public DataGrid queryBase(String sqlId, String countSqlId, Map params, Pager pager) {
        DataGrid result = new DataGrid();
        if (countSqlId != null) {
            result.setTotal(queryCount(countSqlId, params));
        }
        result.setRows(this.sqlSession.selectList(sqlId, params));
        return result;
    }
    
    public Long queryCount(String countSqlId, Map params) {
    Long count =  this.sqlSession.selectOne(countSqlId, params);
    eturn count;
    }
}


其中8中获取SqlSession连接对象也可以这样写:

public abstract class BaseDaoImpl {
       @Autowired
protected SqlSessionFactory sqlSessionFactory;

public getSqlSession() {

return sqlSessionFactory.openSession();

}

}

这样写之后,7中的UserDaoImpl就要变成下面的写法:

@Repository("userDaoImpl")
public class UserDaoImpl extends BaseDaoImpl implements UserDao {

@Override
public TSysUsers findByAccount(String loginName) {
TSysUsers tSysUsers = new TSysUsers();
tSysUsers.setLoginname(loginName);
List users = null;

SqlSession sqlSession = null;
try {

sqlSession = this.getSqlSession();

users = sqlSession .selectList("TSysUsers.queryByLoginName", tSysUsers);
} catch (Exception e) {
e.printStackTrace();
} finally {

sqlSession.close();

}

return users.size() == 0 ? null : users.get(users.size()-1);
}

}


比较两种写法,第一种更好,因为SqlSessionTemplate你不必手动关闭,SqlSessionTemplate是一个代理类,内部他会为每次请求创建线程安全的sqlsession,并与Spring进行集成.在你的方法调用完毕以后他会自动关闭的,而第二种写法就要手动关闭连接,而且通过SqlSessionFactory获取Sqlsession对象不如SqlSessionTemplate速度快、效率高。











你可能感兴趣的:(myBatis获取SqlSession连接对象的两种方式)