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的更多相关文章

  1. Spring笔记——Spring+JDBC组合开发

      使用Spring+JDBC集成步骤如下:   1. 配置数据源 2. 配置事务.配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间,事务的配置方式有两种:注解方式和基于XML配置方式 ...

  2. Spring学习笔记(五)—— Spring整合JDBC

    一.Spring对JDBC的支持 Spring提供了很多模板整合Dao技术 与JDBC的整合中,Spring中提供了一个可以操作数据库的对象——JdbcTemplate,该对象封装了JDBC技术,与D ...

  3. Spring笔记05(Spring JDBC三种数据源和ORM框架的映射)

    1.ORM框架的映射 01.JDBC连接数据库以前的方式代码,并给对象赋值 @Test /** * 以前的方式jdbc */ public void TestJdbc(){ /** * 连接数据库的四 ...

  4. struts2,hibernate,spring整合笔记(2)

    上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置 ...

  5. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  6. 【JDBC 笔记】

    JDBC 笔记 作者:晨钟暮鼓c个人微信公众号:程序猿的月光宝盒 对应pdf版:https://download.csdn.net/download/qq_22430159/10754554 没有积分 ...

  7. Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)

    在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...

  8. 不错的Spring学习笔记(转)

    Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是s ...

  9. Spring学习笔记(六)—— SSH整合

    一.整合原理 二.整合步骤 2.1 导包 [hibernate] hibernate/lib/required hibernate/lib/jpa 数据库驱动 [struts2] struts-bla ...

随机推荐

  1. windows下Qt Creator5.1.0编写程序以及调用OpenCV库

    系统说明 最近使用opencv编写程序,程序编的差不多就学习使用QT加个界面,首先声明下本人的系统和使用的软件版本, 系统: windows xp QT IDE:QT Creator5.1.0 Ope ...

  2. linux下coredump的产生及调试方法

    什么是coredump 通常情况下coredmp包括了程序执行时的内存,寄存器状态,堆栈指针,内存管理信息等.能够理解为把程序工作的当前状态存储成一个文件.很多程序和操作系统出错时会自己主动生成一个c ...

  3. 上传多张图片用Session临时存储

    DataTable dtImages = new DataTable(); string filepath = FileUpload1.PostedFile.FileName; //检查是否有文件要上 ...

  4. BZOJ 1996: [Hnoi2010]chorus 合唱队(dp)

    简单的dp题..不能更水了.. --------------------------------------------------------------- #include<cstdio&g ...

  5. C/C++指针和数组的关系

    首先一个列子说明指针和数组真的不是一回事: 浅谈C中的指针和数组(一) 如果用硬是把数组和指针放在一个,一个放声明里一个放定义中,这里就能看到指针和数组名是不同的.这篇文章从符号表的角度分析一下指针和 ...

  6. 10247 - Complete Tree Labeling(递推高精度)

    Problem B Complete Tree Labeling! Input: standard input Output: standard output Time Limit: 45 secon ...

  7. [cocos2d-x] 让精灵响应触摸 并把方向旋转到相对应的角度

    在cocos2d-x里面  想要把一个精灵从原位置移动到用户所触摸到的点 , 并且把精灵的方向旋转相对应的弧度,可以参考一下我的做法 我这里的精灵是用一条鱼, 用户触摸后鱼就移动到所触摸的点, 并且移 ...

  8. 调不尽的内存泄漏,用不完的Valgrind

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-X.X.X.tar.bz2 2. 解压安装包:tar –jxvf ...

  9. ElasticSearch 插件配置

    http://blog.sina.com.cn/s/blog_8f31e5b10101dsnq.html http://www.tuicool.com/articles/mMZfu2 http://b ...

  10. Xamarin几十篇博客,roslyn和dotnet也开源了

    .Net 基金会 http://www.dotnetfoundation.org/ 更新的真快,刚打完2的补丁包,3就粗来了............ https://www.visualstudio. ...