您的位置:首页 > 数据库

使用基于注解的mybatis时,利用反射和注解生成sql语句

2017-01-04 22:07 323 查看
在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便,也很容易拼错。google了一下也没有找到什么解决方式(可能是姿势不对),在stackoverflow上提的问题截止目前还没有人回答。所以自己想了一个基于反射和注解的解决办法

git地址:


giraffe0813


spring-mybatis-utils

a555c9 ,
up-to-date

下面是之前的代码片段:


第一版(利用反射)

首先想到的是可以利用反射获得对象的所有属性,然后拼接成sql语句。所以写了一个基于反射拼装sql语句的方法,然后基于mybatis动态获得sql语句的方式 获得完整的sql 具体的代码如下:

接口层改为下面的样子,sql语句的生成放到PoiSqlProvider的insertPoiBo方法中

PoiSqlProvider.class

下面是基于反射生成的两部分sq语句和最后拼接的语句

要注意的是如果数据库的字段名和插入对象的属性名不一致,那么不能使用生成的database filed sql。


最终版(加入注解)

上面的getAllPropertiesForSql方法有个缺点,如果数据库的字段名和类的属性名不一致,就不能依靠反射获得sql了。所以借鉴老大的ORM框架也写了一个注解Column,用于model类的属性上,表明属性所对应数据库字段。下面是Column注解的snippet。

之后在model类属性上加入对应的注解,省略getter和setter。Column的name为空时,代表属性名和字段名一致。

修改getAllPropertiesForSql方法,通过获取类属性上的注解获得数据库字段名。

利用反射+注解之后的输出结果,可以看到sql语句正确按照name的Column注解的输出了name属性对应的数据库字段是poi_name.

原文出处: Giraffe

from: http://www.importnew.com/22918.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息