您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > Spring中jdbcTemplate和RowMapper的用法
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.publicclassUserServiceImplimplementsUserService{2.3.privateJdbcTemplatejdbcTemplate;4.5.publicJdbcTemplategetJdbcTemplate(){6.returnjdbcTemplate;7.}8.9.//注入方法110.publicvoidsetJdbcTemplate(JdbcTemplatejdbcTemplate){11.this.jdbcTemplate=jdbcTemplate;12.}13.14.//其它方法这里省略……15.}spring配置文件为:Xml代码1.beanid=jdbcTemplateclass=org.springframework.jdbc.core.JdbcTemplate2.propertyname=dataSourceref=dataSource3./bean4.beanid=userServiceclass=com.hxzy.account.jdbcTemplate.UserServiceImpl5.propertyname=jdbcTemplateref=jdbcTemplate/6./bean方法2、Java代码1.publicclassUserServiceImplimplementsUserService{2.3.privateJdbcTemplatejdbcTemplate;4.5.//注入方法26.publicvoidsetDataSource(DataSourcedataSource){7.this.jdbcTemplate=newJdbcTemplate(dataSource);8.}9.10.//其它方法省略……11.}spring配置文件为:Xml代码1.beanid=userServiceclass=com.hxzy.account.jdbcTemplate.UserServiceImpl2.propertyname=dataSourceref=dataSource/3./bean方法3:继承JdbcDaoSupport,其内部有个JdbcTemplate,需要注入DataSource属性来实例化。Java代码1.publicclassUserDaoImplextendsJdbcDaoSupportimplementsUserDao{2.3.@Override4.publicvoidsave(Useruser){5.Stringsql=null;6.this.getJdbcTemplate().update(sql);7.}8.//其它方法省略……9.}spring配置文件:Xml代码1.beanid=userDaoclass=com.hxzy.account.jdbcTemplate.UserDaoImpl2.propertyname=dataSourceref=dataSource/3./bean二、常用方法使用【注意:】jdbcTemplate中的sql均是用“?”做占位符的domainUser:Java代码1.publicclassUser{2.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.newObject[]{user.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.newObject[]{user.getUsername(),user.getPassword()},30.newint[]{java.sql.Types.VARCHAR,java.sql.Types.VARCHAR}31.);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)throwsSQLException{43.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.newObject[]{user.getUsername(),user.getPassword()});54.}55.56.//返回插入的主键57.publicListsave5(finalUseruser){58.59.KeyHolderkeyHolder=newGeneratedKeyHolder();60.61.jdbcTemplate.update(newPreparedStatementCreator(){62.63.@Override64.publicPreparedStatementcreatePreparedStatement(Connectionconnection)throwsSQLException{65.PreparedStatementps=connection.prepareStatement(insertintotb_test1(name,password)values(?,?),newString[]{id});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)throwsSQLException{83.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.newObject[]{user.getId()},97.newint[]{java.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.newObject[]{user.getUsername()});108.}109.110.//最全的参数3个111.publicintqueryForInt3(Useruser){112.returnjdbcTemplate.queryForInt(selectcount(0)fromtb_test1whereusername=?,113.newObject[]{user.getUsername()},114.newint[]{
本文标题:Spring中jdbcTemplate和RowMapper的用法
链接地址:https://www.777doc.com/doc-6875960 .html