ibatis多个dataSource配置

    技术2022-05-19  21

    ⑶ dataSource节点dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性。type属性: dataSource节点的type属性指定了dataSource的实现类型。可选项目:Ø SIMPLE:SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制, 对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。Ø DBCP:基于Apache DBCP 连接池组件实现的DataSource 封装,当无容器提供DataSource 服务时,建议使用该选项,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。Ø JNDI:使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定的JNDI Name 从容器中获取。对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。

    dataSource的子节点说明(SIMPLE&DBCP):

    参数 描述JDBC.Driver JDBC 驱动。如:org.gjt.mm.mysql.DriverJDBC.ConnectionURL 数据库URL。如:jdbc:mysql://localhost/sample如果用的是SQLServer JDBC Driver,需要在url后追加SelectMethod=Cursor以获得JDBC事务的多statement支持。JDBC.Username: 数据库用户名JDBC.Password: 数据库用户密码Pool.MaximumActiveConnections:数据库连接池可维持的最大容量。Pool.MaximumIdleConnections:数据库连接池中允许的挂起(idle)连接数。以上子节点适用于SIMPLE 和DBCP 模式,分别针对SIMPLE 和DBCP 模式的DataSource私有配置节点如下:SIMPLE:参数 描述Pool.MaximumCheckoutTime数据库联接池中,连接被某个任务所允许占用的最大时间,如果超过这个时间限定,连接将被强制收回。(毫秒)Pool.TimeToWait 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒)Pool.PingQuery 数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态。Pool.PingEnabled 是否允许检测连接状态。Pool.PingConnectionsOlderThan对持续连接时间超过设定值(毫秒)的连接进行检测。Pool.PingConnectionsNotUsedFor 对空闲超过设定值(毫秒)的连接进行检测。DBCP:参数 描述Pool.MaximumWait 当线程试图从连接池中获取连接时,连接池中无可用连接可供使用,此时线程将进入等待状态,直到池中出现空闲连接。此参数设定了线程所允许等待的最长时间。(毫秒)Pool.ValidationQuery 数据库连接状态检测语句。某些数据库在连接在某段时间持续处于空闲状态时会将其断开。而连接池管理器将通过此语句检测池中连接是否可用。检测语句应该是一个最简化的无逻辑SQL。如“select 1 from t_user”,如果执行此语句成功,连接池管理器将认为此连接处于可用状态。Pool.LogAbandoned 当数据库连接被废弃时,是否打印日志。Pool.RemoveAbandonedTimeout数据库连接被废弃的最大超时时间Pool.RemoveAbandoned 当连接空闲时间超过RemoveAbandonedTimeout时,是否将其废弃。JNDI由于大部分配置是在应用服务器中进行,因此ibatis中的配置相对简单,下面是分别使用JDBC和JTA事务管理的JDNI配置:使用JDBC事务管理的JNDI DataSource配置<transactionManager type="JDBC" ><dataSource type="JNDI"><property name="DataSource"value="java:comp/env/jdbc/myDataSource"/></dataSource></transactionManager><transactionManager type="JTA" ><property name="UserTransaction"value="java:/ctx/con/UserTransaction"/><dataSource type="JNDI"><property name="DataSource"value="java:comp/env/jdbc/myDataSource"/></dataSource></transactionManager>⑷ sqlMap节点sqlMap 节点指定了映射文件的位置,配置中可出现多个sqlMap 节点,以指定项目内所包含的所有映射文件。5.编写POJO类:public class User implements Serializable {private Integer id;private String name;private Integer sex;private Set addresses = new HashSet();/** default constructor */public User() {}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Integer getSex() {return this.sex;}public void setSex(Integer sex) {this.sex = sex;}}6.编写映射文件User.xml如下:<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE sqlMapPUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN""http://www.ibatis.com/dtd/sql-map-2.dtd"><sqlMap namespace="User"><typeAlias alias="user" type="com.ibatis.sample.User"/><select id="getUser"parameterClass="java.lang.String"resultClass="user"><![CDATA[selectname,sexfrom t_userwhere name = #name#]]></select><update id="updateUser"parameterClass="user"><![CDATA[UPDATE t_userSETname=#name#,sex=#sex#WHERE id = #id#]]></update><insert id="insertUser"parameterClass="user">INSERT INTO t_user (name,sex)VALUES (#name#,#sex#)</insert><delete id="deleteUser"parameterClass="java.lang.String">delete from t_userwhere id = #value#</delete></sqlMap>7.编写操作类,部分代码如下:String resource ="com/ibatis/sample/SqlMapConfig.xml";Reader reader;reader = Resources.getResourceAsReader(resource);XmlSqlMapClientBuilder xmlBuilder =new XmlSqlMapClientBuilder();SqlMapClient sqlMap = xmlBuilder.buildSqlMap(reader);//sqlMap系统初始化完毕,开始执行update操作try{sqlMap.startTransaction();User user = new User();user.setId(new Integer(1));user.setName("Erica");user.setSex(new Integer(1));sqlMap.update("updateUser",user);sqlMap.commitTransaction();finally{sqlMap.endTransaction();}


    最新回复(0)