zoukankan      html  css  js  c++  java
  • Spring + Mybatis

    <h1>
        <span class="link_title"><a href="/lablenet/article/details/50440321">
        Spring + Mybatis - 原始dao开发整合 与 Mapper代理整合        
           
        </a>
        </span>
    
         
    </h1>
    
        <div class="article_manage clearfix">
        <div class="article_l">
            <span class="link_categories">
            标签:
              <a href="http://www.csdn.net/tag/mybatis" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">mybatis</a><a href="http://www.csdn.net/tag/Spring" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">Spring</a><a href="http://www.csdn.net/tag/bean" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">bean</a><a href="http://www.csdn.net/tag/ApplicationContext" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">ApplicationContext</a><a href="http://www.csdn.net/tag/Mapper" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">Mapper</a>
            </span>
        </div>
        <div class="article_r">
            <span class="link_postdate">2015-12-31 11:01</span>
            <span class="link_view" title="阅读次数">2160人阅读</span>
            <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
            <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('Spring+%2b+Mybatis+-+%e5%8e%9f%e5%a7%8bdao%e5%bc%80%e5%8f%91%e6%95%b4%e5%90%88+%e4%b8%8e+Mapper%e4%bb%a3%e7%90%86%e6%95%b4%e5%90%88','50440321');return false;" title="收藏" target="_blank">收藏</a></span>
             <span class="link_report"> <a href="#report" onclick="javascript:report(50440321,2);return false;" title="举报">举报</a></span>
    
        </div>
    </div>    <style type="text/css">        
            .embody{
                padding:10px 10px 10px;
                margin:0 -20px;
                border-bottom:solid 1px #ededed;                
            }
            .embody_b{
                margin:0 ;
                padding:10px 0;
            }
            .embody .embody_t,.embody .embody_c{
                display: inline-block;
                margin-right:10px;
            }
            .embody_t{
                font-size: 12px;
                color:#999;
            }
            .embody_c{
                font-size: 12px;
            }
            .embody_c img,.embody_c em{
                display: inline-block;
                vertical-align: middle;               
            }
             .embody_c img{               
                30px;
                height:30px;
            }
            .embody_c em{
                margin: 0 20px 0 10px;
                color:#333;
                font-style: normal;
            }
    </style>
    <script type="text/javascript">
        $(function () {
            try
            {
                var lib = eval("("+$("#lib").attr("value")+")");
                var html = "";
                if (lib.err == 0) {
                    $.each(lib.data, function (i) {
                        var obj = lib.data[i];
                        //html += '<img src="' + obj.logo + '"/>' + obj.name + "&nbsp;&nbsp;";
                        html += ' <a href="' + obj.url + '" target="_blank">';
                        html += ' <img src="' + obj.logo + '">';
                        html += ' <em><b>' + obj.name + '</b></em>';
                        html += ' </a>';
                    });
                    if (html != "") {
                        setTimeout(function () {
                            $("#lib").html(html);                      
                            $("#embody").show();
                        }, 100);
                    }
                }      
            } catch (err)
            { }
            
        });
    </script>
      <div class="category clearfix">
        <div class="category_l">
           <img src="http://static.blog.csdn.net/images/category_icon.jpg">
            <span>分类:</span>
        </div>
        <div class="category_r">
                    <label onclick="GetCategoryArticles('6038676','LABLENET','top','50440321');">
                        <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">--&gt; 3.2 spring<em>(11)</em></span>
                      <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                      <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                        <div class="subItem">
                            <div class="subItem_t"><a href="http://blog.csdn.net/LABLENET/article/category/6038676" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                            <ul class="subItem_l" id="top_6038676">                            
                            </ul>
                        </div>
                    </label>                    
        </div>
    </div>
        <div class="bog_copyright">         
            <p class="copyright_p">版权声明:本文为博主原创文章,未经博主允许不得转载。</p>
        </div>
    

    1.准备

        这段时间学习了Spring和Mybatis的知识,我们知道持久层的 mapper,dao都需要spring进行管理, 需要spring通过单例的方式管理SqlSessionFactory,spring和mybatis整合生成代理对象使用sqlsessionFactory创建sqlsession;

        练习全部jar (Spring+Mybatis+Spring-mybatis整合包)下载 :

        http://download.csdn.net/detail/lablenet/9385114

      

        demo数据准备 :

            (1) 创建一个客户表 :

    1. --客户表  
    2. CREATE TABLE F_CLIENT(  
    3.     ID NUMBER(12) PRIMARY KEY,--用户编号  
    4.     USERNAME VARCHAR2(20) NOT NULL,--用户姓名  
    5.     CLIENT_CERTIFICATE_NO VARCHAR2(20) NOT NULL UNIQUE,--证件号码  
    6.     BORN_DATE DATE,--出生日期  
    7.     FAMILY_REGISTER_ADDRESS VARCHAR2(200),--家庭住址  
    8.     NOW_ADDRESS VARCHAR2(200) NOT NULL,--现在住址  
    9.     CONTACT_MODE VARCHAR2(50) NOT NULL,--联系方式  
    10.     URGENCY_CONTACT_MODE VARCHAR2(50) NOT NULL,--紧急联系方式  
    11.     CREATE_DATE DATE NOT NULL--创建时间  
    12. );  

            (2) 初始化数据 :

    1. insert into f_client(id,username,client_certificate_no,born_date,family_register_address,now_address,contact_mode,urgency_contact_mode,create_date) values (14,  
    2. 'yuan','311209070127',to_date('1993-03-12','yyyy-mm-dd'),'河南省焦作市','河南省河南理工大学','150000000','110',sysdate);  
    3. insert into f_client(id,username,client_certificate_no,born_date,family_register_address,now_address,contact_mode,urgency_contact_mode,create_date) values(  
    4.  15,'yang','311209070126',to_date('1993-04-12','yyyy-mm-dd'),'河南温县','河南理工大学','3987321','110',sysdate);  
    5.  insert into f_client values(  
    6.  16,'yang','311209070129',to_date('1997-04-12','yyyy-mm-dd'),'河南新乡','河南理工大学','3987321','110',sysdate);  
    7.       


           (3) 客户表 po

    1. public class FClient {  
    2.      private Integer id;  
    3.      private String username;  
    4.      private String client_certificate_no;  
    5.      private Date born_date;  
    6.      private String family_register_address;  
    7.      private String now_address;  
    8.      private String contact_mode;  
    9.      private String urgency_contact_mode;  
    10.      private Date create_data;  
    11.     public Integer getId() {  
    12.         return id;  
    13.     }  
    14.     public void setId(Integer id) {  
    15.         this.id = id;  
    16.     }  
    17.     public String getUsername() {  
    18.         return username;  
    19.     }  
    20.     public void setUsername(String username) {  
    21.         this.username = username;  
    22.     }  
    23.     public String getClient_certificate_no() {  
    24.         return client_certificate_no;  
    25.     }  
    26.     public void setClient_certificate_no(String client_certificate_no) {  
    27.         this.client_certificate_no = client_certificate_no;  
    28.     }  
    29.     public Date getBorn_date() {  
    30.         return born_date;  
    31.     }  
    32.     public void setBorn_date(Date born_date) {  
    33.         this.born_date = born_date;  
    34.     }  
    35.     public String getFamily_register_address() {  
    36.         return family_register_address;  
    37.     }  
    38.     public void setFamily_register_address(String family_register_address) {  
    39.         this.family_register_address = family_register_address;  
    40.     }  
    41.     public String getNow_address() {  
    42.         return now_address;  
    43.     }  
    44.     public void setNow_address(String now_address) {  
    45.         this.now_address = now_address;  
    46.     }  
    47.     public String getContact_mode() {  
    48.         return contact_mode;  
    49.     }  
    50.     public void setContact_mode(String contact_mode) {  
    51.         this.contact_mode = contact_mode;  
    52.     }  
    53.     public String getUrgency_contact_mode() {  
    54.         return urgency_contact_mode;  
    55.     }  
    56.     public void setUrgency_contact_mode(String urgency_contact_mode) {  
    57.         this.urgency_contact_mode = urgency_contact_mode;  
    58.     }  
    59.     public Date getCreate_data() {  
    60.         return create_data;  
    61.     }  
    62.     public void setCreate_data(Date create_data) {  
    63.         this.create_data = create_data;  
    64.     }  
    65. }  




    2.原始dao整合

            整合图解 :

              


          下面我们使用一个例子来说明 :

               场景描述 : 通过客户id查询客户信息 ;

       (1)dao层

              dao接口

    1. public interface ClientDao {  
    2.   
    3.     FClient findClientById(int id);  
    4. }  


              dao接口实现 :

               注意 : 在这里我们让dao实现接口继承SqlSessionDaoSupport (在spring-mybatis整合包中 org.mybatis.spring.support.SqlSessionDaoSupport),则在dao接口实现中不需要sqlsessionFactory属性了;就不用了在注入sqlSessionFactory了;


    1. public class ClinetDapimpl extends SqlSessionDaoSupport implements ClientDao {  
    2.   
    3.       
    4. /*    
    5.  *  原始的sqlSessionFactory的注入方式 
    6.  *  private SqlSessionFactory sqlSessionFactory; 
    7.  
    8.     public ClinetDapimpl(SqlSessionFactory sqlSessionFactory) { 
    9.         super(); 
    10.         this.sqlSessionFactory = sqlSessionFactory; 
    11.     }*/  
    12.   
    13.     @Override  
    14.     public FClient findClientById(int id) {  
    15.         SqlSession session = this.getSqlSession();  
    16.         FClient client = (FClient) session.selectOne("cn.labelnet.dao.ClientDao.findClientById",id);  
    17.         return client;  
    18.     }  
    19.       
    20. }  

        (2)Clientmap.xml

                 操作数据库;

    1. <?xml version="1.0" encoding="UTF-8" ?>    
    2. <!DOCTYPE mapper    
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">   
    5. <mapper namespace="cn.labelnet.dao.ClientDao">   
    6.   
    7.   
    8.    <select id="findClientById" parameterType="int" resultType="cn.labelnet.po.FClient">  
    9.       select * from f_client where id=#{value}  
    10.    </select>  
    11.   
    12.   
    13. </mapper>  


        (3)SqlMapConfig.xml

                 在之前的练习中,我们在这里加载数据源,但是在整合中我们将数据源加载交给了spring的ApplicationContext.xml

    1. <?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE configuration  
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
    5. <configuration>  
    6.       
    7.     <mappers>  
    8.       
    9.        <mapper resource="cn/lablenet/dao/sqlmap/ClientMap.xml"/>  
    10.       
    11.         <!-- 加载mapper映射文件 -->  
    12.           
    13.       <!--  <mapper resource="cn/labelnet/mapper/ClientMapper.xml" /> -->  
    14.           
    15.     </mappers>  
    16.       
    17. </configuration>  

       (4)ApplicationContext.xml

                注意 :1)数据源加载用的是 org.apache.commons.dbcp.BasicDataSource ;

                           2)配置sqlsessionFactory 用的是 org.mybatis.spring.SqlSessionFactoryBean ;

                           3)配置dao的接口实现,为其注入sqlSessionFactory ;


    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"   
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    5.     xmlns:p="http://www.springframework.org/schema/p"  
    6.     xmlns:aop="http://www.springframework.org/schema/aop"   
    7.     xsi:schemaLocation="  
    8.     http://www.springframework.org/schema/beans   
    9.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
    10.     http://www.springframework.org/schema/aop   
    11.     http://www.springframework.org/schema/aop/spring-aop-2.5.xsd    
    12.     http://www.springframework.org/schema/context  
    13.     http://www.springframework.org/schema/context/spring-context-2.5.xsd">  
    14.    
    15.     <!-- 加载数据库配置文件 -->  
    16.     <context:property-placeholder location="classpath:db.properties"/>  
    17.       
    18.     <!-- 配置数据源,使用dbcp -->  
    19.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
    20.        <property name="driverClassName" value="${oracle.driver}"></property>  
    21.        <property name="url" value="${oracle.url}"></property>  
    22.        <property name="username" value="${oracle.name}"></property>  
    23.        <property name="password" value="${oracle.pass}"></property>  
    24.        <property name="maxActive" value="10"></property>  
    25.        <property name="maxIdle" value="5"></property>  
    26.     </bean>  
    27.    
    28.     <!-- 1.配置sqlSessionFactory -->  
    29.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >  
    30.            
    31.          <!-- 加载mybatis的配置信息 -->  
    32.          <property name="configLocation" value="cn/labelnet/mybatis/config/SqlmapDaoConfig.xml"></property>  
    33.            
    34.          <!-- 加载数据源  dataSource-->  
    35.          <property name="dataSource" ref="dataSource"></property>  
    36.            
    37.     </bean>  
    38.       
    39.       
    40.     <!-- 配置dao的接口实现,为其注入sqlSessionFactory -->  
    41.     <bean id="ClientDao" class="cn.labelnet.dao.ClinetDapimpl">  
    42.       
    43.         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>  
    44.       
    45.     </bean>  
    46. </beans>  



        5)测试

    1. //得到Spring 容器  
    2. private ApplicationContext applicationContext;  
    3.   
    4. @Before  
    5. public void setUp() throws Exception {  
    6.     applicationContext=new ClassPathXmlApplicationContext("classpath:cn/labelnet/spring/config/applicationContext.xml");  
    7. }  
    8.   
    9.   
    10. @Test  
    11. public void test() {  
    12.     ClientMapper bean = (ClientMapper) applicationContext.getBean("clientMapper");  
    13.     bean.findClientById(15);  
    14. }  
        <div id="digg" articleid="50440321">
            <dl id="btnDigg" class="digg digg_disable" onclick="btndigga();">
               
                 <dt>顶</dt>
                <dd>0</dd>
            </dl>
           
              
            <dl id="btnBury" class="digg digg_disable" onclick="btnburya();">
              
                  <dt>踩</dt>
                <dd>0</dd>               
            </dl>
            
        </div>
     <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank">&nbsp;</a>   </div>
    <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank">&nbsp;</a></div>
    <script type="text/javascript">
        function btndigga() {
            $(".tracking-ad[data-mod='popu_222'] a").click();
        }
        function btnburya() {
            $(".tracking-ad[data-mod='popu_223'] a").click();
        }
            </script>
    
    <div style="clear:both; height:10px;"></div>
    
    
            <div class="similar_article">
                    <h4></h4>
                    <div class="similar_c" style="margin:20px 0px 0px 0px">
                        <div class="similar_c_t">
                          &nbsp;&nbsp;相关文章推荐
                        </div>
                   
                        <div class="similar_wrap tracking-ad" data-mod="popu_36" style="max-height:250px">                       
                            <ul class="similar_list fl">    
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/mickjoust/article/details/51612482" title="Spring Boot 实践折腾记(二):切入点,Spring MVC集成Mybatis的经典例子" strategy="BlogCommendFromBaidu_0" target="_blank">Spring Boot 实践折腾记(二):切入点,Spring MVC集成Mybatis的经典例子</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/huiyiCourse/detail/596?utm_source=blog7" title="免费直播 神经网络的原理及结构设计--何宇健" strategy="undefined" target="_blank">免费直播 神经网络的原理及结构设计--何宇健</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/cwh056056/article/details/51051042" title="(五)mybatis学习之mapper代理开发方式及与spring整合" strategy="BlogCommendFromBaidu_1" target="_blank">(五)mybatis学习之mapper代理开发方式及与spring整合</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/huiyiCourse/detail/602?utm_source=blog7" title="Apache Weex:移动研发的进阶之路--董岩" strategy="undefined" target="_blank">Apache Weex:移动研发的进阶之路--董岩</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/h3243212/article/details/50778937" title="mybatis学习笔记(18)-mybatis逆向工程" strategy="BlogCommendFromBaidu_2" target="_blank">mybatis学习笔记(18)-mybatis逆向工程</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/6252?utm_source=blog7" title="C++ 百万并发网络通信引擎架构与实现" strategy="undefined" target="_blank">C++ 百万并发网络通信引擎架构与实现</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u011051912/article/details/73611618" title="SpringMVC中PostForEntity的中文乱码问题" strategy="BlogCommendFromBaidu_3" target="_blank">SpringMVC中PostForEntity的中文乱码问题</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/6271?utm_source=blog7" title="PHP入门到精通及项目实战" strategy="undefined" target="_blank">PHP入门到精通及项目实战</a>
                                   </li>
                            </ul>
                              <ul class="similar_list fr">      
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/h3243212/article/details/50837878" title="springmvc学习笔记(7)-springmvc整合mybatis之mapper" strategy="BlogCommendFromBaidu_4" target="_blank">springmvc学习笔记(7)-springmvc整合mybatis之mapper</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/6409?utm_source=blog7" title=" Kotlin基本语法到实战开发" strategy="undefined" target="_blank"> Kotlin基本语法到实战开发</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/QH_JAVA/article/details/43699137" title="Spring之ORM(spring 与mybatis的4种整合实例)" strategy="BlogCommendFromBaidu_5" target="_blank">Spring之ORM(spring 与mybatis的4种整合实例)</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://edu.csdn.net/course/detail/2932?utm_source=blog7" title=" Android 实战开发 第三方SDK 讯飞语音SDK" strategy="undefined" target="_blank"> Android 实战开发 第三方SDK 讯飞语音SDK</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/mickjoust/article/details/51605515" title="Spring Boot 实践折腾记(一):快速,Hello World例子" strategy="BlogCommendFromBaidu_6" target="_blank">Spring Boot 实践折腾记(一):快速,Hello World例子</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u011051912/article/details/74295172" title="SpringBoot集成Mybatis+xml格式的sql配置文件" strategy="BlogCommendFromBaidu_7" target="_blank">SpringBoot集成Mybatis+xml格式的sql配置文件</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/zbw18297786698/article/details/53241167" title="Spring与Mybatis的整合------原始Dao的整合方式" strategy="BlogCommendFromBaidu_8" target="_blank">Spring与Mybatis的整合------原始Dao的整合方式</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u010435203/article/details/51527404" title="SSM之DAO部分Spring与MyBatis整合" strategy="BlogCommendFromBaidu_9" target="_blank">SSM之DAO部分Spring与MyBatis整合</a>
                                   </li>
                            </ul>
                        </div>
                    </div>
                </div>   
    
  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/jpfss/p/7800476.html
Copyright © 2011-2022 走看看