spring jdbc 笔记3
spring JDBC
加入对commons-dbcp spring-jdbc spring-tx的依赖
1.数据源的配置
获取数据源在spring中的Bean管理默认已经是单例模式
关闭数据源destroy-method="close"
作用是当数据库连接不使用的时候,就把该连接重新放到数据池中,方便下次使用调用
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="$jdbc:mysql:///mydb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
不在配置中将数据源配置写死
新建配置文件db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.uril=jdbc:mysql:///mydb
jdbc.username=root
jdbc.password=root
在applicationContext添加配置
<!-- 读取db.properties文件 使用${key}获取文件中的配置项 -->
<context:property-placeholder location="db.properties"/>
<!-- 数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
2.JdbcTemplate配置,用于执行sql
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!-- 需要构造方法注入一个数据源 ref是上面数据源的id -->
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
举例
@Named
public class StudentDao { @Inject/* 交给spring管理的类注入 ,属性名和id名最好一致
因为先是byName,找不到后byType*/
private JdbcTemplate jdbcTemplate; public void save(Student stu) {
String sql = "insert into student(name,address) values(?,?)";
// 添加,删除,更新都是用update
jdbcTemplate.update(sql, stu.getName(),stu.getAddress());
} public Student findById(int id) {
String sql = "select * from student where id = ?";
return jdbcTemplate.queryForObject(sql, new StudentRowMapper(), id);
} public List<Student> findAll() {
String sql = "select * from student";
return jdbcTemplate.query(sql, new StudentRowMapper());
} private class StudentRowMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs, int arg1) throws SQLException {
Student stu = new Student();
stu.setAddress(rs.getString("address"));
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
return stu;
}
}
}
跟jdbcTemplate类似,NamedParameterJdbcTemplate也是用于执行sql,但是不常用
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg name="dataSource" ref="dataSource"/>
</bean>
举例
@Named
public class StudentDao { @Inject
private NamedParameterJdbcTemplate jdbcTemplate; public void save(Student stu) {
// 引用占位符
String sql = "insert into student(name,address) values(:name,:address)"; /* 本质上
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", stu.getName());
map.put("address", stu.getAddress());
jdbcTemplate.update(sql,map);*/ /* 当:name,:address和Student中的属性名字相同时可以这样用*/
//SqlParameterSource sps = new BeanPropertySqlParameterSource(stu);
/* 即使:name,:address不相同,可以这样用 链式调用 */
SqlParameterSource sps = new MapSqlParameterSource().addValue("name", stu.getName()).addValue("address", stu.getAddress()); jdbcTemplate.update(sql,sps);
} public Student findById(int id) {
String sql = "select * from student where id = :id"; /*本质上
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", id);
return jdbcTemplate.queryForObject(sql,map,new StudentRowMapper());
*/ //当:id和Student中的属性名字相同时可以这样用
SqlParameterSource sps = new MapSqlParameterSource("id",id); return jdbcTemplate.queryForObject(sql,sps,new StudentRowMapper());
} public List<Student> findAll() {
String sql = "select * from student";
// query必须要传进去一个map,这是构造方法规定的
return jdbcTemplate.query(sql,new HashMap<String, Object>(),new StudentRowMapper());
} private class StudentRowMapper implements RowMapper<Student> { public Student mapRow(ResultSet rs, int arg1) throws SQLException {
Student stu = new Student();
stu.setAddress(rs.getString("address"));
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
return stu;
}
}
}
spring jdbc 笔记3的更多相关文章
- Spring笔记——Spring+JDBC组合开发
使用Spring+JDBC集成步骤如下: 1. 配置数据源 2. 配置事务.配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间,事务的配置方式有两种:注解方式和基于XML配置方式 ...
- Spring学习笔记(五)—— Spring整合JDBC
一.Spring对JDBC的支持 Spring提供了很多模板整合Dao技术 与JDBC的整合中,Spring中提供了一个可以操作数据库的对象——JdbcTemplate,该对象封装了JDBC技术,与D ...
- Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)
1.ORM框架的映射 01.JDBC连接数据库以前的方式代码,并给对象赋值 @Test /** * 以前的方式jdbc */ public void TestJdbc(){ /** * 连接数据库的四 ...
- struts2,hibernate,spring整合笔记(2)
上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置 ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- 【JDBC 笔记】
JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- Spring学习笔记(六)—— SSH整合
一.整合原理 二.整合步骤 2.1 导包 [hibernate] hibernate/lib/required hibernate/lib/jpa 数据库驱动 [struts2] struts-bla ...
随机推荐
- HTML5地理定位,百度地图API,知识点熟悉
推断浏览器的兼容问题: IE9+支持地理定位,FF Chrome新版支持地理定位 if (navigator.geolocation) { alert('支持地理定位'); } e ...
- javascript的函数相关属性和方法
作为一名前端初学者,应该坚持每天去学习,去总结 ,去复习,去接触更新鲜的事物.但是这段时间很浮躁,虽说也是在一直学习,自己能吸收的少之又少.今日在这突然冒出来,实感惭愧. 1.函数名.name 获得函 ...
- Linux新手笔记 源 安装chromium
centos6.4 32 一.软件源目录/etc/yum.repos.d把新的软件源文件copy到这即可.二.安装chromiumwget http://people.centos.org/hughe ...
- 【整理】Object-C中的属性(Property)的Setter:assign,copy,retain,weak,strong之间的区别和联系
iOS编程过程中,经常看到一些属性前面有些修饰符,比如copy,retain等. 这些关键字,是Object-C语言中,对于Property的setter. Mac官网: The Objective- ...
- WinSock网络编程基础(2)客户端
接下来说一下如何用WinSock创建基于TCP/IP模型的客户端和服务器. TCP可以提供两个计算机间可靠无误的数据传输,应用程序使用TCP通信时,会在两台计算机之间建立一个虚拟连接,连接之后计算机之 ...
- 5.4 RegExp类型
ECMAScript通过RegExp类型来支持正则表达式.使用下面类似Perl的语法,就可以创建一个正则表达式. var expression=/pattern/flags; 复制代码 其中的模式(p ...
- win7 64位 TortoiseSVN-1.8.4客户端安装
下载地址链接:http://pan.baidu.com/s/1nukeBVz 密码:tc79 (32 64位都有,注意区分) next一路安装 安装好后,在需要和服务器同步的文件夹图标上--鼠标右键- ...
- [LeetCode]题解(python):006-ZigZag Conversion
题目来源: https://leetcode.com/problems/zigzag-conversion/ 题意分析: 这道题目是字符串处理的题目.输入一个字符串和一个数字,将字符串填入倒Z形输入字 ...
- setTimeout 虚假的“异步”
看这篇http://www.laruence.com/2009/09/23/1089.html 所以实际上 setTimeout更像是任务按照队列执行 经过setTimeout设置后任务放在了队尾 ...
- The request failed with HTTP status 401: Unauthorized.
Reporting Service 控件默认由IIS里面的应用程序池标识 里面所定义的用户连接,如果用户没有权限则报以下错误 The request failed with HTTP status 4 ...