Todd

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            65 隨筆 :: 0 文章 :: 24 評(píng)論 :: 0 Trackbacks
          Spring+iBatis整合
          2008-03-19 10:24 A.M.

             ibatis和Spring整合的詳細(xì)例子,數(shù)據(jù)庫用的是mysql,開發(fā)環(huán)境是Eclipse3.2:
          1.首先把用到的包導(dǎo)入進(jìn)來,此例用的是spring-framework-1.2.7,iBATIS_DBL-2.1.7.597,mysql的數(shù)
          據(jù)庫連接包用的是mysql-connector-java-5.0.3-bin.jar.

          2.建POJO類,在此我們用的是一個(gè)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;
             }
          }

          3.POJO的映射文件Student.xml,在這里面只有兩個(gè)功能,即根據(jù)student的id檢索出一個(gè)Student對(duì)象,另一
          個(gè)就是向數(shù)據(jù)庫插入一條記錄(一個(gè)Student對(duì)象),注意:此應(yīng)用程序中所有的配置文件(xml文件和
          properties文件都放在configfile包下面).
          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" " <!--這是POJO映射文件的根元素-->
          <sqlMap namespace="Student">
             <!--select元素的id屬性用來標(biāo)識(shí)此元素,resultClass屬性的值是Java類的全限定名(即包括類的包名)。
             resultClass屬性可以讓您指定一個(gè)Java類,根據(jù)ResultSetMetaData將其自動(dòng)映射到JDBC的ResultSet。
             只要是Java Bean的屬性名稱和ResultSet的列名匹配,屬性自動(dòng)賦值給列值。
             parameterClass屬性是參數(shù)的類型,此屬性的值是Java類的全限定名(即包括類的包名)。
             它是可選的,但強(qiáng)烈建議使用。它的目的是 限制輸入?yún)?shù)的類型為指定的Java類,并
             優(yōu)化框架的性能。-->
             <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.建一個(gè)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"
          "
          <sqlMapConfig>
             <sqlMap resource="configfile/Student.xml" />
          </sqlMapConfig>

          5.jdbc.properties文件,存儲(chǔ)數(shù)據(jù)庫連接的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" "

          <beans>

             <!--此bean告訴Spring去哪找數(shù)據(jù)庫的配置信息,因?yàn)橛写薆ean才出現(xiàn)下面用${}標(biāo)記來取變量的語句-->
             <bean id="propertyConfig"
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
              <property name="location">
               <value>configfile/jdbc.properties</value>
              </property>
             </bean>

             <!--配置一個(gè)數(shù)據(jù)源,根據(jù)上面propertyConfig指定的location去找數(shù)據(jù)庫連接的配置信息-->
             <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>

             <!--根據(jù)dataSource和configLocation創(chuàng)建一個(gè)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>

             <!--根據(jù)sqlMapClien創(chuàng)建一個(gè)SqlMapClient模版類-->
             <bean id="sqlMapClientTemplate"
              class="org.springframework.orm.ibatis.SqlMapClientTemplate">
              <property name="sqlMapClient">
               <ref bean="sqlMapClient" />
              </property>
             </bean>
            
             <!--將上面的模版類織入到我們的DAO對(duì)象中-->
             <bean id="studentDao" class="cn.itcast.StudentDaoSqlMap">
              <property name="sqlMapClientTemplate">
               <ref bean="sqlMapClientTemplate" />
              </property>
             </bean>

          </beans>

          7.StudentDaoSqlMap 是一個(gè)DAO,它負(fù)責(zé)和數(shù)據(jù)庫的交互,在這里實(shí)現(xiàn)了查詢單條記錄和插入單條記錄的功能.
          package cn.itcast;

          import org.springframework.orm.ibatis.SqlMapClientTemplate;

          public class StudentDaoSqlMap {

          //[1]
             private SqlMapClientTemplate sqlMapClientTemplate;

             public SqlMapClientTemplate getSqlMapClientTemplate() {
              return sqlMapClientTemplate;
             }

             public void setSqlMapClientTemplate(
               SqlMapClientTemplate sqlMapClientTemplate) {
              this.sqlMapClientTemplate = sqlMapClientTemplate;
             }

             //此方法的返回值與Student.xml的select元素的resultClass對(duì)應(yīng).
             public Student getStudent(Integer id) {
              return (Student) sqlMapClientTemplate.queryForObject("getStudentById",id);
              //注意:queryForObject方法返回一個(gè)Object,第一個(gè)參數(shù)與Student.xml的select元素
              //的id屬性值對(duì)應(yīng),第二個(gè)參數(shù)的類型與Student.xml的select元素的parameterClass
              //屬性值對(duì)應(yīng).
             }

             public Object insertStudent(Student student) {
              return sqlMapClientTemplate.insert("insertStudent", student);
             }
          }

          8.下面寫一個(gè)帶main函數(shù)的類來測試上面的代碼.代碼非常簡單就不再解釋了.
          package cn.itcast;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          public class Client {

             public static void main(String[] args) {
              //[2]
              ApplicationContext factory = new ClassPathXmlApplicationContext(
                "applicationContext.xml");

              StudentDaoSqlMap studentDao = (StudentDaoSqlMap) factory
                .getBean("studentDao");
             
              //插入一個(gè)student
              Student student = new Student();
              student.setFirstname("tian");
              student.setLastname("xiangdong");
              studentDao.insertStudent(student);

              //查詢出id是1的Student對(duì)象.
              //Student student = studentDao.getStudent(1);
              //System.out.println(student.getId());
              //System.out.println(student.getFirstname());
              //System.out.println(student.getLastname());
             }

          }


          ###########################
          準(zhǔn)備玩spring,搞個(gè)入門的看看,

          [1]DAO可以繼承SqlMapClientDaoSupport類省得寫sqlmapclienttemplate的get,set,前面的注入依然有效
          [2]spring在web里還是用WebApplicationContextUtils.getWebApplicationContext()獲取上下文,配置文件放到WEB-INF文件夾下比較舒服

          評(píng)論

          # re: 【轉(zhuǎn)】Spring+iBatis整合 2012-12-21 17:05 ee
          pop  回復(fù)  更多評(píng)論
            

          # 22 2012-12-21 17:05 ee
          項(xiàng)目  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 得荣县| 临漳县| 台南县| 汝南县| 平潭县| 临沧市| 阿尔山市| 明溪县| 剑阁县| 皮山县| 三江| 乌苏市| 海兴县| 临夏县| 林芝县| 乐山市| 黄石市| 鄂伦春自治旗| 梁河县| 沁阳市| 扎鲁特旗| 阿瓦提县| 黑水县| 武平县| 江孜县| 长兴县| 仲巴县| 菏泽市| 永登县| 旌德县| 镇坪县| 安泽县| 汤阴县| 织金县| 霸州市| 宁河县| 迁西县| 葫芦岛市| 舟山市| 石台县| 闸北区|