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 ...
随机推荐
- bzoj 4817: [Sdoi2017]树点涂色
Description Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. ...
- Docker(九):Docker容器卷插件
1.Convoy 1.1 安装 [root@MediaServer tmp]# tar xvf convoy.tar.gz convoy/ convoy/convoy-pdata_tools conv ...
- type 命令详解
type 作用: 用来显示指定命令的类型,判断出命令是内部命令还是外部命令. 命令类型: alias: 别名 keyword:关键字, shell 保留字 function:函数, shell函数 ...
- Handwritten Parsers & Lexers in Go (翻译)
用go实现Parsers & Lexers 在当今网络应用和REST API的时代,编写解析器似乎是一种垂死的艺术.你可能会认为编写解析器是一个复杂的工作,只保留给编程语言设计师,但我想消除这 ...
- [编织消息框架][JAVA核心技术]动态代理应用11-水平扩展实现
由于示例,远程服务地址配置在properties文件,通过QMConfig类加载,最优方式是上节介绍过,放在共享内存上,只需要维护一份数据即可,如放在redis上 /** 服务地址<servic ...
- 阿里云ECS连接阿里云Redis问题
描述 项目之前的服务器使用Windows,Redis使用阿里云的云数据库Redis版,一切正常. 后来了更换了Linux,也配置好了Redis,但连接阿里云的Redis时却怎么也连接不上 原因 ECS ...
- VS2010 Extension实践(2)
在上一篇(VS2010 Extension (1)实践)里,主要展示了如何使用MEF扩展VS2010,来扩展编辑控制和展现自己的UI:在实现QuickToolbar的时候,发现MEF仅仅提供了很基本的 ...
- zabbix2.2部署安装(安装环境Centos 6.* X64)
1.在已有的LAMP或者LNMP的基础上安装zabbix,安装一些依赖包: 安装epel源:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64 ...
- HTML编码规范、CSS编码规范
HTML编码规范 IE 兼容模式 IE 支持通过特定的 标签来确定绘制当前页面所应该采用的 IE 版本.除非有强烈的特殊需求,否则最好是设置为 edge mode,从而通知 IE 采用其所支持的最新的 ...
- Pandas库的使用--Series
一.概念 Series相当于一维数组. 1.调用Series的原生方法创建 import pandas as pd s1 = pd.Series(data=[1,2,4,6,7],index=['a' ...