免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Spring3.2.4 和 MyBatis 整合筆記
 涉及內(nèi)容:
  1. Spring 和 MyBatis 的整合
  2. Annotation的事務(wù)管理
  3. 響應(yīng)流程


需要的lib文件:



spring 版本:spring-framework-3.1.0.RELEASE

MyBatis 版本: mybatis-3.0.6

注意:請(qǐng)用這以上或是更高的版本,否則會(huì)出奇怪的錯(cuò)誤哦~


源代碼:

         1.     新建Oracle數(shù)據(jù)表

  1. CREATE TABLE MYUSER    
  2. (    
  3.     id       VARCHAR2(10) PRIMARY KEY,    
  4.     pwd      VARCHAR2(10) NOT NULL,    
  5.     NAME     VARCHAR2(15) NOT NULL,    
  6.     birthday VARCHAR2(8) NOT NULL,    
  7.     salary   NUMBER(10,2)    
  8. );  


         2.     在com.entity包下新建UserEntity.class

[java] view plain copy
  1. package com.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class UserEntity implements Serializable{  
  6.     private static final long serialVersionUID = -458045724375300041L;  
  7.       
  8.     private String userID;  
  9.     private String userPWD;  
  10.     private String userName;  
  11.     private String userBirthday;  
  12.     private String userSalary;  
  13.       
  14.       
  15.     public String getUserID() {  
  16.         return userID;  
  17.     }  
  18.     public void setUserID(String userID) {  
  19.         this.userID = userID;  
  20.     }  
  21.     public String getUserPWD() {  
  22.         return userPWD;  
  23.     }  
  24.     public void setUserPWD(String userPWD) {  
  25.         this.userPWD = userPWD;  
  26.     }  
  27.     public String getUserName() {  
  28.         return userName;  
  29.     }  
  30.     public void setUserName(String userName) {  
  31.         this.userName = userName;  
  32.     }  
  33.     public String getUserBirthday() {  
  34.         return userBirthday;  
  35.     }  
  36.     public void setUserBirthday(String userBirthday) {  
  37.         this.userBirthday = userBirthday;  
  38.     }  
  39.     public String getUserSalary() {  
  40.         return userSalary;  
  41.     }  
  42.     public void setUserSalary(String userSalary) {  
  43.         this.userSalary = userSalary;  
  44.     }  
  45. }  


         3.     在com.dao包下新建IUserDao.java 的Interface

[java] view plain copy
  1. package com.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.stereotype.Repository;  
  6. import org.springframework.transaction.annotation.Transactional;  
  7.   
  8. import com.entity.UserEntity;  
  9.   
  10. public interface IUserDao{  
  11.     //這里的函數(shù)名,參數(shù)與UserMapper.xml中的id相對(duì)應(yīng)。  
  12.     public UserEntity getUser(String userID);  
  13.     public List<UserEntity> getAllUser();  
  14.     public int insertUser(UserEntity user);  
  15.     public int updateUser(UserEntity user);  
  16.     public int deleteUser(String userID);  
  17. }  

         4.     在com.service包下新建UserService.class

[java] view plain copy
  1. package com.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.stereotype.Repository;  
  6. import org.springframework.transaction.annotation.Transactional;  
  7.   
  8. import com.dao.IUserDao;  
  9. import com.entity.UserEntity;  
  10.   
  11. //表明該文件需要事務(wù)  
  12. @Transactional  
  13. //表明該文件是一個(gè)Service  
  14. @Service   
  15. public class UserService{  
  16.   
  17.     // 這個(gè)屬性由Spring幫我們注入。也就是說(shuō)我們無(wú)需寫(xiě)IUserDao userDao = new IUserDao();,Spring會(huì)幫我們new一個(gè)的  
  18.     // MyBatis幫我們管理xml與類(lèi)的映射及Dao,所以我們直接用@Autowired進(jìn)行注入就可以了  
  19.     @Autowired  
  20.     private IUserDao userDao;  
  21.       
  22.     public IUserDao getUserDao() {  
  23.         return userDao;  
  24.     }  
  25.       
  26.     public void setUserDao(IUserDao userDao) {  
  27.         this.userDao = userDao;  
  28.     }  
  29.   
  30.     public UserEntity getUser(String userID) {  
  31.         return userDao.getUser(userID);  
  32.     }  
  33.   
  34.     public List<UserEntity> getAllUser() {  
  35.         return userDao.getAllUser();  
  36.     }  
  37.   
  38.     //表明該方法需要事務(wù)  
  39.     @Transactional  
  40.     public int insertUser(UserEntity user) {  
  41.           
  42. //      以下為驗(yàn)證事務(wù)而添加的  
  43. //      UserEntity user1 = new UserEntity();  
  44. //      user1.setUserID("10");  
  45. //      user1.setUserPWD("1");  
  46. //      user1.setUserName("asd");  
  47. //      user1.setUserBirthday("20120228");  
  48. //      user1.setUserSalary("15000.26");  
  49. //      userDao.insertUser(user1);  
  50.           
  51.         return userDao.insertUser(user);  
  52.     }  
  53.   
  54.     @Transactional  
  55.     public int updateUser(UserEntity user) {  
  56.         // TODO Auto-generated method stub  
  57.         return 0;  
  58.     }  
  59.   
  60.     @Transactional  
  61.     public int deleteUser(String userID) {  
  62.         // TODO Auto-generated method stub  
  63.         return 0;  
  64.     }  
  65. }  


         5.     在src下新建spring-configuration.xml

[javascript] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"  
  4.     xmlns:tx="http://www.springframework.org/schema/tx"  
  5.     xmlns:context="http://www.springframework.org/schema/context"   
  6.     xsi:schemaLocation="  
  7.          http://www.springframework.org/schema/context   
  8.          http://www.springframework.org/schema/context/spring-context-3.0.xsd    
  9.      http://www.springframework.org/schema/beans   
  10.      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  11.      http://www.springframework.org/schema/tx   
  12.      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
  13.      http://www.springframework.org/schema/aop   
  14.      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">  
  15.   
  16.     <!-- 使用apache的DBCP連接池  -->  
  17.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  18.         destroy-method="close">  
  19.         <!-- Connection Info -->  
  20.         <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />  
  21.         <property name="url" value="jdbc:oracle:thin:@192.168.80.128:1521:ocp" />  
  22.         <property name="username" value="shenyang" />  
  23.         <property name="password" value="shenyang" />  
  24.   
  25.         <!-- Connection Pooling DBCP -->  
  26.         <property name="initialSize" value="5" />  
  27.         <property name="maxActive" value="100" />  
  28.         <property name="maxIdle" value="30" />  
  29.         <property name="maxWait" value="1000" />  
  30.         <property name="poolPreparedStatements" value="true" />  
  31.         <property name="defaultAutoCommit" value="false" />  
  32.     </bean>  
  33.   
  34.     <!-- 這里的dataSource要與sqlSessionFactory的dataSource一致,否則事務(wù)無(wú)效 -->  
  35.     <bean id="transactionManager"  
  36.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  37.         <property name="dataSource" ref="dataSource" />  
  38.     </bean>  
  39.   
  40.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  41.         <property name="dataSource" ref="dataSource" />  
  42.         <property name="configLocation" value="classpath:mybatis-configuration.xml"></property>  
  43.     </bean>  
  44.   
  45.     <!-- 注意!這里不要偷懶!。要把userMapper賦給別的.class文件里的一個(gè)屬性后再使用,否則事務(wù)無(wú)效。  
  46.     也就是說(shuō)當(dāng)直接創(chuàng)建userMapper的一個(gè)class,然后使用IUserDao.insertUser方法的話(huà)也可以實(shí)現(xiàn),但是事務(wù)將無(wú)效。 -->  
  47.     <!-- 這里的mapperInterface需要接口類(lèi)型 -->  
  48.     <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
  49.         <property name="mapperInterface" value="com.dao.IUserDao" />  
  50.         <property name="sqlSessionFactory" ref="sqlSessionFactory" />  
  51.     </bean>  
  52.       
  53.     <!-- 掃描包 -->  
  54.     <context:component-scan base-package="com.service" />   
  55.   
  56.     <!-- 使用注解方式的事務(wù) -->  
  57.     <tx:annotation-driven transaction-manager="transactionManager" />  
  58.   
  59. </beans>  


         6.     在src下新建mybatis-configuration.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.     <!-- 配置mybatis的緩存,延遲加載等等一系列屬性 -->  
  6.     <settings>  
  7.         <!-- 全局映射器啟用緩存 -->  
  8.         <setting name="cacheEnabled" value="true" />  
  9.         <!-- 查詢(xún)時(shí),關(guān)閉關(guān)聯(lián)對(duì)象即時(shí)加載以提高性能 -->  
  10.         <setting name="lazyLoadingEnabled" value="true" />  
  11.         <!-- 設(shè)置關(guān)聯(lián)對(duì)象加載的形態(tài),此處為按需加載字段(加載字段由SQL指 定),不會(huì)加載關(guān)聯(lián)表的所有字段,以提高性能 -->  
  12.         <setting name="aggressiveLazyLoading" value="false" />  
  13.         <!-- 對(duì)于未知的SQL查詢(xún),允許返回不同的結(jié)果集以達(dá)到通用的效果 -->  
  14.         <setting name="multipleResultSetsEnabled" value="true" />  
  15.         <!-- 允許使用列標(biāo)簽代替列名 -->  
  16.         <setting name="useColumnLabel" value="true" />  
  17.         <!-- 允許使用自定義的主鍵值(比如由程序生成的UUID 32位編碼作為鍵值),數(shù)據(jù)表的PK生成策略將被覆蓋 -->  
  18.         <!-- <setting name="useGeneratedKeys" value="true" /> -->  
  19.         <!-- 給予被嵌套的resultMap以字段-屬性的映射支持 -->  
  20.         <setting name="autoMappingBehavior" value="FULL" />  
  21.         <!-- 對(duì)于批量更新操作緩存SQL以提高性能 -->  
  22.         <setting name="defaultExecutorType" value="BATCH" />  
  23.         <!-- 數(shù)據(jù)庫(kù)超過(guò)25000秒仍未響應(yīng)則超時(shí) -->  
  24.         <setting name="defaultStatementTimeout" value="25000" />  
  25.     </settings>  
  26.     <!-- 全局別名設(shè)置,在映射文件中只需寫(xiě)別名,而不必寫(xiě)出整個(gè)類(lèi)路徑 -->  
  27.     <!-- <typeAliases>  
  28.         <typeAlias alias="TestBean"  
  29.             type="com.wotao.taotao.persist.test.dataobject.TestBean" />  
  30.     </typeAliases> -->  
  31.     <!-- 非注解的sql映射文件配置,如果使用mybatis注解,該mapper無(wú)需配置,但是如果mybatis注解中包含@resultMap注解,則mapper必須配置,給resultMap注解使用 -->  
  32.     <mappers>  
  33.         <mapper resource="com/mybatis/mapper/UserMapper.xml" />  
  34.     </mappers>  
  35. </configuration>  

         7.     在com.mybatis.mapper包下新建UserMapper.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <!-- 這里的namespace名字必須為執(zhí)行該sql的dao地址  -->  
  5. <mapper namespace="com.dao.IUserDao">  
  6.       
  7.     <resultMap type="com.entity.UserEntity" id="userResultMap">    
  8.         <id property="userID" column="id"/>    
  9.         <result property="userPWD" column="pwd"/>    
  10.         <result property="userName" column="name"/>    
  11.         <result property="userBirthday" column="birthday"/>  
  12.         <result property="userSalary" column="salary"/>  
  13.     </resultMap>  
  14.        
  15.     <select id="getUser" parameterType="String" resultType="com.entity.UserEntity" resultMap="userResultMap">    
  16.         <![CDATA[  
  17.             SELECT * FROM MYUSER 
  18.             WHERE ID =  #{userID} 
  19.         ]]>     
  20.     </select>  
  21.       
  22.     <insert id="insertUser" parameterType="com.entity.UserEntity">  
  23.             INSERT INTO MYUSER(ID,PWD,NAME,BIRTHDAY,SALARY)  
  24.              VALUES(  
  25.                 #{userID},  
  26.                 #{userPWD},  
  27.                 #{userName},  
  28.                 #{userBirthday},  
  29.                 #{userSalary}  
  30.              )  
  31.     </insert>  
  32.   
  33. </mapper>  

測(cè)試:

    隨便找個(gè)地方新建一個(gè)JUnitTest.class

[java] view plain copy
  1. package com.junit.test;  
  2.   
  3. import org.junit.Test;  
  4. import org.junit.runner.RunWith;  
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.test.context.ContextConfiguration;  
  7. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
  8.   
  9. import com.entity.UserEntity;  
  10. import com.service.UserService;  
  11.   
  12. @RunWith(SpringJUnit4ClassRunner.class)  
  13. //因?yàn)槲覀儧](méi)有啟動(dòng)web工程,所以無(wú)法通過(guò)web.xml執(zhí)行執(zhí)行spring-configuration.xml文件了,所以在這里要顯示的聲明執(zhí)行。  
  14. @ContextConfiguration(locations = { "classpath:/spring-configuration.xml" })  
  15. public class JUnitTest {  
  16.    
  17.     // 還記得我們之前做了兩件事嗎?  
  18.     // 1. <context:component-scan base-package="com.service" />    
  19.     // 2. @Service   
  20.     //    public class UserService  
  21.     // 第一告訴Spring掃描com.service下的所有類(lèi),第二告訴UserService是一個(gè)Service,讓Spring準(zhǔn)備處理  
  22.     // 所以這里用@Autowired注解的時(shí)候就可以將UserService注入進(jìn)來(lái)了。無(wú)需我們寫(xiě)UserService userService = new UserService()  
  23.     @Autowired  
  24.   UserService userService;  
  25.       
  26.     @Test   
  27.     public void start(){  
  28.         //ApplicationContext ct =new ClassPathXmlApplicationContext("spring-configuration.xml");  
  29.         //UserService userService = (UserService)ct.getBean("userService");  
  30.         try{  
  31.             UserEntity user = new UserEntity();  
  32.             user.setUserID("10");  
  33.             user.setUserPWD("1");  
  34.             user.setUserName("asd");  
  35.             user.setUserBirthday("20120228");  
  36.             user.setUserSalary("15000.26");  
  37.               
  38.             userService.insertUser(user);  
  39.         }catch(Exception e){  
  40.             e.printStackTrace();  
  41.         }  
  42.           
  43.     }  
  44. }  


OK,現(xiàn)在打開(kāi)JUnitTest.class.然后鼠標(biāo)右鍵以JUnit方式運(yùn)行就可以測(cè)試了。



因?yàn)槭悄肑Unit測(cè)試,所以并沒(méi)有編寫(xiě)web.xml,在這里補(bǔ)上。

[html] view plain copy
  1.        <servlet>  
  2.     <servlet-name>spring-dispatcher</servlet-name>  
  3.     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.     <init-param>  
  5.         <param-name>contextConfigLocation</param-name>  
  6.         <param-value>spring-configuration.xml</param-value>  
  7.     </init-param>  
  8. </servlet>  
  9.   
  10. <servlet-mapping>  
  11.     <servlet-name>spring-dispatcher</servlet-name>  
  12.     <!-- 這里不能寫(xiě)"/*",這樣會(huì)攔截所有消息,連Index.jsp都被攔截而進(jìn)步了了 -->  
  13.     <url-pattern>*.do</url-pattern>  
  14. </servlet-mapping>  

其中第6行,可能會(huì)有點(diǎn)錯(cuò)誤,這個(gè)地方,我之后如果有時(shí)間的話(huà),會(huì)測(cè)試并改回來(lái)。


例行慣例,寫(xiě)一下響應(yīng)流程:

  1. 初始化spring-configration.xml中的userService文件。
  2. 通過(guò)spring-configuration.xml中的 53 行將userService文件中的userDao賦值為 <bean id="userMapper"> 的值。
  3. <bean id="userMapper"> 為com.dao.IUserDao文件加載sqlSessionFactory.openSession()產(chǎn)生的SqlSession屬性。(猜~)所以我們不用像MyBatis那樣自己生成SqlSession了。
  4. sqlSessionFactory加載 <bean id="sqlSessionFactory">。
  5. <bean id="userMapper">在spring-configuration.xml的 37 行加載了連接數(shù)據(jù)庫(kù)的dataSource 和mybatis-configuration.xml文件。
  6. mybatis-configuration.xml文件配置了緩存,延遲加載等等一系列屬性,加載了UserMapper.xml文件。
  7. UserMapper.xml文件中寫(xiě)了最關(guān)鍵的SQL語(yǔ)句。(暫時(shí)告一段落)
  8. 在UserService.class的 46 行中可以看出UserService.insertUser(UserEntity user) 調(diào)用了userDao.insertUser(user)。
  9. 而經(jīng)過(guò)第三步驟,userDao.insertUser(user)實(shí)際上就是調(diào)用了sqlSessionFactory.openSession().insert("userDao的包名.insertUser",user);不理解這語(yǔ)句的朋友請(qǐng)看《MyBatis 基礎(chǔ)筆記》。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
源碼分析 | 手寫(xiě)mybait-spring核心功能(干貨好文一次學(xué)會(huì)工廠(chǎng)bean、類(lèi)代理、bean注冊(cè)的使用)
SSM三大框架整合詳細(xì)教程(Spring+SpringMVC+MyBatis)
Spring + Spring MVC + MyBatis 整合
基于Maven的Spring + Spring MVC + Mybatis的環(huán)境搭建 | AmazingHarry
基于A(yíng)nnotation的Struts2.0+Hibernate3.3+Spring2.5整合開(kāi)發(fā) (2)
(四)spring+servlet 整合
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服