jdbc玩出hibernate的感觉Word格式文档下载.docx

上传人:b****1 文档编号:873530 上传时间:2023-04-29 格式:DOCX 页数:17 大小:21.58KB
下载 相关 举报
jdbc玩出hibernate的感觉Word格式文档下载.docx_第1页
第1页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第2页
第2页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第3页
第3页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第4页
第4页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第5页
第5页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第6页
第6页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第7页
第7页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第8页
第8页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第9页
第9页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第10页
第10页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第11页
第11页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第12页
第12页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第13页
第13页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第14页
第14页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第15页
第15页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第16页
第16页 / 共17页
jdbc玩出hibernate的感觉Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

jdbc玩出hibernate的感觉Word格式文档下载.docx

《jdbc玩出hibernate的感觉Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《jdbc玩出hibernate的感觉Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。

jdbc玩出hibernate的感觉Word格式文档下载.docx

class="

identity"

/>

9. 

/id>

10. 

/class>

11. 

com.uniits.privilege.dao.entity.UserEntity"

12. 

userId"

13. 

14. 

15. 

16. 

com.uniits.privilege.dao.entity.FunctionEntity"

17. 

functionId"

18. 

19. 

20. 

21.<

/jdbc-mapping>

2.在项目启动时,加载所有的实体类并与配置文件jdbc.hbm.xml进行比对,判断jdbc.hbm.xml中定义的类、属性、类型在每一个实体类中是否存在 

1. 

private 

static 

final 

Log 

log 

LogFactory.getLog(ValidConfig.class);

2. 

3.private 

String 

ELEMENT_NODE_CLASS 

"

class"

;

5.private 

ELEMENT_NODE_ID 

id"

7.private 

ELEMENT_ATTR_NAME 

name"

9.private 

ELEMENT_ATTR_PRIMITIVE 

type"

11.private 

ELEMENT_NODE_GENERATOR 

generator"

13.private 

ELEMENT_ATTR_GENERATOR 

15.private 

ValidConfig(){ 

17.} 

19./** 

加在jdbc.hbm.xml配置文件并解析 

21. 

22. 

@throws 

AppException 

23. 

*/ 

24.public 

void 

loadXml(String 

path) 

throws 

25. 

// 

加在XML所在路径 

26. 

XMLFactory 

factory 

XMLFactory.getInstance(path);

27. 

获取根元素下的子节点 

28. 

Element 

rootElement 

factory.getRootElement();

29. 

获取节点集合 

30. 

List<

Element>

eles 

rootElement.elements(ELEMENT_NODE_CLASS);

31. 

try 

32. 

iteratorNodes(eles);

33. 

catch 

(Exception 

e) 

34. 

throw 

new 

AppException(e);

35. 

36.} 

37. 

38./** 

39. 

遍历所有节点 

40. 

@param 

elements 

41. 

Exception 

42. 

43.public 

iteratorNodes(List<

elements) 

Exception{ 

44. 

if(elements.isEmpty()){ 

45. 

return 

46. 

47. 

for 

(Element 

ele 

:

48. 

clazz 

ele.attributeValue(ELEMENT_ATTR_NAME);

49. 

eleId 

ele.element(ELEMENT_NODE_ID);

50. 

pk 

eleId.attributeValue(ELEMENT_ATTR_NAME);

51. 

type 

eleId.attributeValue(ELEMENT_ATTR_PRIMITIVE);

52. 

53. 

验证节点信息 

54. 

Object 

clazzInstance 

validInfo(clazz, 

pk, 

type);

55. 

56. 

遍历到element的generator节点并获取其指定的主键生成方式 

57. 

eleId.element(ELEMENT_NODE_GENERATOR);

58. 

generator_class 

generator.attributeValue(ELEMENT_ATTR_GENERATOR);

59. 

XMLElementEntity 

entity 

XMLElementEntity();

60. 

entity.setClazzName(clazzInstance);

61. 

entity.setGenerator(generator_class);

62. 

entity.setPkName(pk);

63. 

entity.setPrimitive(type);

64. 

以类名称做为KEY 

,保存对象信息 

65. 

Constants.entityInfo.put(clazzInstance, 

entity);

66. 

67. 

68. 

69. 

70.} 

71. 

72./** 

73. 

验证配置文件信息是否正确 

74. 

定义的类、属性及数据类型是否正确 

75. 

76. 

primaryKey 

77. 

78. 

@return 

79. 

80. 

81.public 

validInfo(String 

clazz, 

primaryKey, 

type) 

82. 

83. 

Class.forName(clazz).newInstance();

84. 

valid 

Fields 

85. 

if 

(!

validField(clazzInstance, 

type)) 

86. 

AppException("

[jdbc.hbm.xml] 

can'

cast 

fieldType 

with 

+"

in 

clazz);

87. 

88. 

split("

@"

) 

class@十进制哈希值,取类名 

89. 

clazzInstance.toString().split("

)[0];

90. 

(ClassNotFoundException 

91. 

find 

92. 

93.} 

94. 

95./** 

96. 

验证属性 

97. 

比对类中的元素所对应的数据类型是否与jdbc.hbm.xml配置文件中所对应的数据类型一致 

98. 

99. 

100. 

101. 

102. 

103. 

104.public 

boolean 

validField(Object 

primitivType) 

105. 

106. 

在当前指定类中查找相应属性 

【以下必须传一个已经实例化的对象,才能查询类中的所有 

属性】 

107. 

Field 

field 

clazz.getClass().getDeclaredField(primaryKey);

108. 

获取元素数据类型 

109. 

MethodUtil.changeWrapClass(field.getType());

110. 

(primitivType.equals(fieldType)) 

111. 

true;

112. 

113. 

(NoSuchFieldException 

114. 

115. 

116. 

false;

117.} 

3.封装baseDAO,进行统一操作,此处就摘取部分操作对象的代码 

当需要保存一个实体对象的时 

1.public 

int 

executeUpdate(String 

sql, 

entity) 

验证基本数据类型 

(MethodUtil.isWrapClass(entity.getClass())) 

executeUpdate(sql, 

Object[] 

});

result 

0;

pstm 

null;

this.conn 

ConnectionManager.getInstance().getConnection();

getPreparedStatementViaEntity(this.conn, 

pstm.executeUpdate();

e;

finally 

closeConnection();

result;

这里首先会判断参数entity是否是一个基本数据类型还是常用的数据类型,比如String,Date等 

当传递参数的时候可能只有一个参数,比如id,而这个id可能是基本数据类型,也可能是常用数据类型所以要在这做一个判断,如果不是常用数据类型则当实体类 

当entity是一个常用数据类型的时候,调用另一个方法 

params) 

conn 

getPreparedStatementViaParams(conn, 

params);

13.} 

这里就直接对sql语句中带有的?

进行了赋值操作 

1.pstm 

这一步获取PrepareStatement对象,通过名字可以看出此处要操作的对象是实体类,而不是普通的参数数组 

PreparedStatement 

getPreparedStatementViaEntity(Connection 

conn, 

(null 

conn) 

conn;

conn.prepareStatement(sql);

Object>

params 

ReflectUtil.reflectEntity(entity);

size 

params.size();

(int 

size;

i++) 

pstm.setObject(i 

1, 

params.get(i));

pstm;

代码中ReflectUtil.reflectEntity(entity)是反射一个实体类,主要是获取类中的属性,进行赋值操作 

把ReflectUtil的完整代码贴出来 

1./** 

运用反射机制获取实体类中所对应的属性信息 

[in] 

属性信息 

public 

reflectEntity(Object 

获得实体类的所有属性 

Field[] 

fields 

entity.getClass().getDeclaredFields();

获取当天类对应的配置文件实体信息 

getClassName(entity);

获取当前类主键 

clazz.getPkName();

获取主键生成方式 

clazz.getGenerator();

iteratorFields(fields, 

entity, 

generator);

24. 

params;

Method 

getMethod(Object 

parameterType, 

fieldName) 

NoSuchMethodException 

method 

methodName 

("

boolean"

.equals(parameterType.toString())) 

getMethodName(fieldName, 

Constants.BOOLEAN_METHOD);

else 

Constants.GET_METHOD);

36. 

entity.getClass().getMethod(methodName);

38. 

(SecurityException 

(NoSuchMethodException 

43. 

method;

/** 

根据类型获取方法名 

注释:

set为setXX()方法、get为getXX()方法、is则因为基本数据类型为boolean的时候,isXX()代替getXX() 

fileName 

名称 

获取方法类型(set 

or 

get 

is) 

getMethodName(final 

fileName, 

type){ 

fileName.substring(0, 

1).t

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2