项目总结2——mybatis配置的理解

之前的项目基本上都是用mongodb,以至于mysql相关的知识异常薄弱,这次连续一个半月的加班,总算是实际用到了mysql,也使自己对mysql了解的更多,对mybatis了解的更多,这里就说一说经过这一个项目,我对mybatis配置的进一步理解。
一般来说,一个比较完整的mybatis文件大概如下:

<!--第一部分-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--第二部分-->
<mapper namespace="com.cmsz.om.dao.automaticInspection.HostCollectionDao">
<!--第三部分-->
    <resultMap id="hostCollection"
        type="com.cmsz.om.model.automaticInspection.HostCollectionModel">
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="pred_exec_time" property="predExecTime" jdbcType="TIMESTAMP" />
        <result column="exec_time" property="execTime" jdbcType="TIMESTAMP" />
        <result column="host_ip" property="hostIp" jdbcType="VARCHAR" />
        <result column="host_name" property="hostName" jdbcType="VARCHAR" />
        <result column="check_type" property="checkType"
            jdbcType="INTEGER" />
        <result column="excute_time" property="excuteTime"
            jdbcType="FLOAT" />
        <result column="latency" property="latency" jdbcType="FLOAT" />
        <result column="opr_result" property="oprResult" jdbcType="VARCHAR" />
        <result column="tranc_result" property="trancResult"
            jdbcType="VARCHAR" />
        <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
    </resultMap>
<!--第四部分-->
    <select id="findPer" parameterType="map" resultMap="hostCollection">
    SELECT t.HOST_IP,DATE_FORMAT(t.CREATE_TIME,"%Y-%m-%d %H:00:00") createTime,t.CHECK_TYPE,t.OPR_RESULT 
		 FROM om_test.host_collect_datas t  
		 WHERE  
		 <![CDATA[
		 T.CREATE_TIME>=#{startTime} and T.CREATE_TIME<#{endTime} 
		]]>
		 GROUP BY t.HOST_IP,t.check_type,DATE_FORMAT(t.CREATE_TIME,"%Y-%m-%d %H:00:00")
	</select>
</mapper>

上边我标注了一至四四个部分,正常情况来说,这基本的四部分是必不可少的,下边是我对这四部分的理解:

第一部分是mybatis配置文件必不可少的,也可以说是基本固定的,算是mybatis文件的头部声明,以便于spring扫描时能够知道这是个mybatis文件,从而正常的解析。

第二部分namespace,直接指向我们对应的dao接口的完整路径,包括包名和类名,这个就需要根据不同的dao接口进行适当的改变。

第四部分是我们操作数据库的sql语句,结合mybatis的一些标签使mybatis生成正确的sql语句,这一步分很重要,主要涉及到sql语句和编写和mysql标签的使用。

而我这里要着重说明的是第三部分,因为有比较长的一段时间我并不能真正的理解这个配置具体的含义,以至于实际运用中犯了若干个错误。
在这一部分中又可以分为几个比较小的部分,其中的id,相信了解spring的都应该明白是什么意思以及他的作用,就像我们这里第四部分resultMap="hostCollection"就直接引用了这个id。
接下来的type,这里是直接指向的我们java代码中的实体类,和dao接口一样需要完整的路径,即完整包名和类名。
最重头的其实在下边,也就是我们可以看到的若干个重复的result,以及result里边的column和property以及jdbcType。
很早以前,我知道这里是数据库和实体类的对应,但是并不明白究竟是怎么个对应法,因此有一次我column配的是实体类的属性名,而property配的则是数据库中的字段名。由于当时的名字都起得一模一样,也就导致程序正常运行,我以为这样就是对的。
但是后来在一个新的mybatis配置中,我依然这样的配置,结果由于数据库字段名和实体类的属性名并不一样,就导致程序无法正常运行,最后我一番修改后,把column对应到了数据库中的字段名,把property对应到了实体类的属性名。
然后,因为sql不是太麻烦,不论是查询条件还是返回结构都没有额外的字段,所以这样之后运行程序也再次正常,于是我便以为这样便是对的。
知道最近,又一次的业务需求,使得返回值不仅仅包括数据库表中原有的字段,经过了一番挣扎后,我才终于发现,原来property确实是对应实体类的属性。
但是,column实际上对应的是mybatis中sql语句的返回值,而不是我之前所以为的数据库表中的实际字段。
至此,我觉得自己大概算是真正的理解了mybatis配置的具体含义,只是不知道是不是还有下一次遇到新的问题,然后再像之前一样,继续推翻这个理解。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值