我们在写bean的时候,字段通常都使用小驼峰命名法,但是在设计数据库时,一般使用下划线分割命名.这样,在取出数据库字段时,还需要转换.如何简洁的实现这种转换呢?
你能遇到的问题,只要是普遍存在的,大家都会遇到,那么,就一定有现成的解决方案.
在阅读 commons-dbutils
的文档时, BeanHandler
的第二个参数可以达到这个目的.只需传入一个实现 RowProcessor
接口的对象. 比如说 BasicRowProcessor
:
User user = queryRunner.query(conn,sql,new BeanHandler<User>(User.class, new BasicRowProcessor());
这样做还不够,你还没有告诉BasicRowProcessor
怎样处理字段的映射关系,可以给 BasicRowProcessor
的构造函数传入一个BeanProcessor
,给这个BeanProcessor
传入一个Map
,指定数据库字段和bean
字段的映射关系.
Map<String,String> map = new HashMap<>(); map.put("user_id","userId"); User user = queryRunner.query(conn,sql,new BeanHandler<User>(User.class, new BasicRowProcessor(new BeanProcessor(map))));
这样就可以将数据中的 user_id
映射到 bean
上的 userId
了.
仔细阅读文档,发现官方已经贴心的为你设计好了一个类,专门干这种事的,叫做 GenerousBeanProcessor
,这下简单了,不再需要什么 map
了.只要你的数据库字段名称和bean
中的字段名称除了下划线和大小写都一样的话,用它就可以转换:
User user = queryRunner.query(conn,sql,new BeanHandler<User>(User.class, new BasicRowProcessor(new GenerousBeanProcessor())));
大功告成!