Spring框架学习笔记(9)——Spring对JDBC的支持
一、使用JdbcTemplate和JdbcDaoSupport
1、配置并连接数据库
①创建项目并添加jar包,要比之前Spring项目多添加两个jar包c3p0-0.9.1.2.jar和mysql-connector-java-5.1.7-bin.jar
②创建db.properties添加以下配置
pp为数据库名initPoolSize和maxPoolSize随意
jdbc.user=root
jdbc.password=root
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///pp jdbc.initPoolSize=5
jdbc.maxPoolSize=10
③创建applicationContext.xml添加配置
<!-- 导入资源 -->
<context:property-placeholder location="classpath:db.properties"/> <!-- 配置C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
④创建一个单元测试类测试是否能够连接数据库
public class JDBCtest {
private ApplicationContext ctx = null;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@Test
public void testDataSource() throws SQLException {
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource.getConnection());
}
}
MySql创建数据库

2、使用JdbcTemplate
①applicationContext.xml添加bean
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
②修改JDBCtest.java添加JbdcTemplate属性和Update方法
public class JDBCtest {
private ApplicationContext ctx = null;
private JdbcTemplate jdbcTemplate = null;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
}
@Test
public void testUpdate() {
String sql = "update tbl_user set name = ? where id = ?";
jdbcTemplate.update(sql, "李四" , 1);
}
@Test
public void testDataSource() throws SQLException {
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource.getConnection());
}
}
执行成功“张三”修改为“李四”
update还可以用来新增和删除
使用jdbcTemplate.update执行insert和delete
@Test
public void testUpdate() {
String sql = "update tbl_user set name = ? where id = ?";
jdbcTemplate.update(sql, "李四", 1);
String sql1 = "insert into tbl_user(name , account) values (?,?)";
jdbcTemplate.update(sql1, new Object[]{"jj",250});
String sql2 = "delete from tbl_user where id = ?";
jdbcTemplate.update(sql2, 1);
}
③使用jdbcTemplate.batchUpdate执行批量操作
@Test
public void testBatchUpdate() {
String sql = "insert into tbl_user(name , account) values (?,?)";
List<Object[]> args = new ArrayList<Object[]>();
args.add(new Object[] { "jja", 250 });
args.add(new Object[] { "jjb", 260 });
args.add(new Object[] { "jjc", 270 });
args.add(new Object[] { "jjd", 280 });
args.add(new Object[] { "jje", 290 });
jdbcTemplate.batchUpdate(sql, args);
}
同样的batchUpdate也可以用来执行批量删除和添加
④使用jdbcTemplate.queryForObject从数据库获取对象
首先新建对象User
public class User {
private int id;
private String name;
private double account;
private Date birthday;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getAccount() {
return account;
}
public void setAccount(double account) {
this.account = account;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", account=" + account + ", birthday=" + birthday + "]";
}
}
在JDBCtest.java里添加testQueryForObject方法
/**
* <p>Description: 从数据库获取一个对象
* 不是使用jdbcTemplate.queryForObject(sql, requiredType, args)方法
* 而是使用jdbcTemplate.queryForObject(sql, args, argTypes, rowMapper)方法
* </p>
*/
@Test
public void testQueryForObject() {
String sql = "select id, name, account, birthday from tbl_user where id = ?";
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
User user = jdbcTemplate.queryForObject(sql, rowMapper, 1);
System.out.println(user.toString());
}
⑤使用jdbcTemplate的局限性
不支持级联属性,JdbcTemplate到底是一JDBC小工具不是ORM框架
⑥查实体类集合
/**
* <p>Description: 查实体类集合</p>
*/
@Test
public void testQueryForList() {
String sql = "select id, name, account, birthday from tbl_user where id > ?";
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
List<User> users = jdbcTemplate.query(sql, rowMapper, 5);
System.out.println(users.toString());
}
二、使用NamedParameterJdbcTemplate
1、配置NamedParameterJdbcTemplate Bean
<!-- 该对象可以使用具名参数,该对象没有无参构造器,所以必须传一个参数 -->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
2、在JDBCtest测试类中添加测试方法
/**
* <p>Description: 可以为参数起名字增强维护性,较为麻烦</p>
*/
@Test
public void testNamedParameterJdbcTemplate() {
String sql = "insert into tbl_user(name, account) values (:name,:account)";
Map<String , Object> paramMap = new HashMap<String , Object>();
paramMap.put("name", "hj");
paramMap.put("account", "10000000000");
namedParameterJdbcTemplate.update(sql, paramMap);
} /**
* <p>Description: 可以直接传对象</p>
*/
@Test
public void testNamedParameterJdbcTemplate2() {
String sql = "insert into tbl_user(name, account) values (:name,:account)";
User user = new User();
user.setName("kk");
user.setAccount(666);
SqlParameterSource paramSource = new BeanPropertySqlParameterSource(user);
namedParameterJdbcTemplate.update(sql, paramSource);
}
数据库中添加数据成功
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代
具名参数只在 NamedParameterJdbcTemplate 中得到支持
Spring框架学习笔记(9)——Spring对JDBC的支持的更多相关文章
- Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建
之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...
- Spring框架学习笔记(5)——Spring Boot创建与使用
Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...
- Spring框架学习笔记(1)
Spring 框架学习笔记(1) 一.简介 Rod Johnson(spring之父) Spring是分层的Java SE/EE应用 full-stack(服务端的全栈)轻量级(跟EJB比)开源框架, ...
- spring揭密学习笔记(1) --spring的由来
1.spring起源于在EJB暴露出各种严重问题的情况应运而生. Spring是于2003年兴起的一个轻量级的Java开发框架, Spring倡导一切从实际出发,以实用的态度来选择适合当前开发场景的解 ...
- spring框架学习笔记6:JDBC模板
JDBC模板:Spring中对数据库的操作. 这一部分对熟悉DBUtils的QueryRunner的开发者来说,非常简单 这是以前我简单写的dbutils的知识: http://www.cnblogs ...
- spring框架学习笔记7:事务管理及案例
Spring提供了一套管理项目中的事务的机制 以前写过一篇简单的介绍事务的随笔:http://www.cnblogs.com/xuyiqing/p/8430214.html 还有一篇Hibernate ...
- 手写Spring框架学习笔记
以下是咕泡公开课的学习笔记 一.创建工程springdemo 二.在pom中配置servlet <dependency> <groupId>javax.servlet</ ...
- Spring框架学习笔记(3)——SpringMVC框架
SpringMVC框架是基于Spring框架,可以让我们更为方便的进行Web的开发,实现前后端分离 思路和原理 我们之前仿照SpringMVC定义了一个自定义MVC框架,两者的思路其实都是一样的. 建 ...
- Spring框架学习笔记(7)——Spring Boot 实现上传和下载
最近忙着都没时间写博客了,做了个项目,实现了下载功能,没用到上传,写这篇文章也是顺便参考学习了如何实现上传,上传和下载做一篇笔记吧 下载 主要有下面的两种方式: 通过ResponseEntity实现 ...
- Spring框架学习笔记(1)——HelloWorld
1.创建一个新的项目,并添加Spring框架 2.创建HelloWorld.java package com.broadtext.beans.helloworld; public class Hell ...
随机推荐
- vmstat 命令详解
作用:vmstat 的含义为显示虚拟内存状态(virtual memor statics),但是它可以报告关于进程,内存,I/O 等系统整体运行状态 选项: -a 显示活动内页 -f 显示启动后创建的 ...
- JavaBean转Map方法
Map<String, Object> fieldMap =new HashMap<String, Object>(); BeanInfo beanInfo = Introsp ...
- shell 踩坑记
变量赋值时,等号两边不能有空格: 在判断表达式中,不论是 [ -n "$1" ] 还是 [ -f "$1" ] 都要在变量两侧加上双引号: 在使用与或非判断式 ...
- Spring Error : No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined
报错信息: Injection of autowired dependencies failed; nested exception is org.springframework.beans.fa ...
- webpack配置报错:invalid configuration object.webpack has been initialisted using a configuration objcet that does not match thie API schema
最近接收了别人的项目,webpack配置总是报错如下:最后找到了解决办法,在此分享一下: 错误情况: 解决办法: 将package.json里面的colors删除掉即可
- jQuery 文档操作方法
jQuery 文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() 向匹配的元素添加指定的类名. after() 在匹配的元素之 ...
- mysql change master导致gtid丢失
change master导致gtid丢失从innobackupex恢复导致binlog的拉取位置会导致主备gtid不一致.此类错误通过构造空事务方式无法修复.此时就需要change master 方 ...
- Python第二十四天 binascii模块
Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...
- Linux中gcc编译器的用法
在Linux环境下进行开发,gcc是非常重要的编译工具,所以学习gcc的基本常见用法时非常有必要的. 一.首先我们先说明下gcc编译源文件的后缀名类型 .c为后缀的文件,C语言源代码文件: .a为后 ...
- JavaScript的DOM编程--04--获取元素节点的子节点
获取元素节点的子节点(**只有元素节点才有子节点!!) 1). childNodes 属性获取全部的子节点, 但该方法不实用. 因为如果要获取指定的节点 的指定子节点的集合, 可以直接调用元素节点的 ...