ibatis和Spring整合的詳細例子
ibatis和Spring整合的詳細例子
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" "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>
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>
5.jdbc.properties文件,存儲數據庫連接的driver,url,username,password等信息,
- jdbc.driver=com.mysql.jdbc.Driver
- jdbcjdbc.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>
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());
- }
- }
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!