`
- 浏览:
70676 次
- 性别:
- 来自:
山水之乡
-
模板模式 模仿Spring写的 JdbcTemplate 不懂Spring 没关系 很实用
java 代码
- 在这里我首先以一个比较简单的小例子让不知道模板模式的人先有个入门的概念。(如果要想深入了解,去看<java与模式>)
- 在后面的例子我将以一个比较实用的例子来说明这种模式给我们带来的好处,并且这个例子很实用。下面我会把所有的代码
- 都贴出来,你可以直接Copy代码就可以运行,如果你已经有啦一定了解,那么就直接看第二个吧。
- 在这里我希望你把它看完,并把它理解。因为开始我在看Spring的源码的时候也是看啦好多次才把思路理清楚的。
-
- 首先先说说这两个例子的作用,要不然看啦大半天都不知道是什么东西。
-
- 第一个: 当我们去买东西的时候,东西都会打折,然而每种东西的折扣都不一样。如买Book的时候,书的折扣是 0.8 折
- 而当我们去买 Video 的时候,它是 0.7 折,如果这些分类的商品很多的时候。而我们每次都要 在每一个类
- 中写一个打折后得到的实际价格的话,那是不是感觉到很累赘。也很不爽。所以我们有必要把它抽象出来。那么
- 每个类只要从这个类继承就可以啦。如果重用的方法多的话,那么这就会带来很大的好处.
-
- 看源代码:
-
-
-
-
-
- package com.dongguoh;
-
- public abstract class Item {
-
- protected abstract float getUnitPrice();
- protected abstract float getDiscountRate();
-
- public float getRealPrice(){
- return this.getDiscountRate()*this.getUnitPrice();
- }
-
- }
-
- package com.dongguoh;
-
- public class Video extends Item{
-
-
-
- protected float getDiscountRate() {
- return 0.8f;
- }
- protected float getUnitPrice() {
- return 300;
- }
-
- }
-
- package com.dongguoh;
-
- public class Book extends Item {
-
-
-
- public float getDiscountRate() {
- return 0.7f;
- }
- public float getUnitPrice() {
- return 88;
- }
-
- }
-
- 下面这是测试方法
- package com.dongguoh;
-
- import java.sql.*;
-
- import junit.framework.TestCase;
-
- public class TestTemplate extends TestCase {
- public void testMethod(){
- Book bk=new Book();
- Video vd=new Video();
- System.out.println("BookRealPrice: "+bk.getRealPrice());
- System.out.println("VideoRealPrice: " +vd.getRealPrice());
- }
- }
-
- 结果:
-
- BookRealPrice: 61.6
- VideoRealPrice: 240.0
-
- 上面这个例子比较简单,我就不多说啦,下面的是个实用的例子
-
- 例子二: 如果不是用Orm工具而是用经常用jdbc操作数据库的人会感到每次要连接到数据库,CRUD 数据的时候写一大串的
- try{}catch{},几乎每次都写,真是他妈的烦死啦。大家肯定有同感吧,反正我开始还不会用ORM工具的时候就觉得很麻烦的
- 而当你看啦下面这个例子后就就会觉得方便多啦.也不用写那么多的try catch{}啦,
- 直得高兴的是Spring中对这做啦很好的封装,所以我就横批写啦一个,这样就不与Spring偶合在
- 一起啦,可以单独的拿出来使用.
-
- 这时是数据库的表:
-
- DROP DATABASE IF EXISTS `hibernate`;
- CREATE DATABASE `hibernate` ;
- USE `hibernate`;
- CREATE TABLE `person` (
- `id` int(32) NOT NULL DEFAULT '0',
- `name` varchar(20) NOT NULL,
- `password` varchar(20) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
-
-
- 1.首先我们先做一个接口,现在先不管它,等下你就知道他有什么用啦
-
- package com.dongguoh;
-
- import java.sql.*;
-
-
-
- public interface IStatementCallback {
- public Object doInStatement(Statement stmt) throws RuntimeException,SQLException;
-
- }
-
- 2.而这里是最关键的,就是建一个Jdbc的模板方法,把那些经常要做的try{} catch{}都写在一个类里
- 免得以后每次都还去写。这就成啦代码复用.
-
- package com.dongguoh;
-
- import java.sql.*;
-
-
-
-
-
-
-
-
- public class JdbcTemplate {
-
-
- public Object execute(IStatementCallback action) {
- Connection conn = null;
- Statement stmt = null;
- Object result = null;
- try {
- conn=this.getConnection();
- conn.setAutoCommit(false);
- stmt=conn.createStatement();
-
-
- result=action.doInStatement(stmt);
-
- conn.commit();
- conn.setAutoCommit(true);
- } catch (SQLException e) {
- transactionRollback(conn);
- e.printStackTrace();
- throw new RuntimeException(e);
- }finally{
- this.closeStatement(stmt);
- this.closeConnection(conn);
- }
-
- return result;
- }
-
-
-
-
- private void transactionRollback(Connection conn){
- if(conn!=null){
- try {
- conn.rollback();
- } catch (SQLException e) {
-
- e.printStackTrace();
- }
- }
-
- }
-
- private void closeStatement(Statement stmt){
- if(stmt!=null){
- try {
- stmt.close();
- stmt=null;
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
- private void closeConnection(Connection conn){
- if(conn!=null){
- try {
- conn.close();
- conn=null;
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
-
-
- private Connection getConnection() {
- String driver = "com.mysql.jdbc.Driver";
- String url = "jdbc:mysql://127.0.0.1/Hibernate";
- Connection conn=null;
- try {
- Class.forName(driver);
- conn = DriverManager.getConnection(url, "root", "dongguoh");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return conn;
- }
-
- }
-
- 下面是我们的测试方法:
- package com.dongguoh;
-
- import java.sql.*;
-
- import junit.framework.TestCase;
-
- public class TestTemplate extends TestCase {
-
- public void testJdbcTemplate(){
- JdbcTemplate jt=new JdbcTemplate();
-
-
-
-
-
- int count=(Integer)jt.execute(new IStatementCallback(){
- public Object doInStatement(Statement stmt) throws RuntimeException, SQLException {
-
- String sql="INSERT INTO person VALUES(1,'dongguoh','123456')";
- int result=stmt.executeUpdate(sql);
- return new Integer(result);
- }
- });
- System.out.println("Count: "+count);
-
-
-
-
-
- jt.execute(new IStatementCallback(){
- public Object doInStatement(Statement stmt) throws RuntimeException, SQLException {
-
- String sql="SELECT name,password FROM person WHERE id=1";
- ResultSet rs=null;
- rs=stmt.executeQuery(sql);
- if(rs.next()){
- System.out.println(rs.getString("name"));
- System.out.println(rs.getString("password"));
- }
-
-
-
-
- return new Integer(1);
- }
- });
- }
- }
-
- 测试结果:
- Count: 1
- dongguoh
- 123456
-
- 如果你要用 PreparedStatement 的话,想传参数的话,再写一个接口来实现,再在JdbcTemplate重载一个方法
- 如public Object execute(IPreparedStatementCallback action,,Object[] objArray)再多传一个你要传递的参数数组,
- 这样做就OK啦,试试吧,感觉会更好,这就是模板方法给我们带来的好处,没事看看 设计模式 类的书感觉蛮爽的
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本主题将深入探讨Spring框架中的JdbcTemplate组件,以及模板模式和回调机制的概念。 **1. Spring JdbcTemplate** JdbcTemplate是Spring提供的一个用于简化数据库操作的API,它是Spring对JDBC(Java Database ...
Spring JdbcTemplate的出现是为了弥补原生JDBC在编码上的繁琐,它通过模板方法模式,将SQL执行、结果集处理等进行了抽象,使得开发者可以更专注于业务逻辑,而无需过多关注数据库访问的细节。同时,它还提供了事务...
模仿spring jdbcTemplate的粗略实现,只有很小的参考价值,如果是java初学者可以使用这个封装好的工具进行数据库操作,只需要在db.properties里配置好driver,url等信息
在本文中,我们将深入探讨Spring框架中的一个核心组件——JdbcTemplate。JdbcTemplate是Spring提供的一种数据库操作工具,它简化了数据库访问,使开发者...在实际项目中,JdbcTemplate是Spring开发中不可或缺的一部分。
使用Spring的JdbcTemplate实现分页功能
使用Spring的JdbcTemplate调用Oracle的存储过程
SpringJdbcTemplate是一个模板类,它提供了大量的方法来执行SQL查询、更新、存储过程等操作。这些方法会自动处理JDBC相关的资源关闭、异常转换等细节,使得代码更加整洁和健壮。 2. **数据库自适应** Spring...
Spring JDBC Template被用来简化数据库操作,它提供了一种模板方法模式,将SQL执行、结果集处理等细节进行了封装,使得开发者只需要关注SQL语句和处理结果即可。例如,登录验证可能涉及查询用户表,查找与输入用户名...
**基于注解的Spring JdbcTemplate** 在Java世界中,Spring框架是企业级应用开发的首选。Spring JDBC模絫提供了一种简洁的方式来处理数据库操作,而`Spring JdbcTemplate`是这个模絫的核心组件。本教程将深入探讨...
### Spring-JdbcTemplate...总之,Spring-JdbcTemplate通过其简洁的API和强大的功能,极大地简化了JDBC编程,是Spring框架中不可或缺的一部分,对于Java后端开发人员来说,掌握其使用方法是提升数据库操作效率的关键。
**Spring JdbcTemplate**是Spring框架中的一个核心组件,主要用于简化Java数据库访问。它提供了一种模板化的方式来执行SQL语句,使得开发人员可以避免编写大量的重复代码,专注于业务逻辑,而不是底层的数据库交互...
spring 中对大数据的处理,包括clob,blob的数据。比之jdbc下简便很多。
Struts、Spring 和 JDBCTemplate 是三个在 Java Web 开发中常用的框架和技术,它们结合使用可以构建出高效且灵活的企业级应用程序。在这个“Struts+Spring+JdbcTemplate Demo”中,我们将探讨这三个组件如何协同工作...
Spring框架是Java开发中不可或缺的一部分,它简化了应用开发并提供了诸如依赖注入、面向切面编程等核心特性。在本项目中,Spring作为一个服务提供者,帮助管理组件间的依赖关系,同时通过AOP实现事务管理和日志记录...
在本项目中,"spring-springMvc-jdbctemplate.rar" 是一个包含了使用Spring框架、Spring MVC和JdbcTemplate实现的Web应用示例。这个压缩包可能包含了一系列的配置文件、源代码和数据库脚本,旨在展示如何整合这些...
配制Spring事务和JdbcTemplate使用 配制Spring事务和JdbcTemplate使用
它提供了一种模板方法模式,抽象出了一些常见的数据库访问任务,使得开发者无需关注低级的JDBC细节,如打开和关闭连接、处理结果集等,从而可以更加专注于业务逻辑。在本实例中,我们将探讨如何使用Spring ...
### Spring JdbcTemplate API:数据库操作的模板模式 #### 概述 在Spring框架中,`JdbcTemplate`是一个用于简化JDBC编程的工具类,它采用了模板模式来分离数据库访问中的不变和可变部分,提供了一种更加健壮且易于...
Spring框架提供了多种模板类来处理不同的数据访问需求,例如JdbcTemplate主要针对关系型数据库的操作。 在使用JdbcTemplate前,需要导入两个jar包: - spring-jdbc-4.2.4.RELEASE.jar:包含JdbcTemplate及与数据库...