`
log_cd
  • 浏览: 1089258 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

spring ibatis入门

阅读更多
一、applicationContext.xml
<?xml version="1.0" encoding="UTF-8" ?>
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    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:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="     
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd     
       http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd    
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"   
       default-lazy-init="true">
       
       <!-- 配置事务特性 -->
	   <tx:advice id="txAdvice" transaction-manager="TrasanctionMagnager">
	        <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(* com.ibatis.manager.*.*(..))"/>
	      <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.mysql.jdbc.Driver"/>
	      <property name="url" value="jdbc:mysql://127.0.0.1/springapp"/>
	      <property name="username" value="root"/>
	      <property name="password" value="root"/>
	  </bean>

	  <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
          <property name="configLocation">
              <value>classpath:sqlMapConfig.xml</value>
          </property>
          <property name="dataSource" ref="dataSource"/> 
     </bean>
     
     
     <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">  
	    <constructor-arg>  
	        <ref bean="sqlMapClient"></ref>  
	    </constructor-arg>
	</bean>  
          
    <bean id="userDAO" class="com.ibatis.dao.impl.UserDAOImpl">
    	 <property name="sqlMapClient" ref="sqlMapClient"/>
	</bean>
    
</beans>


二、sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMapConfig      

    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      

    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>

    <settings 
 			cacheModelsEnabled="true"   
            enhancementEnabled="true"   
            errorTracingEnabled="true"   
            lazyLoadingEnabled="true"   
            maxRequests="32"   
            maxSessions="10"   
            maxTransactions="5"   
            useStatementNamespaces="false"/>
            
    <!-- 使用spring之后,数据源的配置移植到了spring上,所以iBATIS本身的配置可以取消 -->
    <sqlMap resource="com/ibatis/dao/impl/User.xml"/>

</sqlMapConfig>


三、User.java
package com.ibatis.model;

import java.io.Serializable;

public class User implements Serializable{
	private static final long serialVersionUID = 1L;
	
	private Integer id;
	private String username;
	private String password;
	
	public User() {
	}

	public Integer getId() {
		return this.id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}


四、User.xml
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE sqlMap      

    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      

    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="User">

 <!-- Use type aliases to avoid typing the full classname every time. -->

 <typeAlias alias="user" type="com.ibatis.model.User"/>

 <select id="selectAllUsers" resultClass="user">
	<![CDATA[ 
    	select * from t_user
    ]]>
 </select>

 <select id="selectUser" resultClass="user" parameterClass="int">
	<![CDATA[ 
	  	select * from t_user where id=#id#
    ]]>
 </select>

 <insert id="insertUser" parameterClass="user">
	<![CDATA[ 
	  insert into t_user values (
	       null,#username#,#password#
	  )
    ]]>
 </insert>

  <update id="updateUser" parameterClass="user">
	<![CDATA[ 
	  update t_user set username = #username#,password=#password#
	  where id=#id#
    ]]>
  </update>

 <delete id="deleteUser" parameterClass="int">
	<![CDATA[ 
	  delete from t_user where id=#id#
    ]]>
 </delete>

</sqlMap>


五、UserDao.java
package com.ibatis.dao;

import java.util.List;

import com.ibatis.model.User;

public interface UserDao {
	public void select(User user);
	
	public List findAll();
	
	public void delete(User user);
	
	public void save(User user);
	
	public void update(User user);
}


六、UserDaoImpl.java
package com.ibatis.dao.impl;

import java.util.List;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import com.ibatis.dao.UserDAO;
import com.ibatis.model.User;

public class UserDAOImpl extends SqlMapClientDaoSupport implements UserDAO {
	public void select(User user) {
		getSqlMapClientTemplate().delete("selectUser ", user.getId());
	}

	public List findAll() {
		return getSqlMapClientTemplate().queryForList("selectAllUsers",null);
	}

	public void delete(User user) {
		getSqlMapClientTemplate().delete("deleteUser", user.getId());
	}

	public void save(User user) {
		getSqlMapClientTemplate().insert("insertUser", user);
	}

	public void update(User user) {
		getSqlMapClientTemplate().update("updateUser", user);
	}

}


七、测试
package com.logcd.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ibatis.dao.UserDAO;
import com.ibatis.model.User;

import junit.framework.TestCase;

public class IbatisTest extends TestCase {

	private UserDAO userDAO; 
	
	protected void setUp() throws Exception {
		super.setUp();
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		userDAO = (UserDAO)context.getBean("userDAO");
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	@SuppressWarnings("unchecked")
	public void testUserService(){
		User usr = new User();
		usr.setUsername("User" + Math.round(Math.random()*1000));
		usr.setPassword("654321");
		userDAO.save(usr);
		
		List<User> list = userDAO.findAll();
		for(User user : list){
			System.out.println("UserName:" + user.getUsername());
		}
	}
}

八、iBatis 控制台输出 sql:log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout 

九、运行期从iBatis中取出sql
1.通过SqlMapClientDaoSupport,SqlMapClientImpl,MappedStatement,Sql,RequestScope等ibatis提供的类
   String sql = null;
   SqlMapClientImpl sqlmap = (SqlMapClientImpl) this.getSqlMapClient();
   MappedStatement stmt = sqlmap.getMappedStatement("getUserInfoList");
   Sql stmtSql = stmt.getSql();
  
   RequestScope requestScope = new RequestScope();
   requestScope.setStatement(stmt);
   sql = stmtSql.getSql(requestScope, companyId);
   System.out.println(sql);	

2.通过SqlMapExecutorDelegate,MappedStatement,Sql,RequestScope等ibatis提供的类
   SqlMapExecutorDelegate delegate=((ExtendedSqlMapClient)
    (getSqlMapClientTemplate().getSqlMapClient())).getDelegate();     
   
   MappedStatement ms = delegate.getMappedStatement("getUserInfoList");   
   Sql sql=ms.getSql(); 
   RequestScope requestScope = new RequestScope();
   requestScope.setStatement(ms);
   String sqlStr = sql.getSql(requestScope,companyId); 
   System.out.println(sqlStr); 

关于RequestScope
说明:
在websphere中,要注意DocType部分写法:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Employee">
	<select id="getEmployees" resultClass="java.util.HashMap">
		SELECT * FROM EMPLOYEE
	</select>
</sqlMap>


Spring+ibatis编程rollback
//设置一个回滚的点
Object create = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
//在要回滚的地方调用下面的方法就可以了
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(create);
//设置这个则是这个方法里的数据库操作全部回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

分享到:
评论
2 楼 archie2010 2011-04-02  
1 楼 sunofsummer 2010-10-24  
谢谢分享 不错

相关推荐

Global site tag (gtag.js) - Google Analytics