个人对mybatis框架的理解与体会

    年末了,停下来歇歇,顺便把自己对mybatis的理解来说一说。

    本次开发用的是spring mvc 3.0+mybatis, spring mvc就不多说了,接下来,重点说一下mybatis,本人也第一次使用mybatis,

    mybatis其实就是对jdbc的封装,对程序员的编写sql能力的要求比较高。


   下面来说说在实际应用中的mybatis

    首先要构建一个SqlSessionFactory

    1.在spring 配置文件中,先建一个SqlSessionFactory,然后配置dataSource.

   
        
        
    

           destroy-method="close" abstract="false">
        
            ${database.driverClassName}
        

        
            ${database.url}
        

        
            ${database.username}
        

        
            ${database.password}
        

    

2.dataInit.properties文件配置,当然还有好多的数据库的配置没加,这只是一个总结,有需要的童鞋,自己加一下就ok了。针对数据库配置这方面的配置,在后来的blog中会进行详细阐述,敬请期待。

database.driverClassName=oracle.jdbc.driver.OracleDriver
database.url=jdbc:oracle:thin:@10.21.2.89:1521:portal
database.dialect=org.hibernate.dialect.Oracle10gDialect
database.username=username
database.password=password

3.mybatis-xxx.xml文件配置

mybatis的映射文件,其实mybatis框架的核心就是对mybatis映射文件的操作,mybatis的文件配置就是sql的映射,所以要想特别熟练的应用mybatis,必须能熟练地操作sql。

mybatis其实是在jstl的基础上进行的改进,主要有9个标签

  
        SELECT
        
        from
        
        
        
            AND parent_id=#{parentId}
        

        
            AND container_name=#{containerName}
        

        
            AND is_box=#{isBox}
        

        
            AND domain=#{domain}
        

        
    
    
    
    
    

    
    
                     order="BEFORE">
            select seq_container.nextVal
            from dual
        

        insert into
        
        (
            container_id,
            parent_id,
            container_name,
            total_well_count,
            empty_well_count,
            sort,
            is_box,
            xNumber,
            yNumber,
            remarks,
            creat_time,
            creator,
            last_modify_person,
            last_modify_time,
            domain
        )
         values
        (
            #{containerId,jdbcType=NUMERIC},
            #{parentId,jdbcType=NUMERIC},
            #{containerName,jdbcType=VARCHAR},
            #{totalWellCount,jdbcType=NUMERIC},
            #{emptyWellCount,jdbcType=NUMERIC},
            #{sort,jdbcType=VARCHAR},
            #{isBox,jdbcType=NUMERIC},
            #{xNumber,jdbcType=NUMERIC},
            #{yNumber,jdbcType=NUMERIC},
            #{remarks,jdbcType=VARCHAR},
            sysdate,
            #{creator,jdbcType=VARCHAR},
            #{lastModifyPerson,jdbcType=VARCHAR},
            sysdate,
            #{domain,jdbcType=VARCHAR}
        )
    
    


    
    
         delete container where container_id in(
              select container_id from container c start with c.container_id=#{containerId} connect by c.parent_id = prior c.container_id
            )
    


    
    
        update
        
        
                container_name = #{containerName},
                parent_id = #{parentId}
        

        where  container_id = #{containerId}
    


以上是对我们常用的操作的一些总结,主要就是查询,新增,修改,删除等操作。

以下,我写一些在项目上的经验之谈。我在项目中,主要做的是对easyui tree的操作,之前,由于是半路被拉进项目中,不知道oracle有操作tree的语句,再加上项目一直没定下来批量操作,所以,后来才加上的批量操作,希望对有需要的童鞋有帮助,也希望以此来警戒自己,在项目开始之前,一定要做好功课,确定好最佳方案,在遇到问题时寻求最优的解决方案解决问题。


下面是批量操作的映射文件代码

 
    
        insert into
        
        select seq_container.nextval, c.* from (
        
            select
            #{item.parentId,jdbcType=NUMERIC},
            #{item.containerName,jdbcType=VARCHAR},
            #{item.totalWellCount,jdbcType=NUMERIC},
            #{item.emptyWellCount,jdbcType=NUMERIC},
            #{item.sort,jdbcType=VARCHAR},
            #{item.remarks,jdbcType=VARCHAR},
            sysdate createTime,
            #{item.creator,jdbcType=VARCHAR},
            #{item.lastModifyPerson,jdbcType=VARCHAR},
            sysdate lastModifyTime,
            #{item.domain,jdbcType=VARCHAR},
            #{item.isBox,jdbcType=NUMERIC},
            #{item.xNumber,jdbcType=NUMERIC},
            #{item.yNumber,jdbcType=NUMERIC}
            from dual
        

        ) c
    

    
    
    
    
        delete from
        
        where container_id in
        
        #{item.containerId}
        

    

    
    
    
    
    
    
    
        update container set
        
        
            total_well_count = total_well_count + #{totalWellCount},
            empty_well_count = empty_well_count + #{emptyWellCount},
            last_modify_person = #{lastModifyPerson},
            last_modify_time = sysdate
        

        
        
            total_well_count = total_well_count - #{totalWellCount},
            empty_well_count = empty_well_count - #{emptyWellCount},
            last_modify_person = #{lastModifyPerson},
            last_modify_time = sysdate
        

        where container_id in (
            select m.container_id from container m start with m.container_id=#{containerId} connect by prior m.parent_id=m.container_id
        )
    

    
    
    
   

  也提一点注意:在进行mybatis的操作时,最好先将自己的sql提出来,拿到数据库进行格式化和执行,这样的话,能 更快的提高效率,当然,如果sql的功力特深的话,更好了。

  本人在数据库方面的了解还甚少,有童鞋有更优的方案,敬请提出,共同努力,如果以上有啥问题,希望大神提出,共同来进行探讨。


你可能感兴趣的:(spring,oracle)