applicationContext.xml
<!-- 配置事务特性 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置哪些类的方法需要进行事务管理 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* add*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/> </aop:config>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://localhost:1433;databasename=test"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
<bean id="userDAO" class="dao.imp.BeanDaoImp"> <property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"><value>classpath:SqlMapConfig.xml</value></property> <property name="dataSource" ref="dataSource"></property>
</bean>SqlMapConfig.xml
<sqlMapConfig> <settings lazyLoadingEnabled="true" useStatementNamespaces="true" />
<sqlMap resource="com/tx/vo/Users.xml"/></sqlMapConfig>Users.xml
<sqlMap namespace="Users"> <typeAlias alias="users" type="com.tx.vo.Users"/> <cacheModel id="usersCache" type="MEMORY" readOnly="false" serialize="true">
<flushInterval hours="24"/>
<flushOnExecute statement="Users.update"/>
<flushOnExecute statement="Users.insert"/>
<flushOnExecute statement="Users.delete"/>
</cacheModel> <resultMap id="usersResult" class="users">
<result property="id" column="id"/>
<result property="username" column="username"/>
<result property="age" column="age"/>
</resultMap> <!-- hsql db used for this example capitalizes col names
so Map will have them as all caps -->
<select id="getAll" resultClass="users"><!-- cacheModel="usersCache" 这个加了报错 -->
SELECT
id,
username,
age
FROM users
</select> <select id="getById" resultMap="usersResult" parameterClass="java.lang.Integer">
SELECT id,username, age
FROM users
WHERE id = #value#
</select> <update id="update" parameterClass="users">
UPDATE users
SET
username = #username#,
age = #age#
WHERE id = #id#
</update> <insert id="insert" parameterClass="users" >
INSERT INTO users (username, age)
VALUES (#username#, #age#)
</insert> <delete id="delete" parameterClass="java.lang.Integer">
DELETE FROM users WHERE id = #value#
</delete>
</sqlMap>dao.imp.BeanDaoImp.java
public class BeanDaoImp extends SqlMapClientDaoSupport implements BeanDao { public void addBean(Users u) {
this.getSqlMapClientTemplate().insert("Users.insert", u);
}
}
测试类
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanDao dao = (BeanDao) ctx.getBean("userDAO");
Users u = new Users();
u.setId(22);
u.setUsername("tx");
dao.addBean(u);我现在程序执行到
this.getSqlMapClientTemplate()都没事,一调this.getSqlMapClientTemplate().insert("Users.insert", u);
就出错
java.lang.NoSuchMethodError: com.ibatis.sqlmap.client.SqlMapSession.getCurrentConnection()Ljava/sql/Connection;
<!-- 配置事务特性 --> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED"/> <tx:method name="del*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置哪些类的方法需要进行事务管理 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* add*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod"/> </aop:config>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/> <property name="url" value="jdbc:sqlserver://localhost:1433;databasename=test"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean>
<bean id="userDAO" class="dao.imp.BeanDaoImp"> <property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> <property name="configLocation"><value>classpath:SqlMapConfig.xml</value></property> <property name="dataSource" ref="dataSource"></property>
</bean>SqlMapConfig.xml
<sqlMapConfig> <settings lazyLoadingEnabled="true" useStatementNamespaces="true" />
<sqlMap resource="com/tx/vo/Users.xml"/></sqlMapConfig>Users.xml
<sqlMap namespace="Users"> <typeAlias alias="users" type="com.tx.vo.Users"/> <cacheModel id="usersCache" type="MEMORY" readOnly="false" serialize="true">
<flushInterval hours="24"/>
<flushOnExecute statement="Users.update"/>
<flushOnExecute statement="Users.insert"/>
<flushOnExecute statement="Users.delete"/>
</cacheModel> <resultMap id="usersResult" class="users">
<result property="id" column="id"/>
<result property="username" column="username"/>
<result property="age" column="age"/>
</resultMap> <!-- hsql db used for this example capitalizes col names
so Map will have them as all caps -->
<select id="getAll" resultClass="users"><!-- cacheModel="usersCache" 这个加了报错 -->
SELECT
id,
username,
age
FROM users
</select> <select id="getById" resultMap="usersResult" parameterClass="java.lang.Integer">
SELECT id,username, age
FROM users
WHERE id = #value#
</select> <update id="update" parameterClass="users">
UPDATE users
SET
username = #username#,
age = #age#
WHERE id = #id#
</update> <insert id="insert" parameterClass="users" >
INSERT INTO users (username, age)
VALUES (#username#, #age#)
</insert> <delete id="delete" parameterClass="java.lang.Integer">
DELETE FROM users WHERE id = #value#
</delete>
</sqlMap>dao.imp.BeanDaoImp.java
public class BeanDaoImp extends SqlMapClientDaoSupport implements BeanDao { public void addBean(Users u) {
this.getSqlMapClientTemplate().insert("Users.insert", u);
}
}
测试类
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
BeanDao dao = (BeanDao) ctx.getBean("userDAO");
Users u = new Users();
u.setId(22);
u.setUsername("tx");
dao.addBean(u);我现在程序执行到
this.getSqlMapClientTemplate()都没事,一调this.getSqlMapClientTemplate().insert("Users.insert", u);
就出错
java.lang.NoSuchMethodError: com.ibatis.sqlmap.client.SqlMapSession.getCurrentConnection()Ljava/sql/Connection;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货