Spring的连接数据库以及JDBC模板(实例讲解)
前言
今天介绍的是关于spring的数据库连接以及jdbc模板的相关api方法,虽然在学习了hibernate之后,会知道实现数据库连接一般都是使用hibernate等持久化框架来实现的。但是,很多时候一些涉及到事务的东西使用这些框架并不能够实现,所以我们还需要结合spring来实现相关的需要。
一、创建工程、导包
要想使用spring的jdbc模板前,还需要导入相关的jar包:
二、进行相关的bean的创建以及工具类的编写
2.1在数据库中创建了两张表,使用spring的jdbctemplate中的api方法对这两张表进行操作
create table `t_dept` ( `deptid` int(11) not null, `deptname` varchar(20) character set utf8 default null, `remark` varchar(30) character set utf8 default null, primary key (`deptid`) ) engine=innodb default charset=gbk collate=gbk_bin;
create table `user` ( `user_id` int(11) not null, `user_name` varchar(11) default null, `user_password` varchar(11) default null, `user_address` varchar(25) default null, primary key (`user_id`) ) engine=innodb default charset=utf8;
2.2创建实体bean
package com.bean; /** * 创建t_dept表对应的表 * @author 夜孤寒 * @version 1.1.1 * */ public class deptbean { private int deptid; private string deptname; private string remark; public deptbean() { super(); } public deptbean(int deptid, string deptname, string remark) { super(); this.deptid = deptid; this.deptname = deptname; this.remark = remark; } public int getdeptid() { return deptid; } public void setdeptid(int deptid) { this.deptid = deptid; } public string getdeptname() { return deptname; } public void setdeptname(string deptname) { this.deptname = deptname; } public string getremark() { return remark; } public void setremark(string remark) { this.remark = remark; } }
2.3创建spring的工具类——springutil.java
package com.util; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; /** * 读取配置文件的工具类,实现了类似工厂模式的方式 * * @author 夜孤寒 * @version 1.1.1 */ public class springutil { // 定义属性 private static applicationcontext context; // 读取配置文件 static { context = new classpathxmlapplicationcontext("spring.xml"); } // 定义一个方法,判断bean是否为空,如果不为空的,获取这个bean public static object getbean(string beanname) { // 定义一个空对象 object obj = null; // 如果beanname不为空的话,那么根据这个beanname获取到bean对象,赋值给obj并返回 if (beanname != null && !beanname.equals("")) { obj = context.getbean(beanname); } return obj; } }
2.4进行配置文件的相关配置——spring.xml文件的配置
因为要介绍的api方法可能比较多,所以一次性将写过的xml全部粘贴了,读者可以根据对应的配置,去对应到相应的类中:
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 方式一: 配置使用ioc:直接引用 --> <!-- 首先需要引入一个驱动,然後到這驱动类下面,去查看他的源代码,一下是mysql需要注入的对象 --> <bean name="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/spring_jdbc_test"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean> <!-- 使用di注入的构造方法注入的方式来注入,并且查询我们的数据库中的数据。 注意这里我们还需要一我们之前的datasource作为引用 --> <bean name="testmain_2" class="com.jdbc.testmain_2"> <property name="datasource" ref="datasource"></property> </bean> <!-- 使用我们的模板来获取我们的数据库中的数据 --> <bean name="testmain_3" class="com.jdbc.testmain_3"> <!-- 首先我们还是需要引入我们的数据库资源,也就是我们之前已经配置过的datasource --> <property name="datasource" ref="datasource"></property> </bean> <!-- 方式四 --> <!-- 配置我们模板,然后在类就只要将这个模板用构造方法的方式注入就可以了 --> <bean name="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource" ref="datasource"></property> </bean> <!-- 配置我们的testmain_4,然后引用我们上面配置的模板 --> <bean name="testmain_4" class="com.jdbc.testmain_4"> <property name="jdbctemplate" ref="jdbctemplate"></property> </bean> <!-- 方式五: 直接继承jdbcdaosupport这个父类,然后用里面的方法获取到模板, 从而获取到数据。 备注:这个是最完美的获取数据的方式,以后一般都是使用这种方式!!! --> <bean name="testmain_5" class="com.jdbc.testmain_5"> <property name="datasource" ref="datasource"></property> </bean> <!-- 使用spring配置的方式操作我们的ddl语句 --> <bean name="testmain_6" class="com.jdbc.testmain_6"> <property name="datasource" ref="datasource"></property> </bean> <!-- 使用spring配置的方式操作我们的dml语句 --> <bean name="testmain_7" class="com.jdbc.testmain_7"> <property name="datasource" ref="datasource"></property> </bean> <!-- 使用jdbctemplate模板中的命名参数来操作我们的dml语句 --> <bean name="testmain_8" class="com.jdbc.testmain_8"> <property name="datasource" ref="datasource"></property> </bean> <!-- 使用jdbctemplate模板对于查询语句的封装 --> <bean name="testmain_9" class="com.jdbc.testmain_9"> <property name="datasource" ref="datasource"></property> </bean> </beans>
2.5介绍spring对于jdbc的模板的支持
(1)数据库的连接
对应xml中的配置为:
<!-- 方式一: 配置使用ioc:直接引用 --> <!-- 首先需要引入一个驱动,然後到這驱动类下面,去查看他的源代码,一下是mysql需要注入的对象 --> <bean name="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/spring_jdbc_test"></property> <property name="username" value="root"></property> <property name="password" value="root"></property> </bean>
对应的测试类:
package com.jdbc; import java.sql.connection; import java.sql.sqlexception; import javax.sql.datasource; import com.util.springutil; /** * 连接数据库的测试类 * @author 夜孤寒 * @version 1.1.1 * */ public class testmain_1 { public static void main(string[] args) { /* * 本来需要用applicationcontext获取到我们的bean对象, * 这里使用工厂类的方法将之独立出来,具体使用见springutil.java */ datasource datasource=(datasource)springutil.getbean("datasource"); connection conn=null; try{ conn=datasource.getconnection(); }catch(sqlexception e){ e.printstacktrace(); } system.out.println(conn);//测试是否能够输出连接 } }
测试结果:
由此可见测试成功可以获取到相应的数据库连接。
(2)测试从创建的user表中查询出相应的数据
对应xml配置为:
<!-- 使用di注入的构造方法注入的方式来注入,并且查询我们的数据库中的数据。 注意这里我们还需要一我们之前的datasource作为引用 --> <bean name="testmain_2" class="com.jdbc.testmain_2"> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类为:
package com.jdbc; import java.sql.connection; import java.sql.resultset; import javax.sql.datasource; import com.mysql.jdbc.statement; import com.util.springutil; /** * 从创建的user表中查询相关的数据 * * @author 夜孤寒 * @version 1.1.1 */ public class testmain_2 { // 使用构造方法注入 public datasource datasource; public void setdatasource(datasource datasource) { this.datasource = datasource; } /** * 从user表中获取所有数据 */ public void list() { /* * 在我们的main方法中获取到我们的datasource, 然后就能够获取连接,并且获取到数据库中的数据。 */ connection conn = null; statement stmt = null; resultset rs = null; string sql = "select * from user"; try { conn = datasource.getconnection(); stmt = (statement) conn.createstatement(); rs = stmt.executequery(sql); while (rs.next()) { system.out.println(rs.getint("user_id") + "\t" + rs.getstring("user_name") + "\t" + rs.getstring("user_password") + "\t" + rs.getstring("user_address")); } } catch (exception e) { e.printstacktrace(); } finally { /* * 需要自己关闭资源 */ } } public static void main(string[] args) { // 获取到我们bean对象 testmain_2 testmain_2 = (testmain_2) springutil.getbean("testmain_2"); // 调用我们的list方法 testmain_2.list(); } }
测试结果:
备注:本测试类,使用的是常用的纯粹的jdbc获取数据的方式。
(3)使用jdbctemplate这个类来获取到后端的数据
对应的xml文件的配置为:
<!-- 使用我们的模板来获取我们的数据库中的数据 --> <bean name="testmain_3" class="com.jdbc.testmain_3"> <!-- 首先我们还是需要引入我们的数据库资源,也就是我们之前已经配置过的datasource --> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类:
package com.jdbc; import java.util.list; import java.util.map; import javax.sql.datasource; import org.springframework.jdbc.core.jdbctemplate; import com.util.springutil; /** * 使用jdbctemplate这个类来获取后台数据 * @author 夜孤寒 * */ public class testmain_3 { // 使用构造方法注入 public datasource datasource; public void setdatasource(datasource datasource) { this.datasource = datasource; } public void list() { /* * 使用我们jdbctemplate模板来获取我们的数据 */ jdbctemplate jdbctemplate=new jdbctemplate(this.datasource); string sql="select * from user"; list<map<string, object>>userlist=jdbctemplate.queryforlist(sql); for(map<string, object>rowmap:userlist){ system.out.println(rowmap); } } public static void main(string[] args) { //获取到我们bean对象 testmain_3 testmain_3=(testmain_3)springutil.getbean("testmain_3"); //调用我们的list方法 testmain_3.list(); } }
测试的结果:
这种方式的话每次我们都要创建一个jdbctemplate实例,这样子比较复杂,所以考虑能不能将这个类让spring自己创建,然后在bean配置文件中引用数据源来达到目的。这就是下面要介绍的第四种方式。
(4)在配置文件中配置我们的模板类,让spring生成需要的bean
对应的xml配置文件为:
<!-- 方式四 --> <!-- 配置我们模板,然后在类就只要将这个模板用构造方法的方式注入就可以了 --> <bean name="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource" ref="datasource"></property> </bean> <!-- 配置我们的testmain_4,然后引用我们上面配置的模板 --> <bean name="testmain_4" class="com.jdbc.testmain_4"> <property name="jdbctemplate" ref="jdbctemplate"></property> </bean>
对应的测试类为:
package com.jdbc; import java.util.list; import java.util.map; import org.springframework.jdbc.core.jdbctemplate; import com.util.springutil; /** * 在配置文件中配置模板,让spring去创建模板类 * * @author 夜孤寒 * @version 1.1.1 */ public class testmain_4 { // 使用构造方法的方式注入template public jdbctemplate jdbctemplate; public void setjdbctemplate(jdbctemplate jdbctemplate) { this.jdbctemplate = jdbctemplate; } public void list() { /* * 使用我们ioc注入模板,然后引用这个使用ioc注入的模板, 最后取出我们的数据 */ string sql = "select user_name from user"; list<map<string, object>> userlist = this.jdbctemplate.queryforlist(sql); for (map<string, object> rowmap : userlist) { system.out.println(rowmap); } } public static void main(string[] args) { // 获取到我们bean对象 testmain_4 testmain_4 = (testmain_4) springutil.getbean("testmain_4"); // 调用我们的list方法 testmain_4.list(); } }
测试结果:
这种方式仍旧需要在xml中配置,而在spring中还有一种更加方便的方式就是直接继承jdbcdaosupport这个类,这种方式是最简单的,也是最常用的方式。下面笔者就简单介绍一下这种方式的使用。
(5)继承jdbcdaosupport类来获取数据库中的数据
对应的xml文件中的配置为:
<!-- 方式五: 直接继承jdbcdaosupport这个父类,然后用里面的方法获取到模板, 从而获取到数据。 备注:这个是最完美的获取数据的方式,以后一般都是使用这种方式!!! --> <bean name="testmain_5" class="com.jdbc.testmain_5"> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类为:
package com.jdbc; import java.util.list; import java.util.map; import org.springframework.jdbc.core.support.jdbcdaosupport; import com.util.springutil; /** * 继承jdbcdaosupport来获取模板,再通过模板来获取数据 * @author 夜孤寒 * @version 1.1.1 * */ public class testmain_5 extends jdbcdaosupport { /* * 不使用di注入的方式,直接继承一个上述的父类, 观察上述的父类,发现在这个父类里面已经实现了类似注入jdbctemplate模板。 */ public void list() { string sql = "select * from user"; list<map<string, object>> userlist = this.getjdbctemplate().queryforlist(sql); for (map<string, object> rowmap : userlist) { system.out.println(rowmap); } } public static void main(string[] args) { // 获取到我们bean对象 testmain_5 testmain_5 = (testmain_5) springutil.getbean("testmain_5"); // 调用我们的list方法 testmain_5.list(); } }
测试结果为:
(6)使用spring注入的方式来操作ddl语句
对应xml文件中的配置为:
<!-- 使用spring配置的方式操作我们的ddl语句 --> <bean name="testmain_6" class="com.jdbc.testmain_6"> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类为:
package com.jdbc; import org.springframework.jdbc.core.support.jdbcdaosupport; import com.util.springutil; /** * 使用spring注入的方式进行ddl操作 * * @author 夜孤寒 * @version 1.1.1 * */ public class testmain_6 extends jdbcdaosupport { /* * 创建表 */ public void create() { stringbuffer createsql = new stringbuffer(); createsql.append("create table t_temp_xx(id int,testname varchar(30))"); this.getjdbctemplate().execute(createsql.tostring()); } /* * 修改表,这里面可以添加或者删除某一个属性列 */ public void alter() { stringbuffer altersql = new stringbuffer(); altersql.append("alter table t_temp_xx add testpassword varchar(30)"); this.getjdbctemplate().execute(altersql.tostring()); } /* * 删除一张表 */ public void drop() { stringbuffer dropsql = new stringbuffer(); dropsql.append("drop table t_temp_xx"); this.getjdbctemplate().execute(dropsql.tostring()); } /* * 测试方法 */ public static void main(string[] args) { // 获取到我们bean对象 testmain_6 testmain_6 = (testmain_6) springutil.getbean("testmain_6"); // 调用我们的方法,一次调用一个方法,打开数据库观察数据库是不是已经变化了 // testmain_6.create(); // testmain_6.alter(); testmain_6.drop(); } }
经过测试可以进行ddl操作。
(7)使用spring注入的方式进行dml操作
对应xml文件中的配置:
<!-- 使用spring配置的方式操作我们的dml语句 --> <bean name="testmain_7" class="com.jdbc.testmain_7"> <property name="datasource" ref="datasource"></property> </bean>
对应测试类:
package com.jdbc; import java.sql.preparedstatement; import java.sql.sqlexception; import org.springframework.jdbc.core.preparedstatementsetter; import org.springframework.jdbc.core.support.jdbcdaosupport; import com.util.springutil; /** * 使用spring配置的方式操作我们的dml语句 * * @author 夜孤寒 * @version 1.1.1 */ public class testmain_7 extends jdbcdaosupport { /* * statement的写法 */ public void insert() { int deptid = 1; string deptname = "zhangsan"; string remark = "zhangsanzhenshuai"; stringbuffer insertsql = new stringbuffer(); insertsql.append("insert into t_dept("); insertsql.append("deptid,deptname"); insertsql.append(",remark"); insertsql.append(") values("); insertsql.append("" + deptid + ","); insertsql.append("'" + deptname + "',"); insertsql.append("'" + remark + "'"); insertsql.append(""); insertsql.append(")"); int rowcount = this.getjdbctemplate().update(insertsql.tostring()); system.out.println("rowcount影响的行数= " + rowcount); } /* * preparestatement的写法 */ public void update() { stringbuffer updatesql = new stringbuffer(); updatesql.append("update t_dept set "); updatesql.append("deptname = ?,"); updatesql.append("remark = ?"); updatesql.append(" where deptid=?"); int rowcount = this.getjdbctemplate().update(updatesql.tostring(), new preparedstatementsetter() { @override public void setvalues(preparedstatement ps) throws sqlexception { ps.setstring(1, "lisi"); ps.setstring(2, "lisizhenshuai"); ps.setint(3, 1); } }); system.out.println("rowcount影响的行数=" + rowcount); } /* * preparestatement的写法 */ public void delete() { stringbuffer deletesql = new stringbuffer(); deletesql.append("delete from t_dept"); deletesql.append(" where deptid=?"); /* * 关于对象数组的使用:对象数组的第一个元素对应的是sql语句中的第一个参数问号 */ object[] obj = { 1 }; int rowcount = this.getjdbctemplate().update(deletesql.tostring(), obj); system.out.println("rowcount影响的行数=" + rowcount); } public static void main(string[] args) { // 获取到bean对象 testmain_7 testmain_7 = (testmain_7) springutil.getbean("testmain_7"); // 测试方法 // testmain_7.insert(); // testmain_7.update(); testmain_7.delete(); } }
经测试,可以实现dml操作中的增删改查。
(8)使用jdbctemplate模板中的命名参数来操作我们的dml语句
对应xml中的配置为:
<!-- 使用jdbctemplate模板中的命名参数来操作我们的dml语句 --> <bean name="testmain_8" class="com.jdbc.testmain_8"> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类:
package com.jdbc; import java.util.hashmap; import java.util.map; import org.springframework.jdbc.core.namedparam.beanpropertysqlparametersource; import org.springframework.jdbc.core.namedparam.namedparameterjdbcdaosupport; import org.springframework.jdbc.core.namedparam.namedparameterjdbctemplate; import com.bean.deptbean; import com.util.springutil; /** * 使用jdbctemplate模板中的命名参数来操作我们的dml语句 * * @author 夜孤寒 * @version 1.1.1 */ public class testmain_8 extends namedparameterjdbcdaosupport { /* * statement的写法 */ public void insert(boolean flag_1, boolean flag_2) { int deptid = 1; string deptname = "zhangsan"; string remark = "zhangsanzhenshuai"; stringbuffer insertsql = new stringbuffer(); insertsql.append("insert into t_dept(deptid"); if (flag_1) { insertsql.append(",deptname"); } if (flag_2 == true) { insertsql.append(",remark"); } insertsql.append(") values("); insertsql.append(":deptid"); if (flag_1 == true) { insertsql.append(",:deptname"); } if (flag_2 == true) { insertsql.append(",:remark"); } insertsql.append(")"); // 将数据放进我们的map中 备注:map中key的名称==命名参数的名称 map<string, object> parammap = new hashmap<string, object>(); parammap.put("deptid", deptid); parammap.put("deptname", deptname); parammap.put("remark", remark); int rowcount = this.getnamedparameterjdbctemplate().update(insertsql.tostring(), parammap); system.out.println("rowcount影响的行数= " + rowcount); } /* * preparestatement的写法 */ public void update() { stringbuffer updatesql = new stringbuffer(); updatesql.append("update t_dept set"); updatesql.append(" deptname = :deptname,"); updatesql.append(" remark = :remark"); updatesql.append(" where deptid = :deptid"); updatesql.append(""); // 获取到模板 namedparameterjdbctemplate template = this.getnamedparameterjdbctemplate(); // 将数据放置到bean里面去 deptbean deptbean = new deptbean(); deptbean.setdeptid(1); deptbean.setdeptname("lisi"); deptbean.setremark("lisizhenshuai"); // 使用一个bean工厂的方法将预处理我们的bean beanpropertysqlparametersource paramsource = new beanpropertysqlparametersource(deptbean); // 调用模板方法更新数据 int rowcount = template.update(updatesql.tostring(), paramsource); // 输出影响的行数 system.out.println("影响的行数rowcount=" + rowcount); } public static void main(string[] args) { // 获取到bean对象 testmain_8 testmain_8 = (testmain_8) springutil.getbean("testmain_8"); // 测试方法 // testmain_8.insert(true,true);//由这个参数来控制是不是插入某一个属性列的数据 testmain_8.update(); } }
(9)jdbctemplate模板对于查询语句的封装
对应的xml文件的配置:
<!-- 使用jdbctemplate模板对于查询语句的封装 --> <bean name="testmain_9" class="com.jdbc.testmain_9"> <property name="datasource" ref="datasource"></property> </bean>
对应的测试类:
package com.jdbc; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; import java.util.list; import java.util.map; import java.util.vector; import org.springframework.jdbc.core.beanpropertyrowmapper; import org.springframework.jdbc.core.columnmaprowmapper; import org.springframework.jdbc.core.preparedstatementsetter; import org.springframework.jdbc.core.rowmapper; import org.springframework.jdbc.core.namedparam.beanpropertysqlparametersource; import org.springframework.jdbc.core.namedparam.namedparameterjdbctemplate; import org.springframework.jdbc.core.support.jdbcdaosupport; import com.bean.deptbean; import com.util.springutil; /** * jdbctemplate模板对于查询语句的封装测试类 * @author 夜孤寒 * @version 1.1.1 */ public class testmain_9 extends jdbcdaosupport{ /* * 最简单的一个查询 */ public void one(){ system.out.println("=============================="); system.out.println("1:返回所有的对象"); string sql="select * from t_dept order by deptid asc"; list<map<string, object>>deptlist=this.getjdbctemplate().queryforlist(sql); for(map<string, object>rowmap:deptlist){ system.out.println(rowmap); } system.out.println("=============================="); system.out.println("2:返回一条对象"); /* * 返回一条对象,将返回的对象使用map的方式来接收 */ sql="select * from t_dept where deptid=1"; map<string, object>rowmap=this.getjdbctemplate().queryformap(sql); if(rowmap!=null){ system.out.println(rowmap); } /* * 使用queryforobject方法来接收一个对象: * 1、如果方法的第二个参数是class类型的话,表示sql只能返回一行一列。相当于rowmapper中的singlecolumnrowmapper; * 2、如果方法的第二个参数是rowmapper类型的话,表示sql语句只能返回一行多列。 * 一行多列,默认是返回queryformap,但是spring允许可以对返回的行数据进行自定义的映射 */ /* * 方式一:返回的class类型 */ sql="select count(1) from t_dept where deptid=1";//什么意思? integer dept_count=this.getjdbctemplate().queryforobject(sql, integer.class); system.out.println("dept_count="+dept_count); /* * 方式二:返回的是rowmapper的类型 */ sql="select * from t_dept where deptid=1"; beanpropertyrowmapper<deptbean>rowmapper=new beanpropertyrowmapper<deptbean>(deptbean.class); //需要将返回的数据转换成bean对象 deptbean deptbean=this.getjdbctemplate().queryforobject(sql, rowmapper); system.out.println(deptbean.getdeptid()+"\t"+deptbean.getdeptname()+"\t"+deptbean.getremark()); system.out.println("=============================="); } /* * 复杂的查询queryforxx: * 这个是模板封装好的查询方法 */ @suppresswarnings({ "unchecked", "rawtypes" }) public void two(){ //1、处理有预编译的语句 string sql="select * from t_dept where deptname like ? order by deptid asc"; list<map<string, object>>deptlist=this.getjdbctemplate().query(sql, new preparedstatementsetter() { @override public void setvalues(preparedstatement ps) throws sqlexception { //查询带有"l"这个字符的所有对象 ps.setstring(1, "%l%"); } },new columnmaprowmapper());//这里代表返回的是一个什么类型 system.out.println(deptlist); //2、处理带有预编译的语句,并且返回的是一个javabean list<deptbean>deptlist_2 = this.getjdbctemplate().query( sql, new preparedstatementsetter() { @override public void setvalues(preparedstatement ps) throws sqlexception { ps.setstring(1, "%l%"); } }, new beanpropertyrowmapper(deptbean.class)); system.out.println(deptlist_2); //3、直接处理resultset???????什么意思 list<vector<string>>deptlist_3=this.getjdbctemplate().query(sql, new preparedstatementsetter() { @override public void setvalues(preparedstatement ps) throws sqlexception { ps.setstring(1, "%l%"); } },new rowmapper() { @override public object maprow(resultset rs, int rownum) throws sqlexception { int deptid = rs.getint("deptid"); string deptname = rs.getstring("deptname"); vector<string> vector = new vector<string>(); vector.add(string.valueof(deptid)); vector.add(deptname); return vector; } }); system.out.println(deptlist_3); } /* * 使用命名参数的查询: * 前提是首先要实例化命名参数查询的对象 */ public void three(){//传一个bean条件,返回结果 //实例化一个对象 namedparameterjdbctemplate template=new namedparameterjdbctemplate(this.getdatasource()); //如果参数是javabean,那么返回值也就是javabean string sql="select * from t_dept where deptname like :deptname and remark like :remark"; //创建一个bean,设置好查询的条件 deptbean parambean=new deptbean(); parambean.setdeptname("%l%"); parambean.setremark("%shuai%"); //将创建好的bean放到查询语句的池子里面 beanpropertysqlparametersource paramsource=new beanpropertysqlparametersource(parambean); beanpropertyrowmapper<deptbean> rowbean = new beanpropertyrowmapper<deptbean>( deptbean.class); list<deptbean>deptlist=template.query(sql, paramsource, rowbean); for(deptbean deptbean:deptlist){ system.out.println(deptbean.getdeptname()+"\t"+deptbean.getremark()); } } public static void main(string[] args) { //获取到bean对象 testmain_9 testmain_9=(testmain_9)springutil.getbean("testmain_9"); //测试方法 // testmain_9.one(); // testmain_9.two(); testmain_9.three(); } }
今日笔者就将spring中的jdbctemplate模板介绍到这。
以上这篇spring的连接数据库以及jdbc模板(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
上一篇: Java8新特性Stream流实例详解
下一篇: 图文结合讲解Java单例模式
推荐阅读
-
Spring的连接数据库以及JDBC模板(实例讲解)
-
Spring Boot快速入门---(三)spring boot的快速连接数据库之spring data jpa以及事务管理
-
在Spring中使用JDBC和JDBC模板的讲解
-
在Spring中使用JDBC和JDBC模板的讲解
-
Spring的连接数据库以及JDBC模板(实例讲解)
-
JSP基于JDBC的数据库连接类实例
-
Java语言使用JDBC连接Mysql数据库的详细步骤,以及详细解释
-
C#连接SQL Server数据库的实例讲解
-
Spring jdbc中数据库操作对象化模型的实例详解
-
Java语言使用JDBC连接Mysql数据库的详细步骤,以及详细解释(一)