一、Spring对Jdbc的支持

  Spring为了提供对Jdbc的支持,在Jdbc API的基础上封装了一套实现,以此建立一个 JDBC 存取框架。

  作为 Spring JDBC 框架的核心, JDBC 模板的设计目的是为不同类型的 JDBC 操作提供模板方法. 每个模板方法都能控制整个过程, 并允许覆盖过程中的特定任务. 通过这种方式, 可以在尽可能保留灵活性的情况下, 将数据库存取的工作量降到最低.

二、传统的Jdbc实现

  如下为传统的Jdbc实现,该实现有两个明显的缺点就是(1)需要自己管理连接 (2)Jdbc操作重复代码封装与编写

public void save() {
try {
String sql = "insert into aa(id,name) values(3,'happy');";
Connection con = null;
Statement stmt = null;
Class.forName("com.mysql.jdbc.Driver");
// 连接对象
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/kk", "root", "123456");
// 执行命令对象
stmt = con.createStatement();
// 执行
stmt.execute(sql);
// 关闭
stmt.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}

三、Spring+Jdbc实现

  相比于传统的Jdbc实现,在Jdbc API的基础上封装了一套实现JdbcTemplate,JdbcTemplate的优点如下:

  (1)配置基于模板设置

  (2)完成了资源的创建和释放的工作

  (3)完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行,简化了对JDBC的操作

  (4)仅需要传递DataSource就可以把它实例化

  (5)JdbcTemplate只需要创建一次,减少了代码复用的烦恼

  (6)JdbcTemplate是线程安全类

  步骤1.配置Spring+JDBC配置文件

db.properties

#mysql jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8
jdbc.uid=root
jdbc.pwd=root

applictionContext.xml

	<!--1 引入属性文件,在配置中占位使用 -->
<context:property-placeholder location="classpath:spring/db.properties" />
<!--2 配置C3P0数据源 -->
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<!--驱动类名 -->
<property name="driverClass" value="${jdbc.driver}" />
<!-- url -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 用户名 -->
<property name="user" value="${jdbc.uid}" />
<!-- 密码 -->
<property name="password" value="${jdbc.pwd}" />
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
<property name="acquireIncrement" value="5"></property>
<!-- 初始连接池大小 -->
<property name="initialPoolSize" value="10"></property>
<!-- 连接池中连接最小个数 -->
<property name="minPoolSize" value="5"></property>
<!-- 连接池中连接最大个数 -->
<property name="maxPoolSize" value="20"></property>
</bean> <!--整合普通的JDBC查询 start-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource" />
</bean>
<bean id="userDao" class="com.zhangguo.JDBC.UserJDBCTemplateDAO">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<!--整合普通的JDBC查询 end -->

四、相关类

User.java

package com.zhangguo.JDBC;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper; public class UserMapper implements RowMapper<User> { @Override
public User mapRow(ResultSet rs, int rownum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
} }

UserJDBCTemplateDAO.java

package com.zhangguo.JDBC;
import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper; public class UserJDBCTemplateDAO { private JdbcTemplate jdbcTemplate;//利用applicationContext.xml让它初始化,不用每个类都出现jdbcTemplate= new JdbcTemplate(xx)这些玩意! /*查询整张表的数据*/
public List<User> findAllUser() {
String sql = "select * from user";
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
return this.jdbcTemplate.query(sql, rowMapper);
} /*修改password字段*/
public void updatePassword(int id,String password){
String sql = "update user set password='"+password+"' where id="+id;
jdbcTemplate.execute(sql);
} /*JdbcTemplate jdbcTemplate的getter setter必须有,不然spring读不到这个变量。由于不太重要,习惯性放在最后*/
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
} public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} }

UserMapper.java

package com.zhangguo.JDBC;

import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper; public class UserMapper implements RowMapper<User> { @Override
public User mapRow(ResultSet rs, int rownum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
} }

测试类

JDBCUserTest

package com.zhangguo.user;
import com.zhangguo.JDBC.UserJDBCTemplateDAO;
import com.zhangguo.JDBC.User; import java.util.*;//打印数据库表的时候,用到容器List、ArrayList不得不应用 /*用于初始化Spring*/
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.ConfigurableApplicationContext;//用于关闭Spring public class JDBCUserTest { @Test
public void testUser() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:spring/applicationContext.xml");// 初始化spring
UserJDBCTemplateDAO userDao = (UserJDBCTemplateDAO) applicationContext.getBean("userDao");// 初始化userDao这个数据库接口类 // userDao.updatePassword(1, "cc");这样就能修改id=1的password字段,让其变成cc,这里不作展示 /* 查询整张表的内容将其打印出来 */
List<User> user_list = new ArrayList<User>();
user_list = userDao.findAllUser();
for (User user : user_list) {// jdk1.5+的foreach打印,省事,不用写这么多代码了
System.out.println(user.getId() + "\t" + user.getUsername() + "\t"
+ user.getPassword());
} ((ConfigurableApplicationContext) applicationContext).close();// 关闭Spring避免警告
} }

程序目录结构

Spring JDBC可以Mybaits共存的,集成了mybaits,同时也可以集成JDBCTemplate

Spring整合JDBC temple的更多相关文章

  1. Spring整合jdbc

    首先web.xml文件跟往常一样,加载spring容器和加载org.springframework.web.context.ContextLoaderListener读取applicationCont ...

  2. JAVAEE——spring03:spring整合JDBC和aop事务

    一.spring整合JDBC 1.spring提供了很多模板整合Dao技术 2.spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => JDBC模 ...

  3. Spring整合JDBC及事务处理

    1.Spring整合JDBC DAO是数据访问对象(data access object)的简写.接口是实现松耦合的关键,Spring也鼓励使用接口,但不是强制的. 捕获异常时希望能尝试从异常状态中恢 ...

  4. Spring整合JDBC以及AOP管理事务

    本节内容: Spring整合JDBC Spring中的AOP管理事务 一.Spring整合JDBC Spring框架永远是一个容器,Spring整合JDBC其实就是Spring提供了一个对象,这个对象 ...

  5. Spring整合JDBC实现简单的增删改

    Spring整合JDBC实现简单的增删改: 1.导入Spring的包和数据库的驱动包: 2.选择一个数据源(dbcp和C3P0) 3.导入数据源的包(这里我们使用dbcp) <span styl ...

  6. Spring知识点总结(五)Spring整合JDBC

     1. 回顾JDBC        a. java操作关系型数据的API.导入相关数据库的驱动包后可以通过JDBC提供的接口来操作数据库.        b. 实现JDBC的六个步骤          ...

  7. Spring整合JDBC(连接池、JDBC模板、Dao配置到Spring容器、配置文件的优化)

    1.Spring整合JDBC (1)导包(共12个): c3p0连接池.JDBC驱动(4个) Spring-jdbc.Spring-tx事务(2个) (2)JDBC模板对象(JDBCTemplate) ...

  8. spring整合jdbc方法一

    用了一段时间的spring这,闲来没事做一下spring整合jdbc 目录文件 导入jar包 由于spring的jar包是在myeclipse中自动导入的有些暂时用不到的也没有处理. Emp类 pac ...

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

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

随机推荐

  1. shiro的ssm集成和简单的开发尝试

    配置web.xml <!-- 配置shiro的集成开始 --> <filter> <filter-name>shiroFilter</filter-name& ...

  2. [Firefox附加组件]0004.上下文菜单项

    在我们平常浏览网页是经常要对网页类容进行一些操作处理,如复制,翻译,搜索,打印打印等,今天我们就学习下如何在Firefox中我们如何通过附加组件实现这些操作. 开发步骤 1.终端窗口运行以下命令创建项 ...

  3. win上的python

    #启用浏览器,最大化窗口 #coding = utf-8 from selenium import webdriver class MyClass(object): ''' classdocs ''' ...

  4. 服务器开发 Ubuntu

    一.Ubuntu安装: 为什么用Ubuntu,作为服务器初学者开发,如果真的要买苹果系统电脑性价比不高,所以在window系统中安装Linux虚拟机是不二之选.为什么用Ubuntu不多说了,开始安装吧 ...

  5. Linux passwd 提权

    利用条件,passwd 可写 ls -al /etc/passwd 利用方式: 生成密钥  openssl passwd -1 -salt test 123456 写入passwd echo 'tes ...

  6. Alpha冲刺 —— 个人总结

    这几日Alpha冲刺的个人进展汇总,收获满满,我成长了. 我们的团队博客链接,团队作业第五次--Alpha冲刺 4.30 今日进展 改进数据库:字段命名重新规范,在record表中添加confirme ...

  7. 前端HTML 定位position 绝对定位 相对定位

    >>>position:absolute;绝对定位 当前元素相对于父级元素位置[该父级元素必须也设定了position,不然会继续往上找祖先元素,直到body为止]的定位 >& ...

  8. vue 中<vue-scroll >滚动条回到顶部

    今天项目碰到一个<vue-scroll >滚动条要回到顶部的需求,查询了好久终于解决了,这里记录一下: 其实就是scrollIntoView()方法的使用(官方文档): 需要注意的是要求页 ...

  9. Java实现 LeetCode 441 排列硬币

    441. 排列硬币 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整 ...

  10. Java实现 N的阶乘

    import java.util.Scanner; public class n的阶乘 { public static void main(String[] args) { Scanner sc =n ...