使用ibatis实现增删改查

有的时候为了适应多人开发,我们可能会把配置文件放在文件夹里。这样管理起来就方便了,这一点在开发中是共同的。下面就顺便来弄一下这个。这次就把ibatis的配置文件放在名称为“mymap”的文件夹里,pojo的配置文件就把他放在“mapping”文件夹(包)里。这次的配置文件我加了注释,如下所示

<?xml version="1.0" encoding="UTF-8" ?> 
 <!DOCTYPE sqlMapConfig  PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
     <!--   
       1. cacheModelsEnabled 是否启动sqlMapClient上的缓存机制;  
       2. enhancementEnabled是否针对POJO启用字节码增强机制以提升getter/setter的调用效能,  
                避免使用Java Reflect所带来的性能开销,同时也为Lazy Loading带来了极大的性能提升;  
        3. errorTracingEnabled 是否启用错误日志;在开发期间建议设为“true”以方便调试  
        4. lazyLoadingEnabled 是否启动延迟加载机制  
        5. maxRequests 最大并发请求数(Statement并发数)  
        5. maxTransactions 最大并发事务  
        6. maxSessions 最大Session数,即当前最大允许的并发sqlMapClient数(介于maxRequests和maxTransactions之间)  
        7. useStatementNamespaces 是否使用Statement命名空间(为true时,需要追加命名空间)  
    -->  
    
	<settings cacheModelsEnabled="true" enhancementEnabled="true"
		lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
		maxTransactions="5" useStatementNamespaces="false" />
		<!--   
        transactionManager 节点定义了ibatis的事务管理器  
        1. JDBC:通过传统JDBC Connection.commit/rollback实现事务支持  
        2. JTA:使用容器提供的JTA服务实现全局事务管理  
        3. EXTERNAL:外部事务管理,如EJB中使用ibatis,通过EJB的部署配置即可实现自动事务管理机制  
                此时ibatis将所有事务委托给外部容器管理   
     -->  
		
	<transactionManager type="JDBC">
	  <!--   
            dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性  
            type属性: dataSource节点的type属性指定了dataSource的实现类型  
            1. SIMPLE:  
                SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制, 对应ibatis 实现类为  
                com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。  
            2. DBCP:  
                基于Apache DBCP连接池组件实现的DataSource 封装,当无容器提供DataSource 服务时,  
                建议使用该选项,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。  
            3. JNDI:  
               使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定的JNDI Name 从容器中获取。  
                对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。  
         -->  
	
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver" />
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mldn" />
			<property name="JDBC.Username" value="root" />
			<property name="JDBC.Password" value="123456" />
		</dataSource>
	</transactionManager>
	<sqlMap resource="mapping/Account.xml" />
</sqlMapConfig>

那些什么vo类就不写了,还是上次的那个。下面来写一下pojo的配置文件

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE sqlMap  PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Account">
	<select id="getAccount" parameterClass="java.lang.String"
		resultClass="org.lxh.vo.Account"> select * from Account 
	</select>
	<insert id="createAccount" parameterClass="org.lxh.vo.Account">
		insert into Account(username, password) values ( #username#, #password# )
	</insert>
	<delete id="deleteAccount" parameterClass="java.lang.Integer">
		delete from Account where id=#id#
	</delete>
	<update id="updateAccount" parameterClass="org.lxh.vo.Account">
		update Account set username=#username#,password=#password# where id=#id#
	</update>

</sqlMap>

这次我把一部分代码做了封装,这样可以减少一些代码。

package org.lxh.util;

import java.io.IOException;
import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public final class GetSqlMap {
	public static SqlMapClient getMap(String path){
		SqlMapClient sqlMap = null;  
		Reader reader=null;
		
			try {
				reader = Resources.getResourceAsReader (path);
				sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			} catch (IOException e) {
				
				e.printStackTrace();
			}
			return sqlMap;
		
	
	}
	 
}

之后就是Junit了,这个用起来方便

package test;


import java.io.Reader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.junit.BeforeClass;
import org.lxh.util.GetSqlMap;
import org.lxh.vo.Account;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class Test{
	
    
	
    @org.junit.Test public void insert(){
    
    	try {   
    		
    		
    		
    		Account account = new Account();       
    		account.setUsername("micheal");       
    		account.setPassword("1234");       
    		GetSqlMap.getMap("mymap/sqlmap.xml").insert("createAccount", account);   
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    }
    
    @org.junit.Test public void delete(){
        
    	try {   
    		
    		
    		SqlMapClient sqlMap = null;  
    		Reader reader = Resources.getResourceAsReader ("mymap/sqlmap.xml");
    		sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);     
    	   
    		sqlMap.delete("deleteAccount", 3);
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    }
    @org.junit.Test public void query() {
      
    	try {   
    		 
    	
			ArrayList all=(ArrayList) GetSqlMap.getMap("mymap/sqlmap.xml").queryForList("getAccount");
			Iterator it=all.iterator();
			while(it.hasNext()){
			

				Account account=(Account)it.next();
				System.out.println(account.getUsername());
				System.out.println(account.getPassword());
			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    }
 @org.junit.Test public void update(){
        
    	try {   
    		
    		
    		
    	    Account ac=new Account();
    	    ac.setId(2);
    	    ac.setUsername("陈瑞银");
    	    ac.setPassword("modify");
    	    GetSqlMap.getMap("mymap/sqlmap.xml").update("updateAccount", ac);
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    }
}

对于查询,我这里查询的是多列,单列的也可以。在pojo的配置文件里改一下resultClass就可以了,在查询的时候用queryForObject方法就可以了。这次的东西也比较简单,

下面这个是其中一个运行效果图



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值