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 ...
随机推荐
- Xftp连接阿里云Linux,向Linux上传文件,Windows和Linux文件传输
我之前是用SecureCRT连接阿里云Linux的,上传文件用的Alt+p快捷键,感觉不是很方便.后来朋友给我推荐了Xshell,感觉确实好用得很多. 传输文件用的是Xftp,今天在向我的个人网站发布 ...
- bzoj 2588 Count on a tree
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- layer遮罩层 简单的遮罩层
在这里提供一个简单layer遮罩层,想深入了解可以进入 layer官网 多多学习哦. 先看下HTML页面代码 <!DOCTYPE html> <html lang="en& ...
- Linux第七节随笔-中 /date / ln /
4.date link 作用:显示或设定系统的日期与时间 参数: -d<字符串> 显示字符串所指的日期与时间.字符串前后必须加上双引号. -s<字符串> 根据字符串来设置日期与 ...
- 豹哥嵌入式讲堂:ARM开发中有用的文件(1)- source文件
大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的source文件种类. 众所周知,嵌入式开发属于偏底层的开发,主要编程语言是C和汇编.所以本文要讲的source文件主要指的就 ...
- [编织消息框架][netty源码分析]14 PoolChunk 的 PoolSubpage
final class PoolSubpage<T> implements PoolSubpageMetric { //该page分配的chunk final PoolChunk<T ...
- ubuntu14 搭建单机版hadoop2.6
1. 如果你的集群尚未安装所需软件,你得首先安装它们. 以Ubuntu Linux为例: $ sudo apt-get install ssh $ sudo apt-get install rsync ...
- asp.net mvc ajax提交模型到控制器
http://blog.csdn.net/loongsking/article/details/53224473 function btn_submit() { var data = n ...
- 最优化算法:BFGS算法全称和L-BFGS算法全称
在最优化算法研究中按时间先后顺序出现了许多算法包括如下几种,这里介绍下他们的全称和英文名称: 1.最速下降法(Gradient descent) 2.牛顿法(Newton method) 3. 共轭梯 ...
- 韩顺平教学资源java、oracle、linux
http://blog.itpub.net/28688617/viewspace-766392/