Spring JdbcTemplate实现通用的泛型dao二:实现自己的名称转换NameHandler

来源:互联网 发布:移动数据流量监控 编辑:程序博客网 时间:2024/06/06 01:32

http://www.dexcoder.com/selfly/article/430;jsessionid=959C371EA8AA790218E02E8683007D9C


这个比较简单,只是实现了根据Java实体属性名转换回数据库表的列名而已,看下接口定义:

  1. /**
  2. * 名称处理接口
  3. *
  4. * User: liyd
  5. * Date: 2/12/14
  6. * Time: 4:51 PM
  7. */
  8. public interface NameHandler {
  9. /**
  10. * 根据实体名获取表名
  11. *
  12. * @param entityName
  13. * @return
  14. */
  15. public String getTableName(String entityName);
  16. /**
  17. * 根据表名获取主键名
  18. *
  19. * @param entityName
  20. * @return
  21. */
  22. public String getPrimaryName(String entityName);
  23. /**
  24. * 根据属性名获取列名
  25. *
  26. * @param fieldName
  27. * @return
  28. */
  29. public String getColumnName(String fieldName);
  30. }

三个方法相信一看就明白了,实现也顺便贴一下吧:

  1. /**
  2. * 默认名称处理handler
  3. *
  4. * User: liyd
  5. * Date: 2/12/14
  6. * Time: 4:51 PM
  7. */
  8. public class DefaultNameHandler implements NameHandler {
  9. /** 字段前缀 */
  10. private static final String PREFIX = "_";
  11. /** 主键后缀 */
  12. private static final String PRI_SUFFIX = "_id";
  13. /**
  14. * 根据实体名获取表名
  15. *
  16. * @param entityName
  17. * @return
  18. */
  19. @Override
  20. public String getTableName(String entityName) {
  21. //Java属性的骆驼命名法转换回数据库下划线“_”分隔的格式
  22. return NameUtils.getUnderlineName(entityName);
  23. }
  24. /**
  25. * 根据表名获取主键名
  26. *
  27. * @param entityName
  28. * @return
  29. */
  30. @Override
  31. public String getPrimaryName(String entityName) {
  32. String underlineName = NameUtils.getUnderlineName(entityName);
  33. //正如前面说到的,数据库列名统一以“_”开始,主键以表名加上“_id” 如user表主键即“_user_id”
  34. return PREFIX + underlineName + PRI_SUFFIX;
  35. }
  36. /**
  37. * 根据属性名获取列名
  38. *
  39. * @param fieldName
  40. * @return
  41. */
  42. @Override
  43. public String getColumnName(String fieldName) {
  44. String underlineName = NameUtils.getUnderlineName(fieldName);
  45. //数据库列名统一以“_”开始
  46. return PREFIX + underlineName;
  47. }
  48. }

0 0