Spring4.3.1 JDBC笔记

个人总结,转载请注明出处:http://www.cnblogs.com/lidabnu/p/5679354.html

基于Spring4.3.1官方文档总结,官方文档链接http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#jdbc

Spring JDBC能干什么,如下图所示,可见,其目的还是“简化开发”,把通用的业务无关的操作都在框架中做了。

先思考一下使用JDBC操作数据库需要解决哪些问题:

  1. 如何配置数据库连接;
  2. 执行查询:根据返回值类型可分为查询出对象,查询出对象列表,查询出数量等标量;然后再有带条件的查询。
  3. 执行删除、修改和插入;
  4. 批量操作数据库。

先简要介绍下Spring4.3.1中的JDBC操作相关类:

  1. JDBCTemplate:最经典也是最流行的类,其他类都基于JDBCTemplate封装;JDBCTemplat是线程安全的,这也是多个Dao共用一个JDBCTemplate的前提
  2. NamedParameterJdbcTemplate: 封装JDBCTemplate提供可命名的参数赋值方法,来代替JDBCTemplate的传统占位符"?“,当SQL中有多个待赋值参数时更方便。
  3. SimpleJDBCInsert和SimpleJDBCCall:利用数据库的元数据简化配置,使用它们时,仅需提供数据库中的表名或者存储过程名称以及一组与列名匹配的参数。需要数据库提供足够的元数据支持。
  4. RDBMSObject:略

一个个看要解决的问题:

如何配置数据库连接:

Spring有三种方式配置数据源,即:使用JNDI来利用外部数据源(例如Tomcat等WEB容器)、利用DBCP管理的数据库连接池、以及使用Spring自带的DriveManagerDataSource(这个不支持连接池,因此不能用于生产环境)。这里仅仅介绍DBCP。其使用方式十分简单,就是在配置文件中配置一个DBCP数据源即可。

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/stock"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
        <property name="initialSize" value="5"></property>
        <property name="maxActive" value="10"></property>
    </bean>

当然,一般情况下,数据库的URL以及用户名、密码等均会在额外的配置文件中配置,所以可以利用SpEL表达式来弄。需要使用context:property-placeholder来配置“配置文件的路径”。

<?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:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-3.0.xsd
        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">

<!--   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> -->
<!--         <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> -->
<!--         <property name="url" value="jdbc:mysql://localhost:3306/stock"></property> -->
<!--         <property name="username" value="root"></property> -->
<!--         <property name="password" value="123456"></property> -->
<!--         <property name="initialSize" value="5"></property> -->
<!--         <property name="maxActive" value="10"></property> -->
<!--     </bean> -->

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/stock"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="initialSize" value="5"></property>
        <property name="maxActive" value="10"></property>
    </bean>

    <context:property-placeholder location="jdbc.properties"></context:property-placeholder>

    <bean id="stockDao" class="testjdbc.dao.StockDao">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- <context:component-scan base-package="stock.dao"></context:component-scan> -->

</beans>

如何执行查询:


查询标量:

int countOfActorsNamedJoe = this.jdbcTemplate.queryForObject(
        "select count(*) from t_actor where first_name = ?", Integer.class, "Joe");

String lastName = this.jdbcTemplate.queryForObject(
        "select last_name from t_actor where id = ?",
        new Object[]{1212L}, String.class);

查询对象:使用queryForObject方法,输入参数使用Object数组,重载定义“行-对象”转换对象RowMapper

Stock queryStock(String code)
	{
		return getJdbcTemplate().queryForObject("select * from stock where code=?",new Object[]{code}, new RowMapper<Stock>()
		{

			public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
				Stock stock = new Stock();
				stock.setCode(rs.getString("code"));
				stock.setName(rs.getString("name"));
				stock.setId(rs.getInt("id"));
				return stock;
			}

		});
	}

查询一批对象:与queryForObject相同

	List<Stock> queryStocks()//不带条件
	{
		return getJdbcTemplate().query(SELECT_SQL, new RowMapper<Stock>()
				{

					public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
						Stock stock = new Stock();
						stock.setCode(rs.getString("code"));
						stock.setName(rs.getString("name"));
						stock.setId(rs.getInt("id"));
						return stock;
					}

				});
	}
	List<Stock> queryStocks(String codePrefix)//带条件
	{
		return getJdbcTemplate().query("select * from stock where code like ?",new Object[]{codePrefix+"%"}, new RowMapper<Stock>()
				{

					public Stock mapRow(ResultSet rs, int arg1) throws SQLException {
						Stock stock = new Stock();
						stock.setCode(rs.getString("code"));
						stock.setName(rs.getString("name"));
						stock.setId(rs.getInt("id"));
						return stock;
					}

				});
	}

  

如何执行删除、修改和插入:

	int insert(Stock stock)
	{
		return getJdbcTemplate().update("Insert into stock(id,code,name) value(?,?,?)", stock.getId(),stock.getCode(),stock.getName());
	}
	int delete(String stockCode)
	{
		return getJdbcTemplate().update("delete from stock where code=?", stockCode);
	}

如何执行批量操作:

批量操作减少了Client端(应用程序)和数据库服务器之间的网络来回,因此可提升性能,下次再单独写一篇

时间: 2024-08-08 03:09:03

Spring4.3.1 JDBC笔记的相关文章

JDBC笔记整理

 JDBC深入学习笔记 Jdbc:Java Database Connectivity(使用java操作数据库的标准接口,任何的java框架最终底层都是使用jdbc来操作数据库的,只是框架对jdbc有所封装) JDBC的核心接口和类:(深入研究源码有助于我们得心应手的使用) 核心类:DriverManager 核心接口:Connection.PreparedStatement.ResultSet.Statement(几乎被代替了) PreparedStatement接口:预处理机制,可以填充

JDBC笔记

-------------------------------------------------------------------------------------------- 数据持久化 把数据保存到可掉电式存储设备中一共之后使用,大多数情况下,特别是企业级应用中, 数据持久化意味着将内存中的数据保存到硬盘加以固话,而持久化的实现过程通过 各种关系型数据库来完成持久化的主要应用是将内存中的数据存储在关型数据库中 当然可以存储在磁盘文件,xml数据文件中 ----------------

java jdbc笔记整理

以前在公司直接用到的关于数据库方面的都是用ibatis,现在先来学些jdbc编程,顺便比较一下与ibatis框架的区别. 一,使用步骤: 1,加载驱动. Class.forName(“com.mysql.jdbj.Driver”); 2,使用DriverManager获取数据库连接.url写法:jdbc:subprotocol,other stuff.如mysql:     jdbc:mysql://hostname:port/databasename Connection conn = Dri

jdbc笔记2

private static String driver; private static String url; private static String username; private static String password; static{ ResourceBundle bundle = ResourceBundle.getBundle("db"); driver = bundle.getString("driver"); url = bundle.

JDBC 笔记3 通过PreparedStatement 对数据库进行增删改查

1 插入数据 public boolean ChaRu3(User user){ boolean flag=true; Connection conn=null; PreparedStatement ps=null; //创建PreparedStatement 对象 String sql= "insert into user (name,pwd) values(?,?)"; //sql语句不再采用拼接方式,应用占位符问号的方式写sql语句. conn=DBConnUtil.getCon

我的 CSDN 博客目录索引(主要记录了我学习视频、书籍的笔记,持续更新中)

我的 CSDN 博客地址: lw_power的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/lw_power 佟刚老师<Spring4视频教程>学习笔记(1) 佟刚老师<Spring4视频教程>学习笔记(2) 佟刚老师<Spring4视频教程>学习笔记(3) 佟刚老师<Spring4视频教程>学习笔记(4) 佟刚老师<Spring4视频教程>学习笔记(5) 佟刚老师<Spring4视频教程>学习笔记

java笔记整理

Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, Ejb, java和模式 Linux/Unix笔记 inode :存储编号(地址) ls -k:查看磁盘分区 ls -li:显示当前文件的inode号. 目录的大小跟文件的大小有关,跟目录里的文件(目录)数量无关. 一行多个命令的话,中间用分号分开.如:pwd;cal;date last | grep

【DRP】—【SQL】批量删除

1 /** 2 * 批量删除用户 3 * 4 * 采用一条语句完成删除 5 * 只提交一次 6 * 7 * 采用Statement拼串方式 8 * delete from t_user where user_id in ('aaaa', 'afff', 'eeee') 9 * @param userIds 10 */ 11 public void delUser(String[] userIds) { 12 StringBuilder sbStr = new StringBuilder(); 1

Spring4学习笔记-JDBC

引入的jar包与基于注解的方式引入的jar包相同 实体类 Employee.java   对应数据库中的employee表 public class Employee { private Integer id; private String last_name; private String email; private Department department; //...省略get.set方法 } Department.java   对应数据库中的department表 public cl