前言
今天介绍的是关于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://.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模板(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。