乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MyBatis3與Spring4整合方法詳解

       mediatv 2015-09-25

      摘要:由于項(xiàng)目需要,第一次接觸MyBatis,在網(wǎng)上找了很多MyBatis與Spring的整合方法,網(wǎng)上的資料不夠詳細(xì),雖然講了很多整合方法,但卻沒有針對(duì)每一種方法去詳細(xì)講解,對(duì)于沒有相關(guān)基礎(chǔ)的人難以操作,因此自己整理記錄如下
      由于項(xiàng)目需要,第一次接觸MyBatis,在網(wǎng)上找了很多MyBatis與Spring的整合方法,網(wǎng)上的資料不夠詳細(xì),雖然講了很多整合方法,但卻沒有 針對(duì)每一種方法去詳細(xì)講解,對(duì)于沒有相關(guān)基礎(chǔ)的人難以操作,因此自己整理記錄如下(注:本次使用的是比較常用的SqlSessionTemplate,沒 有使用Mapper接口)。

      本次使用版本為MyBatis 3.2.5、Spring4.0.7,為了將兩者整合還需要一個(gè)jar包"mybatis-spring-1.2.2.jar",工具使用的是Eclipse kepler,本次使用到的所有jar包會(huì)附在最后。

      本次整合創(chuàng)建的是普通Java Web工程,沒有使用Maven工程,整合好之后的程序目錄結(jié)構(gòu)如下圖所示,src與conf是類路徑,src用于存放代碼,conf用于存放配置文件以 及MyBatis映射文件。applicationContext.xml是Spring配置文件,MyBatisConf.xml是MyBatis配置 文件,這配置文件的名字可以隨意命名。



      首先創(chuàng)建Java Web工程,并參考上圖創(chuàng)建相應(yīng)文件夾與包,導(dǎo)入MyBatis的jar包、Spring的jar包、Oracle驅(qū)動(dòng)包、數(shù)據(jù)庫連接池的jar包。

      一.創(chuàng)建庫表映射類并配置MyBatis

       首先在數(shù)據(jù)庫中創(chuàng)建一張表“USER_INFO”
      create table USER_INFO
      (
       ID VARCHAR2(10) not null,
       USER_NAME VARCHAR2(50) not null,
       USER_AGE VARCHAR2(100) not null,
       USER_ADD VARCHAR2(200)
      )
      表創(chuàng)建好之后便創(chuàng)建其映射類“UserInfo”,位于包“vo”中
      public class UserInfo {
      private String id;
      private String userName;
      private String userAge;
      private String userAdd;
      public String getId()
      {  return id; }
      public void setId(String id)
      {  this.id = id; }
      public String getUserName()
      {  return userName; }
      public void setUserName(String userName)
      {  this.userName = userName; }
      public String getUserAge()
      {  return userAge; }
      public void setUserAge(String userAge)
      {  this.userAge = userAge; }
      public String getUserAdd()
      {  return userAdd; }
      public void setUserAdd(String userAdd)
      {  this.userAdd = userAdd; }
      }
       
      映射類創(chuàng)建好之后便創(chuàng)建MyBatis映射文件(即Mapper文件),位于conf的mapper包中,文件內(nèi)容如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN"
      "http:///dtd/mybatis-3-mapper.dtd">
      <mapper namespace="UserInfoMapper">
      <resultMap type="UserInfo">
      <id property="id" column="id" />
      <result property="userName" column="user_name" />
      <result property="userAge" column="user_age" />
      <result property="userAdd" column="user_add" />
      </resultMap>
      </mapper>
      Mapper文件中的resultMap用于配置表中字段與映射類屬性間的映射關(guān)系,其中的"type"表示映射類的完整類名,但此處沒有使用"vo.UserInfo"的原因是在MyBatis配置文件中配置了其別名。

       緊接著就是創(chuàng)建MyBatis的配置文件"MyBatisConf.xml",用于配置映射類的別名并配置Mapper文件的路徑,文件內(nèi)容如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN"
      "http:///dtd/mybatis-3-config.dtd">
      <configuration>
         <!-- 配置映射類的別名 -->
         <typeAliases>  
             <typeAlias alias="UserInfo"/>  
         </typeAliases>  
         <!-- 配置Mapper文件的路徑 -->
         <mappers>
             <mapper resource="mapper/UserInfoMapper.xml"/>
         </mappers>
      </configuration>
      如果不與Spring進(jìn)行整合的話,此配置文件還需要配置數(shù)據(jù)源信息,與Spring整合之后數(shù)據(jù)源就配置在Spring配置文件中,只需要配置映射文件的路徑就可以了。

      二.配置Spring

      在配置數(shù)據(jù)源Bean時(shí),其中的連接參數(shù)可以直接寫在配置文件里,但更好的是將連接參數(shù)單獨(dú)放到一個(gè)屬性文件中,然后將此文件配置在Spring配置文件中讓數(shù)據(jù)源Bean讀取即可。在conf中創(chuàng)建jdbc配置文件“jdbc.properties”,文件內(nèi)容如下:
      jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
      jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
      jdbc.username=des
      jdbc.password=des
      接下來創(chuàng)建Spring配置文件“applicationContext.xml”,此時(shí)配置文件是空的,文件內(nèi)容如下:
      <?xml version="1.0" encoding="UTF-8"?>
      <beans
      xmlns="http://www./schema/beans"
      xmlns:xsi="http://www./2001/XMLSchema-instance"
      xmlns:context="http://www./schema/context"
      xmlns:mvc="http://www./schema/mvc"
      xsi:schemaLocation="http://www./schema/beans
      http://www./schema/beans/spring-beans-4.0.xsd
      http://www./schema/context
      http://www./schema/context/spring-context-4.0.xsd
      http://www./schema/mvc
      http://www./schema/mvc/spring-mvc-4.0.xsd">
      </beans>

      然后便可以在Spring配置文件中引入jdbc配置文件了,代碼如下所示:

      <context:property-placeholder location="classpath:jdbc.properties"/>
      然后在Spring配置文件配置數(shù)據(jù)源Bean,代碼如下:
      <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
       <property value="${jdbc.driverClassName}" />
       <property value="${jdbc.url}" />
       <property value="${jdbc.username}" />
       <property value="${jdbc.password}" />
      </bean>  
      在Mybatis中對(duì)數(shù)據(jù)庫的所有操作都是基于一個(gè)SqlSession的,而SqlSession是由SqlSessionFactory來產(chǎn)生 的,SqlSessionFactory又是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring給我們封裝 了一個(gè)SqlSessionFactoryBean,在這個(gè)bean里面還是通過SqlSessionFactoryBuilder來建立對(duì)應(yīng)的 SqlSessionFactory,進(jìn)而獲取到對(duì)應(yīng)的SqlSession。通過SqlSessionFactoryBean我們可以通過對(duì)其指定一些 屬性來提供Mybatis的一些配置信息。所以接下來我們需要在Spring的applicationContext配置文件中定義一個(gè) SqlSessionFactoryBean。
      <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 指定使用的數(shù)據(jù)源 -->
        <property ref="dataSource" />
        <!-- 指定MyBatis配置文件路徑 -->
        <property name="configLocation" value="MyBatisConf.xml"/>
      </bean>
      在定義SqlSessionFactoryBean的時(shí)候,dataSource屬性是必須指定的,它表示用于連接數(shù)據(jù)庫的數(shù)據(jù)源。當(dāng)然,我們也可以指定一些其他的屬性,下面簡(jiǎn)單列舉幾個(gè):

      l  mapperLocations:它表示我們的Mapper文件存放的位置,當(dāng)我們的Mapper文件跟對(duì)應(yīng)的Mapper接口處于同一位置的時(shí)候可以不用指定該屬性的值。

      l  configLocation:用于指定Mybatis的配置文件位置。如果指定了該屬性,那么會(huì)以該配置文件的內(nèi)容作為配置信息構(gòu)建對(duì)應(yīng)的SqlSessionFactoryBuilder,但是后續(xù)屬性指定的內(nèi)容會(huì)覆蓋該配置文件里面指定的對(duì)應(yīng)內(nèi)容。

      l  typeAliasesPackage:它一般對(duì)應(yīng)我們的實(shí)體類所在的包,這個(gè)時(shí)候會(huì)自動(dòng)取對(duì)應(yīng)包中不包括包名的簡(jiǎn)單類名作為包括包名的別名。多個(gè)package之間可以用逗號(hào)或者分號(hào)等來進(jìn)行分隔。

      l  typeAliases:數(shù)組類型,用來指定別名的。指定了這個(gè)屬性后,Mybatis會(huì)把這個(gè)類型的短名稱作為這個(gè)類型的別名,前提是該類上沒有標(biāo)注@Alias注解,否則將使用該注解對(duì)應(yīng)的值作為此種類型的別名。
      <property>
         <array>
             <value>com.tiantian.mybatis.model.Blog</value>
             <value>com.tiantian.mybatis.model.Comment</value>
         </array>
      </property>
      l  plugins:數(shù)組類型,用來指定Mybatis的Interceptor。

      l  typeHandlersPackage:用來指定TypeHandler所在的包,如果指定了該屬性,SqlSessionFactoryBean會(huì)自動(dòng)把該包下面的類注冊(cè)為對(duì)應(yīng)的TypeHandler。多個(gè)package之間可以用逗號(hào)或者分號(hào)等來進(jìn)行分隔。

      l  typeHandlers:數(shù)組類型,表示TypeHandler。

      在配置好SqlSessionFactory之后,我們便可以配置SqlSessionTemplate了。Mybatis-Spring為我們提供了一 個(gè)實(shí)現(xiàn)了SqlSession接口的SqlSessionTemplate類,它是線程安全的,可以被多個(gè)Dao同時(shí)使用。同時(shí)它還跟Spring的事務(wù) 進(jìn)行了關(guān)聯(lián),確保當(dāng)前被使用的SqlSession是一個(gè)已經(jīng)和Spring的事務(wù)進(jìn)行綁定了的。而且它還可以自己管理Session的提交和關(guān)閉。當(dāng)使 用了Spring的事務(wù)管理機(jī)制后,SqlSession還可以跟著Spring的事務(wù)一起提交和回滾。

      使用SqlSessionTemplate時(shí)我們可以在Spring的applicationContext配置文件中如下定義:
      <bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
          <constructor-arg index="0" ref="sqlSessionFactory" />
      </bean>
      
      這樣我們就可以通過Spring的依賴注入在Dao中直接使用SqlSessionTemplate來編程了。

      三.編寫Dao、Service代碼

       在完成MyBatis與Spring的基本配置之后便可以編寫Dao層、Service層代碼。首先在MyBatis的Mapper文件中編寫SQL語句,內(nèi)容如下:

      <select parameterType="String" resultMap="UserInfoMap">
      select * from user_info where id = # {id}
      </select>
      
      此SQL表示根據(jù)用戶ID查詢用戶信息,"id"用于唯一表示此SQL語句,"parameterType"表示傳入?yún)?shù)類型,"resultMap"表示返回映射類要與映射關(guān)系元素的"id"保持一致。此時(shí)完整的Mapper文件內(nèi)容如下(不包括文件頭):
      <mapper namespace="UserInfoMapper">
      <resultMap type="UserInfo">
       <id property="id" column="id" />
       <result property="userName" column="user_name" />
       <result property="userAge" column="user_age" />
       <result property="userAdd" column="user_add" />
      </resultMap>
      <select parameterType="String" resultMap="UserInfoMap">
             select * from user_info where id = #
      </select>
      </mapper>
      然后創(chuàng)建接口IUserDao,位于包"dao"中,代碼如下:
      public interface IUserDao {/**
       * 根據(jù)用戶ID查詢用戶信息
       * @param id
       * @return
       */
      public UserInfo findUserById(String id);
      }
      然后創(chuàng)建此接口的實(shí)現(xiàn)類"UserDaoImpl",位于包"dao.impl"中,代碼如下:
      public class UserDaoImpl implements IUserDao {
      private SqlSessionTemplate sessionTemplate;
      public void setSessionTemplate(SqlSessionTemplate sessionTemplate)
      {  this.sessionTemplate = sessionTemplate; }
      @Override
      public UserInfo findUserById(String id)
      {  UserInfo user = sessionTemplate.selectOne("UserInfoMapper.selectUserByID", "12");  return user; }
      }
      然后在Spring配置文件中注冊(cè)此實(shí)現(xiàn)類的Bean,并為其注入"sessionTemplate"的屬性值,代碼如下:
      <bean class="dao.impl.UserDaoImpl">
        <property name="sessionTemplate" ref="sessionTemplate" />
      </bean>
      最后一步便是編寫Service代碼,由于此案例沒有使用前端頁面調(diào)用的方式,所以就在Service中通過main方法模擬對(duì)Dao層的調(diào)用,否則還應(yīng) 有Service層接口、controller層編碼以及前端頁面。Service類"UserService "位于包"service"中
      public class UserService {
        //Spring容器
      private static ApplicationContext ctx;
      private static IUserDao userDao;
      static
      {  
      // 在類路徑下尋找Spring配置文件  
      ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); }
      public static void main(String[] args)
      {  userDao = (IUserDao)ctx.getBean("userDao");  UserInfo user = userDao.findUserById("12");  System.out.println(user.getId());  System.out.println(user.getUserName()); }
      }
      上述類中有兩個(gè)屬性,"ctx"就是Spring容器,在main方法中先通過其給屬性"userDao"賦值,然后調(diào)用其方法"findUserById"通過用戶ID查詢用戶信息。
      至此,MyBatis與Spring整合的實(shí)例便已完成

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多