ibatis和Spring整合

 
數據庫用的是mysql,開發環境是Eclipse3.2:
1.首先把用到的包導入進來,此例用的是spring-framework-1.2.7,iBATIS_DBL-2.1.7.597,mysql的數
  據庫鏈接包用的是mysql-connector-java-5.0.3-bin.jar.
2.建POJO類,在此咱們用的是一個Student類.
 package cn.itcast;
 
 public class Student {
  private Integer id;
 
  private String firstname;
 
  private String lastname;
 
  public String getFirstname() {
   return firstname;
  }
 
  public void setFirstname(String firstname) {
   this.firstname = firstname;
  }
 
  public Integer getId() {
   return id;
  }
 
  public void setId(Integer id) {
   this.id = id;
  }
 
  public String getLastname() {
   return lastname;
  }
 
  public void setLastname(String lastname) {
   this.lastname = lastname;
  }
 }
3.POJO的映射文件Student.xml,在這裏面只有兩個功能,即根據student的id檢索出一個Student對象,另外一
  個就是向數據庫插入一條記錄(一個Student對象),注意:此應用程序中全部的配置文件(xml文件和
  properties文件都放在configfile包下面).
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" " [url]http://www.ibatis.com/dtd/sql-map-2.dtd[/url]">
 <!--這是POJO映射文件的根元素-->
 <sqlMap namespace="Student">
  <!--select元素的id屬性用來標識此元素,resultClass屬性的值是Java類的全限定名(即包括類的包名)。
  resultClass屬性能夠讓您指定一個Java類,根據ResultSetMetaData將其自動映射到JDBC的ResultSet。
  只要是Java Bean的屬性名稱和ResultSet的列名匹配,屬性自動賦值給列值。
  parameterClass屬性是參數的類型,此屬性的值是Java類的全限定名(即包括類的包名)。
  它是可選的,但強烈建議使用。它的目的是 限制輸入參數的類型爲指定的Java類,並
  優化框架的性能。-->
  <select id="getStudentById" resultClass="cn.itcast.Student" parameterClass="int">
   select id,firstname,lastname from student where id=#value#
  </select>
  
  <insert id="insertStudent" parameterClass="cn.itcast.Student">
   insert into student(firstname,lastname) values(#firstname#,#lastname#)
  </insert>
 </sqlMap>
4.建一個SqlMap的配置文件sql-map-config.xml,sqlMap元素的resource屬性告訴Spring去哪找POJO映射文件.
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE sqlMapConfig
 PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
 " [url]http://www.ibatis.com/dtd/sql-map-config-2.dtd[/url]">
 <sqlMapConfig>
  <sqlMap resource="configfile/Student.xml" />
 </sqlMapConfig>
5.jdbc.properties文件,存儲數據庫鏈接的driver,url,username,password等信息,
 jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://localhost/itcast
 jdbc.username=root
 jdbc.password=

6.Spring配置文件applicationContext.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" " [url]http://www.springframework.org/dtd/spring-beans.dtd[/url]">
 
 <beans>
 
  <!--此bean告訴Spring去哪找數據庫的配置信息,由於有此Bean纔出現下面用${}標記來取變量的語句-->
  <bean id="propertyConfig"
   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
    <value>configfile/jdbc.properties</value>
   </property>
  </bean>
 
  <!--配置一個數據源,根據上面propertyConfig指定的location去找數據庫鏈接的配置信息-->
  <bean id="dataSource"
   class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName">
    <value>${jdbc.driver}</value>
   </property>
   <property name="url">
    <value>${jdbc.url}</value>
   </property>
   <property name="username">
    <value>${jdbc.username}</value>
   </property>
   <property name="password">
    <value>${jdbc.password}</value>
   </property>
  </bean>
 
  <!--根據dataSource和configLocation建立一個SqlMapClient-->
  <bean id="sqlMapClient"
   class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
   <property name="configLocation">
    <value>configfile/sql-map-config.xml</value>
   </property>
   <property name="dataSource">
    <ref bean="dataSource" />
   </property>
  </bean>
 
  <!--根據sqlMapClien建立一個SqlMapClient模版類--> 
  <bean id="sqlMapClientTemplate"
   class="org.springframework.orm.ibatis.SqlMapClientTemplate">
   <property name="sqlMapClient">
    <ref bean="sqlMapClient" />
   </property>
  </bean>
  
  <!--將上面的模版類織入到咱們的DAO對象中-->
  <bean id="studentDao" class="cn.itcast.StudentDaoSqlMap">
   <property name="sqlMapClientTemplate">
    <ref bean="sqlMapClientTemplate" />
   </property>
  </bean>
 
 </beans>
7.StudentDaoSqlMap 是一個DAO,它負責和數據庫的交互,在這裏實現了查詢單條記錄和插入單條記錄的功能.
 package cn.itcast;
 
 import org.springframework.orm.ibatis.SqlMapClientTemplate;
 
 public class StudentDaoSqlMap {
  private SqlMapClientTemplate sqlMapClientTemplate;
 
  public SqlMapClientTemplate getSqlMapClientTemplate() {
   return sqlMapClientTemplate;
  }
 
  public void setSqlMapClientTemplate(
    SqlMapClientTemplate sqlMapClientTemplate) {
   this.sqlMapClientTemplate = sqlMapClientTemplate;
  }
 
  //此方法的返回值與Student.xml的select元素的resultClass對應.
  public Student getStudent(Integer id) {
   return (Student) sqlMapClientTemplate.queryForObject("getStudentById",id);
   //注意:queryForObject方法返回一個Object,第一個參數與Student.xml的select元素
   //的id屬性值對應,第二個參數的類型與Student.xml的select元素的parameterClass
   //屬性值對應.
  }
 
  public Object insertStudent(Student student) {
   return sqlMapClientTemplate.insert("insertStudent", student);
  }
 }
8.下面寫一個帶main函數的類來測試上面的代碼.代碼很是簡單就再也不解釋了.  package cn.itcast;    import org.springframework.context.ApplicationContext;  import org.springframework.context.support.ClassPathXmlApplicationContext;    public class Client {     public static void main(String[] args) {    ApplicationContext factory = new ClassPathXmlApplicationContext(      "applicationContext.xml");      StudentDaoSqlMap studentDao = (StudentDaoSqlMap) factory      .getBean("studentDao");        //插入一個student    Student student = new Student();    student.setFirstname("tian");    student.setLastname("xiangdong");    studentDao.insertStudent(student);      //查詢出id是1的Student對象.    //Student student = studentDao.getStudent(1);    //System.out.println(student.getId());    //System.out.println(student.getFirstname());    //System.out.println(student.getLastname());   }    }  
相關文章
相關標籤/搜索