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 ...
随机推荐
- Java程序栈信息文件中的秘密(五)
最近发现在使用jstack工具在导出Java应用的线程栈时有一个小小的窍门,比如Linux环境上有一个用户为appuser,假如以这个用户启动了一个Java进程B,如果想要导出进程B的线程栈,则必须切 ...
- std::map中函数用法集合
1 STL的map表里有一个erase方法用来从一个map中删除掉指令的节点 2 eg: 3 map<string,string> mapTest; 4 typedef map< ...
- ajax 上传图片 并预览
<img {if !$article[pic]}style="display: none"{/if} width="82" height="6 ...
- PHP学习笔记5-类的继承/方法重写
更改Man.php文件名为People.php,加入代码: public function hi(){ return $this->_name.' say hi'; } 新建文件Man.php: ...
- ie7下div覆盖在iframe上方,ie8就不行,怎么解决
<div style="position:relative;display:inline-block;width:178px;height:90px;z-index:9999;top: ...
- 关于switch的思考和总结
1.通常每个case的末尾都应该加个break; 否则会default分支也会被执行 var score = 40;switch (score){case 50:console.log('50');/ ...
- 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
如果说去年百度世界的关键词是“百度新首页”的话,那么今年在研发者人群中,对百度世界最深的印象就是“七种武器”,即在云的世界里,百度为开发者所提供的包括个人云存储.LBS.移动云测试中心等在内的七种工具 ...
- 在windows下配置对github的操作--基本操作
一.下载安装 git for widows软件 git for widows 是专门用来在windows下操作 github的软件,提供bash(命令行) 和 gui两种方式. 在bash下,其实就是 ...
- Oracle select into from 和 insert into select
select into from SQLSERVER 创建表: select * into aaa from bbb Oracle 创建表: create table aaa as select * ...
- JAVA GUI学习 - JInternalFrame浮动窗口:可拖拽窗口(依赖于父窗口)
public class JInternalFrameKnow extends JInternalFrame { public JInternalFrameKnow() { this.setBound ...