定制专属的mybatis

突然发现自己这篇文章写得很差,用了最笨的方法(不应该去考虑修改源码),后面我换一种实现做

--------------------------------------------------------------------------------------------------------------------

现在的orm框架都是选择mybatis,那么mybatis好用吗?应该是相对hibernate来说是好用的,但是有时候还是用着有点嫌复杂,但是现在有很多开源的封装的mybatis的二次框架,能够完成很多功能,单表的操作都能够完成,也支持注解的方式进行开发,省略了xml的方式。但是个人认为还是xml写起来要舒服一点,因为这样写起来维护性比较高吧。(个人见解而已)难免需要多表链接,那么这时候,就需要用到dto了,javabean的字段是userName,而数据库的字段是user_name,那么这时候,你要么sql里面写 user_name as username,要么就只能用resultMap。这样的开发起来,有点不舒服,那么如何自动将_去掉,进行自动的驼峰命名喃?这样或许能提高开发的速度吧。

昨天debug跟了很久的代码,终于找到了对应的地方。目前达到的效果还是可以的。可以不用使用resultMap就能自动设置进去。但是不保证其他地方有没有问题(因为只是初步弄出来,还没有仔细的测,后面会继续改造,更新博客)

修改的地方就在于DefaultResultSetHandler这个类里面。

关键的一行代码是propertyName,原本是映射columnName,deal的处理也很简单,是将_去掉,并且后面一位数转大写。

private String deal(String str) {
		while(str.indexOf("_") != -1) {
			int index=str.indexOf("_")+1;
            //使用stringBuffer 是为了尽量不降低性能,这里会多出很多string的常量池内容,
            //因此可能会需要占用更多的内存,但是一般来说问题不大
			StringBuffer temp = new StringBuffer(str.substring(0, index))
					.append(str.substring(index, index + 1).toUpperCase())
					.append(str.substring(index + 1, str.length()));
			
			str=temp.toString().replaceFirst("_", "");
		}
		return str;
}

经过自己的测试,发现了使用起来非常方便,只需要驼峰命名就好,并且使用resultMap也非常的方便,当你使用resultMap时也是非常的方便,只需要在主对象那里写一个id映射,其他所有的字段都会进行自动_转驼峰,让我们开发人员从复杂的配置当中解脱出来。

<resultMap type="com.User" id="user">
		<id column="id" property="id" />
		<association property="password" column="id" select="findA">
		</association>
</resultMap> 

猜你喜欢

转载自blog.csdn.net/qq_40384690/article/details/81213461