ibatis--dao的应用

举例说明:
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.ibatis的dao.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文件中接口与实现类的关联)







































你可能感兴趣的:(java,DAO,sql,编程,ibatis)