zoukankan      html  css  js  c++  java
  • Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC

    0. 目录

    1. JdbcTemplate介绍
    2. JdbcTemplate常见方法
    3. 代码示例
    4. 参考资料

    1. JdbcTemplate介绍

    JdbcTemplate是core包的核心类。它替我们完成了资源的创建以及释放工作,从而简化了我们对JDBC的使用。它还可以帮助我们避免一些常见的错误,比如忘记关闭数据库连接。JdbcTemplate将完成JDBC核心处理流程,比如SQL语句的创建、执行,而把SQL语句的生成以及查询结果的提取工作留给我们的应用代码。它可以完成SQL查询、更新以及调用存储过程,可以对ResultSet进行遍历并加以提取。它还可以捕获JDBC异常并将其转换成org.springframework.dao包中定义的,通用的、信息更丰富的异常。

    2. JdbcTemplate常见方法

    JdbcTemplate主要提供以下五类方法:

    • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
    • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;
    • batchUpdate方法用于执行批处理相关语句;
    • query方法及queryForXXX方法:用于执行查询相关语句;
    • call方法:用于执行存储过程、函数相关语句。

    JdbcTemplate类支持的回调类:

    • 预编译语句及存储过程创建回调:用于根据JdbcTemplate提供的连接创建相应的语句;

    PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;
    CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

    • 预编译语句设值回调:用于给预编译语句相应参数设值;

    PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;
    BatchPreparedStatementSetter:类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

    • 自定义功能回调:提供给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作;

    ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;
    StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作;
    PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作;
    CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作;

    • 结果集处理回调:通过回调处理ResultSet或将ResultSet转换为需要的形式;

    RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。
    RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。
    ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;

    3. 代码示例

    3.1 实体类

    package com.chzhao.spring.jdbctemplatetest;
    
    public class Dept {
    	private String DeptNo;
    	private String DName;
    
    	public String getDeptNo() {
    		return DeptNo;
    	}
    
    	public void setDeptNo(String deptNo) {
    		DeptNo = deptNo;
    	}
    
    	public String getDName() {
    		return DName;
    	}
    
    	public void setDName(String dName) {
    		DName = dName;
    	}
    }
    
    

    实体类很简单,就不介绍对应数据库了。

    3.2 DAO类

    package com.chzhao.spring.jdbctemplatetest;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.jdbc.core.RowMapper;
    
    public class DeptDao {
    	private JdbcTemplate jdbcT;
    
    	public void setJdbcT(JdbcTemplate jdbcT) {
    		this.jdbcT = jdbcT;
    	}
    
    	public List findALL() {
    		String sql = "select * from dept";
    		return jdbcT.queryForList(sql);
    	}
    
    	public List<Dept> QueryALLDepts() {
    		String sql = "select * from dept";
    		return this.jdbcT.query(sql, new RowMapper<Dept>() {
    			public Dept mapRow(ResultSet rs, int rowNum) throws SQLException {
    				Dept entity = new Dept();
    				entity.setDeptNo(rs.getString("DEPTNO"));
    				entity.setDName(rs.getString("DNAME"));
    				return entity;
    			}
    		});
    	}
    
    	public List<Dept> findALLDepts() {
    		List<Dept> depts = new ArrayList<Dept>();
    
    		String sql = "select * from dept";
    
    		List list = jdbcT.queryForList(sql);
    		Iterator iterator = list.iterator();
    		Dept dept = null;
    		while (iterator.hasNext()) {
    			Map map4dept = (Map) iterator.next();
    			dept = new Dept();
    			dept.setDeptNo((String) map4dept.get("DEPTNO"));
    			dept.setDName((String) map4dept.get("DNAME"));
    			depts.add(dept);
    		}
    		return depts;
    	}
    
    	public int delete(int bid) {
    		String sql = "delete from DeptInfo where bid =?";
    		return jdbcT.update(sql, new Object[] { bid });
    	}
    
    }
    
    

    3.3 配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    
    	<bean id="springDSN"
    		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    		<property name="driverClassName">
    			<value>com.mysql.jdbc.Driver</value>
    		</property>
    		<property name="url">
    			<value> <![CDATA[jdbc:mysql://localhost:3306/tz?useUnicode=true&characterEncoding=utf8]]></value>            
    		</property>
    		<property name="username">
    			<value>tz</value>
    		</property>
    		<property name="password">
    			<value>tz</value>
    		</property>
    	</bean>
    
    	<bean id="jdbcTemplate"
    		class="org.springframework.jdbc.core.JdbcTemplate" abstract="false"
    		lazy-init="false" autowire="default" dependency-check="default">
    		<property name="dataSource">
    			<ref bean="springDSN" />
    		</property>
    	</bean>
        
    	<bean id="deptDao" class="com.chzhao.spring.jdbctemplatetest.DeptDao">
    		<property name="jdbcT">
    			<ref bean="jdbcTemplate" />
    		</property>
    	</bean>
        
    </beans>
    
    

    3.4 MAIN入口

    package com.chzhao.spring.jdbctemplatetest;
    
    import java.util.Iterator;
    import java.util.List;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class JdbcMain {
    	private static ApplicationContext ctx = new ClassPathXmlApplicationContext(
    			"jdbc.xml");
    
    	public static Object getBean(String beanName) {
    		return ctx.getBean(beanName);
    	}
    
    	public static void main(String[] args) {
    		DeptDao dao = (DeptDao) getBean("deptDao");
    		List<Dept> depts = dao.findALLDepts();
    		for (Dept dept : depts) {
    			System.out.println(dept.getDeptNo() + "," + dept.getDName() + ",");
    		}
    		System.out.println("---------------------------------");
    
    		List list = dao.findALL();
    		for (Iterator it = list.iterator(); it.hasNext();) {
    			System.out.println(it.next());
    		}
    		System.out.println("---------------------------------");
    		List<Dept> depts2 = dao.QueryALLDepts();
    		for (Dept dept : depts2) {
    			System.out.println(dept.getDeptNo() + "," + dept.getDName() + ",");
    		}
    	}
    }
    
    

    3.5 MAVEN配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    
    	<groupId>com.chzhao</groupId>
    	<artifactId>springtest</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<packaging>jar</packaging>
    
    	<name>springtest</name>
    	<url>http://maven.apache.org</url>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>3.8.1</version>
    			<scope>test</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>4.0.1.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    			<version>4.0.1.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>4.0.1.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>5.1.30</version>
    		</dependency>
    	</dependencies>
    </project>
    
    

    4. 参考资料

    Spring In Action 第三版
    Spring JdbcTemplate方法详解
    Spring JdbcTemplate例子

  • 相关阅读:
    抓包工具—Fiddler
    vue 统一注册公共组件
    vscode 配置 eslint 自动格式化
    vue axios http 请求 响应拦截
    vue实现菜单权限控制
    webpack之深入浅出externals
    webpack之前端性能优化(史上最全,不断更新中。。。)
    webpack插件url-loader使用规范
    移动端布局最佳实践(viewport+rem)
    本地更新代码同步至github仓库
  • 原文地址:https://www.cnblogs.com/wardensky/p/4217268.html
Copyright © 2011-2022 走看看