Todd

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

             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 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,在這里面只有兩個功能,即根據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" " <!--這是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"
          "
          <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" "

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

          //[1]
             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) {
              //[2]
              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());
             }

          }


          ###########################
          準備玩spring,搞個入門的看看,

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

          評論

          # re: 【轉】Spring+iBatis整合 2012-12-21 17:05 ee
          pop  回復  更多評論
            

          # 22 2012-12-21 17:05 ee
          項目  回復  更多評論
            

          主站蜘蛛池模板: 萍乡市| 嘉鱼县| 信阳市| 台湾省| 东平县| 龙山县| 余庆县| 聊城市| 寿光市| 张北县| 增城市| 杭锦旗| 禄劝| 黄梅县| 栾城县| 屯昌县| 正蓝旗| 马龙县| 灌南县| 咸丰县| 德令哈市| 宁津县| 马龙县| 中卫市| 河曲县| 柳河县| 朝阳市| 肥西县| 恩施市| 武宣县| 江口县| 尼木县| 元朗区| 奎屯市| 广汉市| 蓝山县| 宁城县| 华坪县| 顺昌县| 禄劝| 龙门县|