您的位置:首页 > 其它

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

2014-04-02 21:02 204 查看
Mybatis3前身是Apche开源项目ibatis,后前移至google code改名为Mybatis,mybatis是Java持久化框架,关于Mybatis学习难度不大,熟悉JDBC编程的话,相信很快会喜欢Mybatis这种对JDBC高层构建的方式。
被Mybatis的XML配置这种集中管理SQL和Java对象与数据库记录映射的方式感染下,为开发中犯得一些低级错误似乎找到一点缘由,团队开发中或多或少的自己或者同事不遵循规则,不按流程走,图一时的简单为后续的工作留下麻烦等等。当发现问题的时候,除了惊叹,顿足之外,应该想想今日当初。
程序是没有错的,都是人的错,是自己在开发过程中的不严谨,不专业把自己推向苦逼程序员的境遇。

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





通过上图谈谈使用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作为持久层时一些体会。

本文出自 “野马红尘” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: