Ibatis之DAO应用

Posted on 2009-10-19 13:14 H2O 阅读(1260) 评论(0)  编辑  收藏 所属分类: DataBase

1.来一个Person类

package com.Jdnis.ibatis.model;   
import java.io.Serializable;   
import java.sql.Date;   
public class Person implements Serializable {   
    
private static final long serialVersionUID = 1L;   
    
private int id ;   
    
private String firstName ;   
    
private String lastName ;   
    
private Date birthDate = new Date(1900,1,1);;   
    
private double weight ;   
    
private double height ;   
    
public int getId() {   
        
return id;   
    }
   
    
public void setId(int id) {   
        
this.id = id;   
    }
   
    
public String getFirstName() {   
        
return firstName;   
    }
   
    
public void setFirstName(String firstName) {   
        
this.firstName = firstName;   
    }
   
    
public String getLastName() {   
        
return lastName;   
    }
   
    
public void setLastName(String lastName) {   
        
this.lastName = lastName;   
    }
   
    
public Date getBirthDate() {   
        
return birthDate;   
    }
   
    
public void setBirthDate(Date birthDate) {   
        
this.birthDate = birthDate;   
    }
   
    
public double getWeight() {   
        
return weight;   
    }
   
    
public void setWeight(double weight) {   
        
this.weight = weight;   
    }
   
    
public double getHeight() {   
        
return height;   
    }
   
    
public void setHeight(double height) {   
        
this.height = height;   
    }
   
}
  
2.oop编程中,面向接口编程是一种很好的编程风格。在这一步骤中,定义Person实例的一个操作接口:
package com.Jdnis.ibatis.interfaces;   
import java.util.List;   
import com.ibatis.dao.client.Dao;   
import com.Jdnis.ibatis.model.Person;   
public interface PersonInterface extends Dao{   
    
public void insertPerson(Person p);   
    
public void updatePerson(Person p);   
    
public List selectAllPerson( );   
}
  
3.对接口的实现类
package com.Jdnis.ibatis.interfaces;   
import java.sql.SQLException;   
import java.util.List;   
import com.ibatis.dao.client.DaoManager;   
import com.ibatis.dao.client.template.SqlMapDaoTemplate;   
import com.Jdnis.ibatis.model.Person;   
public class PersonImpl extends SqlMapDaoTemplate implements PersonInterface {   
    
public PersonImpl(DaoManager daoManager) {   
        
super(daoManager);   
        
// TODO Auto-generated constructor stub   
    }
   
    
public void insertPerson(Person p) {   
        
// TODO Auto-generated method stub   
        try {   
            
this.getSqlMapExecutor().insert("insertPerson",p);   
            System.out.println(
"数据插入成功!");   
        }
 catch (SQLException e) {   
            
// TODO Auto-generated catch block   
            System.out.println("插入出错,主键冲突!");   
        }
   
    }
   
    
public void updatePerson(Person p) {   
        
// TODO Auto-generated method stub   
        try {   
            
this.getSqlMapExecutor().update("updatePerson",p);   
        }
 catch (SQLException e) {   
            
// TODO Auto-generated catch block   
            e.printStackTrace();   
        }
   
    }
   
    
public List selectAllPerson() {   
        
// TODO Auto-generated method stub   
        return queryForList("selectAllPerson",null);   
    }
   
}
  

4.配置person.xml文件:实现对象与数据库的映射
<?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="Person">   
   
<!-- 缓存 -->   
   
<typeAlias alias="person" type="com.Jdnis.ibatis.model.Person" />   
   
<parameterMap id="insert_person" class="person">   
      
<parameter property="id" jdbcType="int" />   
      
<parameter property="firstName" jdbcType="varchar"/>   
      
<parameter property="lastName" jdbcType="varchar"/>   
      
<parameter property="birthDate"  jdbcType="Date"/>   
      
<parameter property="weight" jdbcType="double" />   
      
<parameter property="height" jdbcType="double" />   
   
</parameterMap>   
   
<resultMap id="allPersons" class="person">   
      
<result property="id" column="per_id" />   
      
<result property="firstName" column="per_first_name" />   
      
<result property="lastName" column="per_last_name" />   
      
<result property="birthDate" column="per_birth_date" />   
      
<result property="weight" column="weightInKilograms" />   
      
<result property="height" column="heightInMeters" />   
   
</resultMap>   
      
   
<statement id="insertPerson" parameterMap="insert_person">   
     INSERT INTO persons VALUES(
?,?,?,?,?,?)   
   
</statement>   
   
<statement id="selectAllPerson" resultMap="allPersons">   
     
<![CDATA[select * from persons]]>   
   
</statement>   
   
<statement id="updatePerson" parameterClass="person">   
     
<![CDATA[update persons set per_first_name=#firstName#,per_last_Name=#lastName#,per_birth_date=#birthDate#,weightInKilograms=#weight#,heightInMeters=#height# where per_id=#id#]]>   
   
</statement>   
</sqlMap>  
5.SqlMapConfig.xml文件的配置:配置数据源
<?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>   
  
<!-- 地方i -->   
  
<settings cacheModelsEnabled="true"  
              enhancementEnabled
="true"  
              lazyLoadingEnabled
="true"    
              errorTracingEnabled
="true"    
              maxRequests
="32"  
              maxSessions
="10"    
              maxTransactions
="5"    
              useStatementNamespaces
="false"  
    
/>   
    
<transactionManager type="JDBC">   
        
<dataSource type="SIMPLE">   
            
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />   
            
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/person" />   
            
<property name="JDBC.Username" value="root" />   
            
<property name="JDBC.Password" value="root" />   
            
<property name="Pool.MaximumActiveConnections" value="10" />   
            
<property name="Pool.MaximumIdleConnections" value="5" />   
            
<property name="Pool.MaximumCheckoutTime" value="120000" />   
            
<property name="Pool.TimeToWait" value="500" />   
            
<property name="Pool.PingQuery" value="select 1 from sample" />   
            
<property name="Pool.PingEnabled" value="false" />   
            
<property name="Pool.PingConnectionsOlderThan" value="1" />   
            
<property name="Pool.PingConnectionsNotUsedFor" value="1" />   
        
</dataSource>   
    
</transactionManager>      
   
<sqlMap resource="com/Jdnis/ibatis/map/person.xml" />   
</sqlMapConfig>  

6.ibatisdao.xml文件的配置
<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE daoConfig PUBLIC "-//ibatis.apache.org//DTD DAO Configuration 2.0//EN" "http://ibatis.apache.org/dtd/dao-2.dtd">   
<daoConfig>   
  
<context>   
    
<transactionManager type="SQLMAP">   
      
<property name="SqlMapConfigResource" value="com/neusoft/ibatis/map/SqlMapConfig.xml" />   
    
</transactionManager>   
    
<dao interface="com.neusoft.ibatis.interfaces.PersonInterface" implementation="com.Jdnis.ibatis.interfaces.PersonImpl" />   
  
</context>   
</daoConfig>  

该文件的<transactionManager>元素将刚才的SqlMapConfig.xml相关联起来,使得三个配置文件都联系到了一起,<dao>元素的配置是将dao接口与其实现类关联起来。
7.dao.xml文件的解析
package com.Jdnis.ibatis.dao;   
import java.io.IOException;   
import java.io.Reader;   
import java.util.Properties;   
import com.ibatis.common.resources.Resources;   
import com.ibatis.dao.client.DaoManager;   
import com.ibatis.dao.client.DaoManagerBuilder;   
public class DAOConfig {   
    
private static final String resource="com/Jdnis/ibatis/map/dao.xml";   
    
private static final DaoManager daoManager;   
    
static{   
        daoManager 
= newDaoManager(null);   
    }
   
    
public static DaoManager getDaoManager(){   
        
return daoManager;   
    }
   
    
public static DaoManager newDaoManager(Properties props){   
        
try {   
            Reader reader 
= Resources.getResourceAsReader(resource);   
            
return DaoManagerBuilder.buildDaoManager(reader,props);   
        }
 catch (Exception e) {   
            
// TODO Auto-generated catch block   
            new RuntimeException("Could not initialize DaoConfig.  Cause: " + e, e);   
        }
   
        
return null;       
    }
   
}
  

8.测试类
package com.Jdnis.ibatis.dao;   
import java.sql.Date;   
import com.ibatis.dao.client.DaoManager;   
import com.Jdnis.ibatis.interfaces.PersonInterface;   
import com.Jdnis.ibatis.model.Person;   
public class TestCase {   
   DaoManager daoManager;   
    
protected void setUp()throws Exception{   
        daoManager 
= DAOConfig.getDaoManager();   
    }
   
    
public void testInsertPerson(){   
        PersonInterface pi 
= (PersonInterface)daoManager.getDao(PersonInterface.class);   
        Person p 
= new Person();   
        p.setId(
2);   
        p.setFirstName(
"firstName");   
        p.setLastName(
"lastName");   
        
//p.setBirthDate(new Date(21,12,25));   
        p.setHeight(172);   
        p.setWeight(
125);   
        pi.insertPerson(p);   
    }
   
    
public static void main(String[] args){   
        TestCase tc 
= new TestCase();   
        
try {   
            tc.setUp();   
        }
 catch (Exception e) {   
            
// TODO Auto-generated catch block   
            e.printStackTrace();   
        }
   
        tc.testInsertPerson();   
    }
   
}
  
ibatis通过
PersonInterface pi = (PersonInterface)daoManager.getDao(PersonInterface.class);  

这种反射的机制,来实例化一个接口的实现类(dao.xml文件中接口与实现类的关联)

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 0, comments - 21, trackbacks - 0, articles - 101

Copyright © H2O