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 ...
随机推荐
- Wincc flexable的画面浏览切换组态
1.新建项目和6个画面 2.双击导航控件设置,选择默认设置 3.使用画面浏览编辑器编辑画面层次切换关系,拖拽画面到编辑器中进行关系连接 4.保运并运行
- android中Log类的封装
1.为了方便的使用Log打印日志,以及后续方便撤销日志打印,所以对Log类进行封装是一件好事. package market.phone; import android.util.Log; /** * ...
- 绝世emacs配置for Ubuntu
反正过不了几天就要退役了,把emacs配置放出来造福(祸害)大众? 浓浓的OIER风格,除了方便打代码就没别的用处(F8并不这样认为?),只可惜windows下的弄丢了,只有Ubuntu下的. F1不 ...
- centOS7 mini配置linux服务器(四) 配置jdk
这里简单写一下centos7Mini 安装jdk1.8的全过程. 一.下载jdk,linux版本. 地址:http://www.oracle.com/technetwork/java/javase/ ...
- 与apk签名有关的那些概念与命令
一.概念篇 1.消息摘要-Message Digest 消息摘要:在消息数据上,执行一个单向的hash函数,生成一个固定长度的hash值,这个Hash值就是消息摘要,也成为数字指纹. 消息摘要特点: ...
- 【深度学习系列】一起来参加百度 PaddlePaddle AI 大赛吧!
写这个系列写了两个月了,对paddlepaddle的使用和越来越熟悉,不过一直没找到合适的应用场景.最近百度搞了个AI大赛,据说有四个赛题,现在是第一个----综艺节目精彩片段预测 ,大家可以去检测一 ...
- Linux 下Beanstalk安装
1.安装 # wget https://github.com/kr/beanstalkd/archive/v1.10.tar.gz # tar xzvf v1.10 # cd beanstalkd-1 ...
- (python)leetcode刷题笔记03 Longest Substring Without Repeating Characters
3. Longest Substring Without Repeating Characters Given a string, find the length of the longest sub ...
- 微信小程序开发之picker选择器组件用法
picker组件时一个从底部弹起的可滚动的选择器(嵌入页面滚动器组件picker-view查看https://mp.weixin.qq.com/debug/wxadoc/dev/component/p ...
- MicroPython开发板:TPYBoard v102 播放音乐实例
0x00前言 前段时间看到TPYBoard的技术交流群(群号:157816561,)里有人问关于TPYBoard播放音乐的问题.最近抽空看了一下文档介绍,着手做了个实验.更多MicroPython的教 ...