已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开源框架spring详解-spring对JDBC的支持(一) 1、spring对DAO的支持 Java代码 1. publicclassAccountServiceImplimplementsAccountService 2. privateAccountDaoaccountDao; 3. /*set方法注入*/4. publicvoidsetAccountDao(AccountDaoaccountDao); 5. this.accountDao=accountDao; 6. 7. publicvoidinsert(Accountacc) 8. accountDao.insert(acc); 9. 10. public class AccountServiceImpl implements AccountServiceprivate AccountDao accountDao;/* set方法注入 */public void setAccountDao(AccountDao accountDao);this.accountDao = accountDao; public void insert(Account acc) accountDao.insert(acc); 从这个类的源代码可以看出,程序所依赖的是数据访问接口。因此,可以随时更换AccountDao的实现类。Spring的DAO框架正式基于这样的基本原理来将应用程序与底层数据存取技术解耦的。2、数据源的注入对数据库数据执行任何的存取操作,必须要有数据源,spring提供了javax.sql,DataSource注入,这样在需要更换数据源时只需要在spring配置文件中修改即可。而不需要修改程序代码。不同的应用系统可能使用不同的数据源。 2.1、不带连接池的数据源 Xml代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 2.2、集成第三方连接池技术的数据源 第一种方式所获取的数据源是不带连接池的,不适合正式的商业使用。正式的商业应用需要使用带连接池的数据源,比较常见的第三方连接池有:DBCP和C3P0。要想使用第三方的连接池技术,首先需要在项目类路径下添加它的类库。 commons-dbcp.jar 和 commons-pool.jar. Xml代码 1. 2. 5. 6. 7. 8. 9. 10. 11. 12. 15. 16. 17. 18. 19. 备注:若要使用分散配置设置数据库的连接的话,可以使用分散配置。在配置数据源的是代码前面配置一下的代码。Xml代码 1. 2. 3. 举例: 4. 5. 6. $jdbc.driverClass7. 8. 9. 10. 11. $jdbc.url12. 13. 14. 15. 16. $jdbc.user17. 18. 19. 20. 21. $jdbc.password22. 23. 24. 25. $c3p0.pool.max26. 27. 28. 29. 30. $c3p0.pool.min31. 32. 33. 34. 35. $c3p0.pool.init36. 举例:$jdbc.driverClass$jdbc.url$jdbc.user$jdbc.password$c3p0.pool.max$c3p0.pool.min$c3p0.pool.initProperties代码 1. 下面是perties 2. jdbc.driverClass=com.mysql.jdbc.Driver 3. jdbc.url=jdbc:mysql:/localhost:3306/spring 4. jdbc.user=root 5. jdbc.password=1236. c3p0.pool.max=107. c3p0.pool.min=38. c3p0.pool.init=5开源框架spring详解-spring对JDBC的支持(二)(修改了抱歉)文章分类:Java编程 开源框架spring详解-spring对JDBC的支持(二) 在使用JDBC类操作数据库时,要处理很多相同的繁琐的细节,如:获取数据库的连接、创建Statement、处理数据库异常、关闭数据库资源等。Spring针对这种情况提供了几个类用来简化JDBC API的使用。Java代码 1. packagecom.zxf.domain; 2. importjava.util.Date; 3. 4. /* 5. *authorz_xiaofei168 6. */7. publicclassAccount 8. privateLongid; 9. privateStringloginname; 10. privateStringpassword; 11. privateStringemail; 12. privateStringcellphone; 13. privateDateregistedTime; 14. 15. /以下省略所以的set和get方法 16. package com.zxf.domain;import java.util.Date;/* * author z_xiaofei168 */public class Account private Long id;private String loginname;private String password;private String email;private String cellphone;private Date registedTime;/以下省略所以的set 和get方法 3.1、使用JdbcTemplate类Java代码 1. packagecom.zxf.dao; 2. 3. importjava.util.List; 4. importcom.zxf.domain.Account; 5. 6. /*Account的DAO接口*/7. publicinterfaceAccountDao 8. /*新增账户*/9. voidcreate(Accountacc); 10. /*删除指定账户*/11. voiddelete(Accountacc); 12. /*更新账户*/13. voidupdate(Accountacc); 14. /*查询指定ID的账户*/15. AccountfindById(Longid); 16. /*查询所有账户*/17. ListfindAll(); 18. 19. 20. 21. 22. packagecom.zxf.dao; 23. 24. importjava.sql.ResultSet; 25. importjava.sql.SQLException; 26. importjava.sql.Timestamp; 27. importjava.util.Date; 28. importjava.util.List; 29. 30. importjavax.sql.DataSource; 31. 32. importorg.springframework.jdbc.core.JdbcTemplate; 33. importorg.springframework.jdbc.core.RowMapper; 34. 35. importcom.zxf.domain.Account; 36. 37. /* 38. *AccountDao实现类 39. *使用JdbcTemplate来实现 40. */41. publicclassAccountDaoJDBCImplimplementsAccountDao 42. privateJdbcTemplatejdbcTemplate; 43. 44. publicvoidsetDataSource(DataSourcedataSource) 45. jdbcTemplate=newJdbcTemplate(dataSource); 46. 47. 48. publicvoidcreate(Accountacc) 49. Stringsql=INSERTINTOaccount(loginname,password,email,50. +cellphone,registed_time)VALUES(?,?,?,?,NOW(); 51. 52. ObjectparamValues=acc.getLoginname(),acc.getPassword(), 53. acc.getEmail(),acc.getCellphone(); 54. 55. this.jdbcTemplate.update(sql,paramValues); 56. 57. 58. 59. publicvoiddelete(Accountacc) 60. Stringsql=DELETEFROMaccountWHEREid=?; 61. ObjectparamValues=acc.getId(); 62. 63. this.jdbcTemplate.update(sql,paramValues); 64. 65. 66. publicvoidupdate(Accountacc) 67. Stringsql=UPDATEaccountSETloginname=?,password=?,email=?,68. +cellphone=?WHEREid=?; 69. 70. ObjectparamValues=acc.getLoginname(),acc.getPassword(), 71. acc.getEmail(),acc.getCellphone(),acc.getId(); 72. 73. this.jdbcTemplate.update(sql,paramValues); 74. 75. 76. SuppressWarnings(unchecked) 77. publicListfindAll() 78. Stringsql=SELECT*FROMaccount; 79. returnthis.jdbcTemplate.query(sql,newAccountRowMapper(); 80. 81. 82. publicAccountfindById(Longid) 83. Stringsql=SELECT*FROMaccountWHEREid=?; 84. ObjectparamValues=id; 85. return(Account)jdbcTemplate. 86. queryForObject(sql,paramValues,newAccountRowMapper(); 87. 88. 89. /把结果集封装成Account对象的包装类 90. privatestaticfinalclassAccountRowMapperimplementsRowMapper 91. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException 92. Accountacc=newAccount(); 93. acc.setId(rs.getLong(id); 94. acc.setLoginname(rs.getString(loginname); 95. acc.setPassword(rs.getString(password); 96. acc.setEmail(rs.getString(email); 97. acc.setCellphone(rs.getString(cellphone); 98. 99. Timestamptemp=rs.getTimestamp(registed_time); 100. if(temp!=null) 101. acc.setRegistedTime(newDate(temp.getTime(); 102. 103. returnacc; 104. 105. 106. package com.zxf.dao;import java.util.List;import com.zxf.domain.Account;/* Account的DAO接口 */public interface AccountDao /* 新增账户 */void create(Account acc);/* 删除指定账户 */void delete(Account acc);/* 更新账户 */void update(Account acc);/* 查询指定ID的账户 */Account findById(Long id);/* 查询所有账户 */List findAll();package com.zxf.dao;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Timestamp;import java.util.Date;import java.util.List;import javax.sql.DataSource;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import com.zxf.domain.Account;/* * AccountDao实现类 * 使用JdbcTemplate来实现 */public class AccountDaoJDBCImpl implements AccountDao private JdbcTemplate jdbcTemplate;public void setDataSource(DataSource dataSource)jdbcTemplate = new JdbcTemplate(dataSource);public void create(Account acc) String sql = INSERT INTO account(loginname,password,email,+cellphone,registed_time) VALUES(?,?,?,?, NOW();Object paramValues = acc.getLoginname(), acc.getPassword(), acc.getEmail(),acc.getCellphone();this.jdbcTemplate.update(sql,paramValues);public void delete(Account acc) String sql = DELETE FROM account WHERE id=?;Object paramValues = acc.getId();this.jdbcTemplate.update(sql, paramValues);public void update(Account acc) String sql = UPDATE account SET loginname=?,password=?,email=?,+cellphone=? WHERE id=?;Object paramValues = acc.getLoginname(), acc.getPassword(), acc.getEmail(),acc.getCellphone(), acc.getId();this.jdbcTemplate.update(sql,paramValues);SuppressWarnings(unchecked)public List findAll() String sql = SELECT * FROM account;return this.jdbcTemplate.query(sql, new AccountRowMapper();public Account findById(Long id) String sql = SELECT * FROM account WHERE id=?;Object paramValues = id;return (Account)jdbcTemplate.queryForObject(sql, paramValues, new AccountRowMapper();/把结果集封装成Account对象的包装类private static final class AccountRowMapper implements RowMapper public Object mapRow(ResultSet rs, int rowNum) throws SQLException Account acc = new Account(); acc.setId(rs.getLong(id); acc.setLoginname(rs.getString(loginname); acc.setPassword(rs.getString(password); acc.setEmail(rs.getString(email); acc.setCellphone(rs.getString(cellphone); Timestamp temp = rs.getTimestamp(registed_time); if(temp != null) acc.setRegistedTime(new Date(temp.getTime(); return acc; 3.2、使用NamedParameterJdbcTemplate类Java代码 1. packagecom.zxf.dao; 2. 3. importjava.sql.ResultSet; 4. importjava.sql.SQLException; 5. importjava.sql.Timestamp; 6. importjava.util.Date; 7. importjava.util.HashMap; 8. importjava.util.List; 9. importjava.util.Map; 10. 11. importjavax.sql.DataSource; 12. 13. importorg.springframework.jdbc.core.RowMapper; 14. dparam.BeanPropertySqlParameterSource; 15. dparam.MapSqlParameterSource; 16. dparam.NamedParameterJdbcTemplate; 17. dparam.SqlParameterSource; 18. 19. importcom.zxf.domain.Account; 20. 21. /* 22. *使用NamedParameterJdbcTemplate来实现AccountDao接口 23. */24. publicclassAccountDaoNamedParameterJdbcTemplateImplimplementsAccountDao 25. /带命名参数功能的Jdbc模板类实例 26. privateNamedParameterJdbcTemplatejdbcTemplate; 27. 28. publicvoidsetDataSource(DataSourcedataSource) 29. jdbcTemplate=newNamedParameterJdbcTemplate(dataSource); 30. 31. 32. publicvoidcreate(Accountacc) 33. Stringsql=INSERTINTOaccount(loginname,password,email,34. +cellphone,registed_time)35. +VALUES(:loginname,:password,:email,:cellphone,NOW(); 36. /使用一个Bean对象的属性值作为命名参数的值 37. SqlParameterSourcenamedParameters= 38. newBeanPropertySqlParameterSource(acc); 39. 40. this.jdbcTemplate.update(sql,namedParameters); 41. 42. 43. 44. publicvoiddelete(Accountacc) 45. Stringsql=DELETEFROMaccountWHEREid=:id; 46. /使用指定的值来代替命名参数 47. SqlParameterSourcenamedParameters= 48. newMapSqlParameterSource(id,acc.getId(); 49. 50. this.jdbcTemplate.update(sql,namedParameters); 51. 52. 53. publicvoidupdate(Accountacc) 54. Stringsql=UPDATEaccountSETloginname=:loginname,55. +password=:password,email=:email,56. +cellphone=:cellphoneWHEREid=:id; 57. /使用Map对象中的键/值对来代替多个命名参数的实际值 58. MapnamedParameters=newHashMap(); 59. namedParameters.put(loginname,acc.getLoginname(); 60. namedParameters.put(password,acc.getPassword(); 61. namedParameters.put(email,acc.getEmail(); 62. namedParameters.put(cellphone,acc.getCellphone(); 63. namedParameters.put(id,acc.getId(); 64. 65. this.jdbcTemplate.update(sql,namedParameters); 66. 67. 68. SuppressWarnings(unchecked) 69. publicListfindAll() 70. Stringsql=SELECT*FROMaccount; 71. /通过getJdbcOperations()来访问只有在JdbcTemplate中拥有的功能 72. returnthis.jdbcTemplate 73. .getJdbcOperations() 74. .query(sql,newAccountRowMapper(); 75. 76. 77. publicAccountfindById(Longid) 78. Stringsql=SELECT*FROMaccountWHEREid=?; 79. /使用指定的值来代替命名参数 80. SqlParameterSourcenamedParameters= 81. newMapSqlParameterSource(id,id); 82. return(Account)jdbcTemplate 83. .query(sql,namedParameters,newAccountRowMapper(); 84. 85. 86. /把结果集封装成Account对象的包装类 87. privatestaticfinalclassAccountRowMapperimplementsRowMapper 88. publicObjectmapRow(ResultSetrs,introwNum)throwsSQLException 89. Accountacc=newAccount(); 90. acc.setId(rs.getLong(id); 91. acc.setLoginname(rs.getString(loginname); 92. acc.setPassword(rs.getString(password); 93. acc.setEmail(rs.getString(email); 94. acc.setCellphone(rs.getString(cellpho
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 财税行业介绍课件
- 高中数学教资面试经典例题试卷带答案
- 2026及未来5年可调式镀铬钢锯架项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年叠网多缸造纸机项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年发动机罩壳项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年双针速度表项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年双端圆锯机项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年双层四道全自动制袋机项目可行性研究报告(市场调查与数据分析)
- 2026及未来5年叉车转向动力缸项目可行性研究报告(市场调查与数据分析)
- 2026年业务知识竞赛-专利审查业务知识竞赛历年参考题库含答案解析
- 2026人教版五年级数学上册第五单元第1课《用字母表示数量关系》课件
- 2026年滴滴出行司机管理岗竞聘模拟题
- 2026版高三语文自主学习 高中教材文言文一遍过(选择性必修上册)讲义课件
- 新能源汽车电力电子技术 课件 项目四 新能源汽车常用传感器应用技术
- 桥梁人行道钢格栅铺设施工方案
- 小学50米短跑教学方案及训练计划
- 华为集团干部管理办法
- 贵州省第二届职业技能大赛-劳动关系协调师赛项备考题库(含答案)
- 计算机一级wps考试模拟试题及答案
- 2025年中国建设银行小微企业借款合同范本
- 中医康复演讲稿范文
评论
0/150
提交评论