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 ...
随机推荐
- Nothing2
重压下似乎找不到释放的出口. 拳套早已封存, 竹箫也非常久不去碰它, 如今预计已然吹不出心弦之曲, 围棋的造诣也退步到家了. 是不是仅仅有当思路电光石火, 当指尖快如闪电, 当键盘上舞动的手指跟上思想 ...
- android错误之==与equals的区别
在做一个电话号码匹配的时候, 开始我使用的是这种情况 if (num == inCall.getNum()) { //操作... } 但是无论如何结果都是false,就算两个号码打印出来一模一样还是f ...
- XML DOM 节点
来自:w3cschool菜鸟教程 在 DOM 中,XML 文档中的每个成分都是一个节点. DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档 ...
- poj1363Rails(栈模拟)
主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...
- jQuery实现页面关键字搜索
<style type="text/css"> .highlight { background-color:yellow; } </style> <s ...
- Android消息机制之Handler
Android为什么要提供Handler Android建议我们不要在UI线程中执行耗时操作,因为这很容易导致ANR异常(在Android源码中我们可以看到,UI如果对用户的操作超过5秒无响应,就会报 ...
- UIGI 一级二级三级四级啦啦啦等列表层式排列效果
在每个需要排序的物体上放入GridTag 脚本 其中GridTag脚本用于提供此物体的深度 using UnityEngine; using System.Collections; using Uni ...
- linux cmd: ps
每天一个linux命令(41):ps命令 http://www.cnblogs.com/peida/archive/2012/12/19/2824418.html Linux中的ps命令是Proces ...
- linux:如何修改用户的密码
1.首先,要用CRT软件连接Linux系统. 2.首选,确认是用root用户登录系统的. 输入命令: id ,查看登录用户信息. 3.若修改root自己的密码,直接输入 passwd . 输入两遍,新 ...
- 5.6.3.4 trim()方法
ECMAScript 5 为所有字符串定义了trim()方法.这个方法会创建一个字符串的副本,删除前置以及后缀的所有空格,然后返回结果.例如: var stringValue = " hel ...