看过之前的蜕变系列文章,相信你对mybatis有了初步的认识。很多朋友编写mybatis比较随意,甚至工具生成的痕迹都经常见到,这个不是很好,sql是比较关键和核心的地方,不能骚整噢。我们今天进一步来了解下mybatis的一些规范写法和常用标签。
每月底工厂君会根据后台记录筛选转发文章到朋友圈的前三位的朋友,给与奖励,第一名100元,第二名50元,第三名30元的现金奖励。
猿蜕变同样是一个原创系列文章,帮助你从一个普通的小白,开始掌握一些行业内通用的框架技术知识以及锻炼你对系统设计能力的提升,完成属于你的蜕变,更多精彩内容,敬请大家关注公主号猿人工厂,点击猿人养成获取!
现在又要告诉大家一个不幸的消息:数据库的命名是有规范的,基本上不太会出现数据库字段名和类中的属性名一一对应的情况。不要问我为什么,因为大家都这么搞,大家是得罪不起的,如果你把数据库字段名和类中的属性名一致了,准备承受dba来自地狱的怒吼吧。我们之前为了解决这个问题,在sql语句中使用了as 的别名语法,这样写其实是很费力的。Mybatis提供了resultMap来解决这个问题,我们回到正途使用resultMap。
resultType实际上是将数据库表字段与JavaBean中的属性建立映射关系,在编写SQL的时候使用resultMap,mybatis会依据resultMap中的映射关系将数据库返回的记录映射到对应的字段上。
修改TravelRouteMapper.xml增加一个resultMap
<resultMap type="TravelRoute" id="TravelRouteType" >
<result column = "travel_route_id"property="travelRouteId"/>
<result column = "travel_route_name"property="travelRouteName"/>
<result column = "travel_route_price"property="travelRoutePrice"/>
<result column = "travel_route_introduce"property="travelRouteIntroduce"/>
<result column = "travel_route_flag"property="travelRouteFlag"/>
<result column = "travel_route_date"property="travelRouteDate"/>
<result column = "isThemeTour"property="isThemeTour"/>
<result column = "travel_route_count"property="travelRouteCount"/>
<result column = "travel_route_cid"property="travelRouteCid"/>
<result column = "travel_route_image"property="travelRouteImage"/>
<result column ="travel_route_seller_id"property="travelRouteSellerId"/>
</resultMap>
我们将之前使用as 语法的queryTravelByPage和queryTravelById的as xxx去掉,将resultType改为TravelRoute。留下一个queryTravelByName当作复习语法的例子就好,就不赶尽杀绝了。
<select id="queryTravelByPage"resultMap="TravelRouteType" parameterType="java.util.Map">
select
travel_route_id ,
travel_route_name ,
travel_route_price ,
travel_route_introduce ,
travel_route_flag ,
travel_route_date ,
isThemeTour ,
travel_route_count ,
travel_route_cid ,
travel_route_image ,
travel_route_seller_id
from travel_route order by travel_route_id desc limit #{startRow},#{endRow}
</select>
<select id="queryTravelById"resultMap="TravelRouteType" parameterType="Long">
select
travel_route_id ,
travel_route_name ,
travel_route_price ,
travel_route_introduce ,
travel_route_flag ,
travel_route_date ,
isThemeTour ,
travel_route_count,
travel_route_cid ,
travel_route_image ,
travel_route_seller_id
from travel_route where travel_route_id =#{travelRouteId}
</select>
运行测试程序,保证代码修改正确!
之前编写的例子中,我们都自己实现了dao接口,其实mybatis提供了动态代理的方式,无需由开发人员编写实现类。使用mapper的动态代理,可以简化冗余代码的编写,也是实际开发中推荐的写法。接下来,我们就一起来看下怎样使用动态代理。
1.在TravelRouteMapper.xml中的mapp