spring和ibaits整合詳解

   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.
java

2.建POJO類,在此咱們用的是一個Student類.
package cn.itcast;

public class Student implements java.io.Serializable {
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;
}
} mysql

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" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<!--這是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> spring

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"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<sqlMap resource="configfile/Student.xml" />
</sqlMapConfig> sql

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" "http://www.springframework.org/dtd/spring-beans.dtd">

<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> app

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 stati 函數

相關文章
相關標籤/搜索