博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Mybatis3开发中与配置相关的7点体会
阅读量:6403 次
发布时间:2019-06-23

本文共 2794 字,大约阅读时间需要 9 分钟。

Mybatis3前身是Apche开源项目ibatis,后前移至google code改名为,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中。

     

1
2
3
<
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接口类的方法:

   

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

   SQLMapper映射配置:

   

1
2
3
4
5
6
7
8
9
<
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作为持久层时一些体会。

本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1389298,如需转载请自行联系原作者

你可能感兴趣的文章
java flatmapfunction_Java8 Stream flatmap中间操作用法解析
查看>>
java rmi spring 4.0_Java Spring RMI一些尝试
查看>>
JAVA怎么连接华为的HDFS系统_JAVA-API操作HDFS文件系统(HDFS核心类FileSystem的使用)...
查看>>
java牛客网四则运算_数据库刷题—牛客网(51-61)
查看>>
Java get set6_JDK6的新特性(转)
查看>>
java发送邮件 不登陆_Java邮件到Exchange Server“不支持登录方法”
查看>>
编程学习初体验(5. 如何自学编程)(2)
查看>>
思科ISR G1与ISR G1C的区别
查看>>
利用perl提取web配置文件中的域名对应的路径
查看>>
Centos5上安装JRE和LUMAQQ
查看>>
关于监控工具的主动发起性能测试
查看>>
我的友情链接
查看>>
OpenSSL学习(十六):基础-指令rand
查看>>
Apache+tomcat实现高可用WEB集群
查看>>
KeyMob致力于打造国内领先的移动广告平台
查看>>
【九度OJ1283】|【剑指offer35】第一个只出现一次的字符
查看>>
Oracle语句记录
查看>>
iOS身份证验证
查看>>
oracle的基本语法
查看>>
Maven使用小结
查看>>