




已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Spring中jdbcTemplate的用法实例(一)博客分类: spring一、首先配置JdbcTemplate;要使用Jdbctemplate 对象来完成jdbc 操作。通常情况下,有三种种方式得到JdbcTemplate 对象。 第一种方式:我们可以在自己定义的DAO 实现类中注入一个DataSource 引用来完 成JdbcTemplate 的实例化。也就是它是从外部“注入” DataSource 到DAO 中,然后 自己实例化JdbcTemplate,然后将DataSource 设置到JdbcTemplate 对象中。 第二种方式: 在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。第三种方式: Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 类 , 这 个 类 中 定 义 了 JdbcTemplate 属性,也定义了DataSource 属性,当设置DataSource 属性的时候,会创 建jdbcTemplate 的实例,所以我们自己编写的DAO 只需要继承JdbcDaoSupport 类, 然后注入DataSource 即可。提倡采用第三种方法。虽然下面的用法中采用了前两种方法 配置方法有3种: 1、Java代码1. publicclassUserServiceImplimplementsUserService2. 3. privateJdbcTemplatejdbcTemplate;4. 5. publicJdbcTemplategetJdbcTemplate()6. returnjdbcTemplate;7. 8. 9. /注入方法110. publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate)11. this.jdbcTemplate=jdbcTemplate;12. 13. 14. /其它方法这里省略15. spring配置文件为:Xml代码1. 2. 3. 4. 5. 6. 方法2、Java代码1. publicclassUserServiceImplimplementsUserService2. 3. privateJdbcTemplatejdbcTemplate;4. 5. /注入方法26. publicvoidsetDataSource(DataSourcedataSource)7. this.jdbcTemplate=newJdbcTemplate(dataSource);8. 9. 10. /其它方法省略11. spring配置文件为:Xml代码1. 2. 3. 方法3:继承JdbcDaoSupport,其内部有个JdbcTemplate ,需要注入DataSource 属性来实例化。Java代码1. publicclassUserDaoImplextendsJdbcDaoSupportimplementsUserDao2. 3. Override4. publicvoidsave(Useruser)5. Stringsql=null;6. this.getJdbcTemplate().update(sql);7. 8. /其它方法省略9. spring配置文件:Xml代码1. 2. 3. 二、常用方法使用【注意:】jdbcTemplate 中的sql均是用“?”做占位符的domain User:Java代码1. publicclassUser2. privateintid;3. privateStringusername;4. privateStringpassword;5. privateStringsex;6. 7. /setter和getter方法省略8. UserServiceImpl :如果采用第三种方式,则下面的用法中将方法中的 jdbcTemplate 换成 this.getJdbcTemplate()即可。Java代码1. /*2. *创建表3. */4. publicvoidcreate(StringtableName)/tb_test15. jdbcTemplate.execute(createtable+tableName+(idinteger,user_namevarchar2(40),passwordvarchar2(40);6. 7. 8. /jdbcTemplate.update适合于insert、update和delete操作;9. /*10. *第一个参数为执行sql11. *第二个参数为参数数据12. */13. publicvoidsave3(Useruser)14. Assert.isNull(user,userisnotnull);15. jdbcTemplate.update(insertintotb_test1(name,password)values(?,?),16. newObjectuser.getUsername(),user.getPassword();17. 18. 19. /*20. *第一个参数为执行sql21. *第二个参数为参数数据22. *第三个参数为参数类型23. */24. Override25. publicvoidsave(Useruser)26. Assert.isNull(user,userisnotnull);27. jdbcTemplate.update(28. insertintotb_test1(name,password)values(?,?),29. newObjectuser.getUsername(),user.getPassword(),30. newintjava.sql.Types.VARCHAR,java.sql.Types.VARCHAR31. );32. 33. 34. /避免sql注入35. publicvoidsave2(finalUseruser)36. Assert.isNull(user,userisnotnull);37. 38. jdbcTemplate.update(insertintotb_test1(name,password)values(?,?),39. newPreparedStatementSetter()40. 41. Override42. publicvoidsetValues(PreparedStatementps)throwsSQLException43. ps.setString(1,user.getUsername();44. ps.setString(2,user.getPassword();45. 46. );47. 48. 49. 50. publicvoidsave4(Useruser)51. Assert.isNull(user,userisnotnull);52. jdbcTemplate.update(insertintotb_test1(name,password)values(?,?),53. newObjectuser.getUsername(),user.getPassword();54. 55. 56. /返回插入的主键57. publicListsave5(finalUseruser)58. 59. KeyHolderkeyHolder=newGeneratedKeyHolder();60. 61. jdbcTemplate.update(newPreparedStatementCreator()62. 63. Override64. publicPreparedStatementcreatePreparedStatement(Connectionconnection)throwsSQLException65. PreparedStatementps=connection.prepareStatement(insertintotb_test1(name,password)values(?,?),newStringid);66. ps.setString(1,user.getUsername();67. ps.setString(2,user.getPassword();68. returnps;69. 70. ,71. keyHolder);72. 73. returnkeyHolder.getKeyList();74. 75. 76. Override77. publicvoidupdate(finalUseruser)78. jdbcTemplate.update(79. updatetb_test1setname=?,password=?whereid=?,80. newPreparedStatementSetter()81. Override82. publicvoidsetValues(PreparedStatementps)throwsSQLException83. ps.setString(1,user.getUsername();84. ps.setString(2,user.getPassword();85. ps.setInt(3,user.getId();86. 87. 88. );89. 90. 91. Override92. publicvoiddelete(Useruser)93. Assert.isNull(user,userisnotnull);94. jdbcTemplate.update(95. deletefromtb_test1whereid=?,96. newObjectuser.getId(),97. newintjava.sql.Types.INTEGER);98. 99. 100. Deprecated/因为没有查询条件,所以用处不大101. publicintqueryForInt1()102. returnjdbcTemplate.queryForInt(selectcount(0)fromtb_test1);103. 104. 105. publicintqueryForInt2(Useruser)106. returnjdbcTemplate.queryForInt(selectcount(0)fromtb_test1whereusername=?,107. newObjectuser.getUsername();108. 109. 110. /最全的参数3个111. publicintqueryForInt3(Useruser)112. returnjdbcTemplate.queryForInt(selectcount(0)fromtb_test1whereusername=?,113. newObjectuser.getUsername(),114. newintjava.sql.Types.VARCHAR);115. 116. 117. /可以返回是一个基本类型的值118. Deprecated/因为没有查询条件,所以用处不大119. publicStringqueryForObject1(Useruser)120. return(String)jdbcTemplate.queryForObject(selectusernamefromtb_test1whereid=100,121. String.class);122. 123. 124. /可以返回值是一个对象125. Deprecated/因为没有查询条件,所以用处不大126. publicUserqueryForObject2(Useruser)127. return(User)jdbcTemplate.queryForObject(select*fromtb_test1whereid=100,User.class);/class是结果数据的java类型128. 129. 130. Deprecated/因为没有查询条件,所以用处不大131. publicUserqueryForObject3(Useruser)132. return(User)jdbcTemplate.queryForObject(select*fromtb_test1whereid=100,133. newRowMapper()134. 135. Override136. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException137. Useruser=newUser();138. user.setId(rs.getInt(id);139. user.setUsername(rs.getString(username);140. user.setPassword(rs.getString(password);141. returnuser;142. 143. 144. );145. 146. 147. publicUserqueryForObject4(Useruser)148. return(User)jdbcTemplate.queryForObject(select*fromtb_test1whereid=?,149. newObjectuser.getId(),150. User.class);/class是结果数据的java类型实际上这里是做反射,将查询的结果和User进行对应复制151. 152. 153. publicUserqueryForObject5(Useruser)154. return(User)jdbcTemplate.queryForObject(155. select*fromtb_test1whereid=?,156. newObjectuser.getId(),157. newRowMapper()158. 159. Override160. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException161. Useruser=newUser();162. user.setId(rs.getInt(id);163. user.setUsername(rs.getString(username);164. user.setPassword(rs.getString(password);165. returnuser;166. 167. 168. );/class是结果数据的java类型169. 170. 171. Override172. publicUserqueryForObject(Useruser)173. /方法有返回值174. return(User)jdbcTemplate.queryForObject(select*fromtb_test1whereid=?,175. newObjectuser.getId(),176. newintjava.sql.Types.INTEGER,177. newRowMapper()178. 179. Override180. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException181. Useruser=newUser();182. user.setId(rs.getInt(id);183. user.setUsername(rs.getString(username);184. user.setPassword(rs.getString(password);185. returnuser;186. 187. 188. );189. 190. 191. SuppressWarnings(unchecked)192. publicListqueryForList1(Useruser)193. return(List)jdbcTemplate.queryForList(select*fromtb_test1whereusername=?,194. newObjectuser.getUsername(),195. User.class);196. 197. 198. SuppressWarnings(unchecked)199. publicListqueryForList2(Useruser)200. return(List)jdbcTemplate.queryForList(selectusernamefromtb_test1wheresex=?,201. newObjectuser.getSex(),202. String.class);203. 204. 205. SuppressWarnings(unchecked)206. /最全的参数查询207. publicListqueryForList3(Useruser)208. return(List)jdbcTemplate.queryForList(select*fromtb_test1whereusername=?,209. newObjectuser.getUsername(),210. newintjava.sql.Types.VARCHAR,211. User.class);212. 213. 214. /通过RowCallbackHandler对Select语句得到的每行记录进行解析,并为其创建一个User数据对象。实现了手动的OR映射。215. publicUserqueryUserById4(Stringid)216. finalUseruser=newUser();217. 218. /该方法返回值为void219. this.jdbcTemplate.query(select*fromtb_test1whereid=?,220. newObjectid,221. newRowCallbackHandler()222. 223. Override224. publicvoidprocessRow(ResultSetrs)throwsSQLException225. Useruser=newUser();226. user.setId(rs.getInt(id);227. user.setUsername(rs.getString(username);228. user.setPassword(rs.getString(password);229. 230. );231. 232. returnuser;233. 234. 235. SuppressWarnings(unchecked)236. Override237. publicListlist(Useruser)238. returnjdbcTemplate.query(select*fromtb_test1whereusernamelike%?%,239. newObjectuser.getUsername(),240. newintjava.sql.Types.VARCHAR,241. newRowMapper()242. 243. Override244. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException245. Useruser=newUser();246. user.setId(rs.getInt(id);247. user.setUsername(rs.getString(username);248. user.setPassword(rs.getString(password);249. returnuser;250. 251. );252. 253. 254. /批量操作适合于增、删、改操作255. publicintbatchUpdate(finalListusers)256. 257. intupdateCounts=jdbcTemplate.batchUpdate(258. updatetb_test1setusername=?,password=?whereid=?,259. newBatchPreparedStatementSetter()260. 261. Override262. publicvoidsetValues(PreparedStatementps,inti)throwsSQLException263. ps.setString(1,(User)users.get(i).getUsername();264. ps.setString(2,(User)users.get(i).getPassword();265. ps.setLong(3,(User)users.get(i).getId();266. 267. 268. Override269. publicintgetBatchSize()270. returnusers.size();271. 272. 273. );274. 275. returnupdateCounts;276. 277. 278. /调用存储过程279. publicvoidcallProcedure(intid)280. this.jdbcTemplate.update(callSUPPORT.REFRESH_USERS_SUMMARY(?),newObjectLong.valueOf(id);281. 其中,batchUpdate适合于批量增、删、改操作; update():使用于增、删、改操作; execute():执行一个独立的sql语句,包括ddl语句;queryForInt :查询出一个整数值queryForInt, queryForMap, queryForObject返回0行会抛异常的Spring 中的 RowMapper2012年11月17日 综合
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三叉神经影像学表现课件
- 多行业国有企业面试题库精 编
- AI求职之路指南:蔻驰AI面试面试题及答案精 编
- 奶茶店实习报告
- 初中书面表达主题分类训练10篇-兴趣爱好
- 期货从业资格之期货投资分析试卷含答案详解(黄金题型)
- 小儿腹泻疾病查房课件
- 大二暑假社会实践报告
- 小儿气道梗阻课件
- 农村光伏项目合同协议书
- 2025-2030中国土地估价行业标准体系完善与国际化发展研究
- 2025级新生军训开训仪式动员大会
- 2025年医院处方审核规范考核试题(附答案)
- 2025年天津市辅警招聘考试考试试题库附答案详解(黄金题型)
- 2025版旧房翻新基础装修合同范本
- 铅衣消毒管理办法
- 2025新村级后备干部考试题库(附含答案)
- 寄宿学校班主任培训课件
- 秋季肌肤护理课件
- 2024年成都新都投资集团有限公司招聘笔试真题
- 工厂规章制度员工守则.doc
评论
0/150
提交评论