在Mybatis3开发中与配置相关的7点体会

     Mybatis3前身是Apche开源项目ibatis,后前移至google code改名为Mybatis,mybatis是Java持久化框架,关于Mybatis学习难度不大,熟悉JDBC编程的话,相信很快会喜欢Mybatis这种对JDBC高层构建的方式。

     被Mybatis的XML配置这种集中管理SQL和Java对象与数据库记录映射的方式感染下,为开发中犯得一些低级错误似乎找到一点缘由,团队开发中或多或少的自己或者同事不遵循规则,不按流程走,图一时的简单为后续的工作留下麻烦等等。当发现问题的时候,除了惊叹,顿足之外,应该想想今日当初。

程序是没有错的,都是人的错,是自己在开发过程中的不严谨,不专业把自己推向苦逼程序员的境遇。


    文中第二段与主题无关,Mybatis触动感情,开发者要像XML一样,眼里容不了一粒沙的严谨,规法。

 

   wKioL1M79YPAJz6OAAKG5ytpE0E143.jpg


   

    通过上图谈谈使用Mybatis的一些体会和使用的方式。

  1.Configuration

     Configuration在这里包含了mybatis-config.xml, SqlMap.xml Mapper-annotations

     mybatis-config.xml:这个配置文件是使用Mybatis框架首先要准备的配置文件,其中最核心的配置是配置一个数据源,从而使Mybatis与DB联系起来。mybatis-config.xml是默认的配置文件名,如果改动了,在创建应用级sessionFactory对象是应该留意。

     sqlMap.xml:配置SQL命令,操作数据库的结果集映射。从上图可看出多个sqlMap.xml组成了SqlMapConfig.xml,也就是说sql映射可以集中管理,也可以用户自己组织管理。事实上分组管理是明智的选择。

     Mapper-annotations:在JDK1.5 之后支持注解,Mybatis提供的另一种SQL命令,操作数据库结果集映射的解决方案。

  2.Mapped Statements

     Configuration对sqlMap进行集中管理,由sqlMap指定的SQL命令和输入数据(上图左侧:HashMap/Dictionary JavaObject,Primitive)对数据库进行操作,从而产生上图右侧的输出。

  3.目录结构

     .src

      ---com.p.bean

      -----Person.java(实体类)

      ---com.p.mapper

      -----PersonMapper.java(接口)

      -----PersonMapper.xml(sqlMap映射)

      mybatis-config.xml

      上面2中提到,configuration对sqlmap统一管理,则要遵循Mybatis配置的规则,将sqlmap映射配置文件添加到mybatis-config.xml中。

     

<mappers>
        <mapper resource="com/p/mapper/PersonMapper.xml"></mapper>
    </mappers>

      不论工程中采用何种目录结构,最终能够从头到尾保持这样的结构将是百里无一害的,事实上做到这么一点在团队开发中并非易事。

   4.关于Sql管理

     sql语句满布在DAO层或者Service层会让程序变得乱七八糟,如果测试出问题了就等着加班吧,而Mybatis决定让SQL掌握在开发者手中,这样赋予的自由会不留神就让SQL溜进代码中。

    听XML的话,遵循规范,将SQL统一管理起来吧,可能会在实际中遇到一个简单的SQL操作,要做出Mapper接口类,然后sqlmapper映射,看样子是简单事情复杂化了,这样想想就行了,别让自己成为了团队开发中那个号称:“猪一样的队友”。

   5.Mapper Annotation

      是的,没有错,mybatis提供了Sqlmapper映射的Annotation支持,实质上就是将配置无侵害的写在了代码中去。这样可好了,大量的映射配置在编码过程中一并搞定,Mybatis的强大动态SQL功能丢失不少,Sql再一次溜进代码中去了。

     当然,开发的情况总是不尽相同的,如果一个人写个小程序神马的,那就Annotation mapper搞定啦。面对Annotation Mapper也不是避而不谈,在接口类多参数方法中用到。

    例如下面代码片段:

    Mapper接口类的方法:

   

public List<Talk> queryTalkOfClientForPage(
            @Param("clientId") String clientId, @Param("size") int size,
            @Param("page") int page);

   SQLMapper映射配置:

   

<select id="queryTalkOfClientForPage" resultMap="baseResultMap">
        select
        <include refid="fieldList" />
        from user_talk where client_id=#{clientId} limit #{size} offset
        <choose>
            <when test="page >=1">(#{page}-1)*#{size}</when>
            <otherwise>0</otherwise>
        </choose>
    </select>

     

     由上面两段代码可以看出在接口方法多参数的时候,为了避免对接口参数进行封装(Java对象,HashMap),采用注解来定义了参数的名称,然后在配置中使用该名称,尽力遵循接口方法的参数命名清晰,在注解定义参数的名称直接保持一致将避免了错误的发生可能性。

  6.Mapper Generator

     Mapper映射配置也是一个痛苦工作,还用自动生成,然后做一些修改,就可以减轻很多负担了。

     下载:https://github.com/mybatis

  7.关于别名

     在配置中用到参数类型,Mybatis内置了一些Java基本类型和对象的别名,建议基本类型如:int,可以使用: _int,对象类型使用类的全名如:java.util.List。

     虽然别名会减少输入,但是全名却更清晰而且大多数IDE支持通过类全名打开类,So, 不维护别名配置管理,输入上多了一点,维护和阅读代码的人会心怀感激的。

   

    Mybatis越用发现越多,体会越深,本文浅浅的总结了一下在使用Mytais作为持久层时一些体会。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值