使用基于注解的mybatis时,利用反射和注解生成sql语句
2017-01-04 22:07
323 查看
在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便,也很容易拼错。google了一下也没有找到什么解决方式(可能是姿势不对),在stackoverflow上提的问题截止目前还没有人回答。所以自己想了一个基于反射和注解的解决办法
git地址:
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
git地址:
giraffe0813
spring-mybatis-utils
a555c9 ,up-to-date
下面是之前的代码片段:
第一版(利用反射)
首先想到的是可以利用反射获得对象的所有属性,然后拼接成sql语句。所以写了一个基于反射拼装sql语句的方法,然后基于mybatis动态获得sql语句的方式 获得完整的sql 具体的代码如下:接口层改为下面的样子,sql语句的生成放到PoiSqlProvider的insertPoiBo方法中
最终版(加入注解)
上面的getAllPropertiesForSql方法有个缺点,如果数据库的字段名和类的属性名不一致,就不能依靠反射获得sql了。所以借鉴老大的ORM框架也写了一个注解Column,用于model类的属性上,表明属性所对应数据库字段。下面是Column注解的snippet。from: http://www.importnew.com/22918.html
相关文章推荐
- Java反射随记
- mybatis id 保存UUID
- AS3中的反射(速记) 分析
- SQL Server 2005 定时执行SQL语句的方法
- DB2比较常用与实用sql语句总结
- ASP中 SQL语句 使用方法第1/3页
- asp 合并记录集并删除的sql语句
- 世界杯猜想活动的各类榜单的SQL语句小结
- 经典SQL语句大全第1/2页
- Sql语句与存储过程查询数据的性能测试实现代码
- SQL语句的执行原理分析
- SQL Server中查看对象定义的SQL语句
- MySQL字段自增自减的SQL语句示例介绍
- 解析SQL语句中Replace INTO与INSERT INTO的不同之处
- 同一个sql语句 连接两个数据库服务器
- C# 反射(Reflection)的用处分析
- C#通过反射创建自定义泛型
- 解析sql语句中left_join、inner_join中的on与where的区别
- SQL Server中选出指定范围行的SQL语句代码
- SQL语句 操作全集 学习mssql的朋友一定要看