`

Spring+jdbc的例子

阅读更多
测试
package tarena.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import tarena.dao.BookDao;
import tarena.domain.Book;

public class BookDaoTest {

	public static void main(String[] args) {
		ApplicationContext txt = new ClassPathXmlApplicationContext("applicationContext.xml");
		BookDao dao = (BookDao) txt.getBean("bookDao");
		
		Book book = new Book("hibernate core",560);
		//book.setId(1);
		dao.save(book);
               //测试id是否生成并返回
		System.out.println(book.getId());
	//	dao.update(book);
	
		//System.out.println(	dao.findById(1).getName());
	//	dao.delete(3);
		List list = dao.findByPrice(10, 3000);
		for (Object object : list) {
			Book b = (Book)object;
			System.out.println(b.getId()+":"+b.getName()+":"+b.getPrice());
		}
	}
}

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

	<!--配置数据源-->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName">
			<value>com.mysql.jdbc.Driver</value>
		</property>
		<property name="url">
			<value>
				jdbc:mysql://localhost:3306/openlab?useUnicode=true&amp;characterEncoding=utf8
			</value>
		</property>
		<property name="username" value="openlab" />
		<property name="password" value="open123" />
	</bean>
	
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
	<bean id="bookDao" class="tarena.dao.jdbc.BookDaoImpl">
		<constructor-arg ref="jdbcTemplate"></constructor-arg>
	</bean>
	
	</beans>

BookDao接口
package tarena.dao;

import java.util.List;
import tarena.domain.Book;
public interface BookDao {
	void save(Book book);
	void update(Book book);
	void delete(int id);
	Book findById(int id);
	List findByPrice(double from, double to);
}

Spring提供的jdbcTemplate实现
package tarena.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;

import tarena.dao.BookDao;
import tarena.domain.Book;

public class BookDaoImpl implements BookDao {

	private JdbcTemplate jt;

	public BookDaoImpl() {
		super();
	}

	public BookDaoImpl(JdbcTemplate jt) {
		super();
		this.jt = jt;
	}

	public void delete(int id) {
		String sql = "delete from book where id=?";
		jt.update(sql, new Object[] { id });
	}

	public Book findById(final int id) {
		String sql = "select * from book where id=?";
		return (Book) jt.query(sql, new Object[] { id },
				new ResultSetExtractor() {
					public Object extractData(ResultSet rs)
							throws SQLException, DataAccessException {
						//查询返回的rs要自己来处理,因为查询的条件不同,返回结果集也不同
						if (rs.next()) {
							String name = rs.getString("name");
							double price = rs.getDouble("price");
							return new Book(id, name, price);
						}
						return null;
					}
				});
	}

	public List findByPrice(double from, double to) {
		String sql = "select * from book where price between ? and ?";
		return jt.query(sql, new Object[] { from, to }, new RowMapper() {
			//自动将每条记录封装到集合中去
			public Object mapRow(ResultSet rs, int arg1) throws SQLException {
				int id = rs.getInt("id");
				String name = rs.getString("name");
				double price = rs.getDouble("price");
				return new Book(id, name, price);
			}
		});
	}

	public void save(final Book book) {
		final String sql = "insert into book(name,price) values(?,?)";
		//jdbc要由自己来预编译创建定义preparedStatement因为这其中,是要取得数据库自动生成的id
		PreparedStatementCreator psc = new PreparedStatementCreator(){
			public PreparedStatement createPreparedStatement(Connection conn) throws SQLException {
				PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
				ps.setString(1, book.getName());
				ps.setDouble(2, book.getPrice());
				return ps;
			}
		};
		KeyHolder keyHolder = new GeneratedKeyHolder();
		jt.update(psc, keyHolder);
		//通过keyHolder来获取id序列
		long idkey = (Long) keyHolder.getKey();
		book.setId((int)idkey);
	}

	public void update(Book book) {
		String sql = "update book set name=?,price=? where id=?";
		jt.update(sql, new Object[] { book.getName(), book.getPrice(),
				book.getId() });
	}

}


pojo类
package tarena.domain;

public class Book {

	private int id;
	private String name;
	private double price;
	
	
	public Book() {
		super();
	}
	public Book(String name, double price) {
		super();
		this.name = name;
		this.price = price;
	}
	public Book(int id, String name, double price) {
		super();
		this.id = id;
		this.name = name;
		this.price = price;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
}

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring + jdbc连接

    Spring + jdbc连接 例子,入门级别,很有用的 ,新手可看

    Lucene+compass+spring+jdbc+庖丁的一个例子

    标题中的“Lucene+compass+spring+jdbc+庖丁的一个例子”揭示了这是一个关于整合多个技术来构建一个搜索系统的示例。在这个系统中,我们有以下几个关键组件: 1. **Lucene**: Apache Lucene 是一个高性能、全文本...

    后台springBoot+jdbc例子

    在这个"后台springBoot+jdbc例子"中,我们将探讨SpringBoot如何与Java数据库连接(JDBC)结合使用,实现数据的增删改查操作。 首先,让我们从项目结构开始。在"springBootDemo"这个项目中,我们通常会看到以下主要...

    webservice源代码Spring+JDBC

    通过学习这个例子,开发者可以了解如何将Spring的灵活性和JDBC的强大数据库支持结合在一起,构建出高效、可扩展的Web服务。这将对理解和实施分布式系统、API开发和后端数据库操作有很大的帮助。

    Spring+mybatis+jdbc结合使用教程

    本文档主要讲解Spring与mybatis与jdbc结合使用的方法和例子。

    dwr+springJdbc例子

    总结来说,"dwr+springJdbc例子"展示了如何利用DWR实现实时的前后端交互,Spring提供依赖注入和数据访问抽象,而JDBC则负责与数据库的底层通信。这样的组合使得开发高效、灵活且易于维护的Web应用成为可能。理解并...

    struts+spring+jdbc

    这个小例子为初学者提供了一个学习Struts2、Spring和JDBC整合的起点,通过实践,可以更好地理解和掌握这些技术的用法和它们之间的协作机制。对于进一步的进阶,可以考虑学习如何将Hibernate或MyBatis这样的ORM框架...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    Mybatis则是一个轻量级的持久层框架,它解决了JDBC的繁琐代码问题,提供了更方便的SQL映射和对象关系映射。Mybatis允许开发者直接编写SQL,提高了查询效率和灵活性,同时通过XML或注解方式配置和映射原生信息,将...

    Struts2+Spring+Hibernate和Struts2+Spring+Ibatis

    在这个例子中,Ibatis的SqlMapConfig.xml文件将配置数据库连接和映射文件,Action类会调用Service层的方法,Service层通过Ibatis的SqlSession执行SQL。 整合这两个框架,开发者通常需要做以下工作: - 配置Struts2...

    hibernate+spring+struts一个简单例子

    Spring还包含许多模块,如Spring JDBC、Spring ORM(支持Hibernate等ORM工具)、Spring MVC等,可以方便地集成其他框架。 3. **Struts**:是基于MVC(Model-View-Controller)设计模式的Web应用框架,主要用于处理...

    struts+spring+hibernate例子

    在"struts+spring+hibernate简单登录的例子"中,我们可以看到一个基础的整合应用,它演示了如何将这三个框架集成到一起处理用户登录功能。下面我们将详细探讨这个例子中的关键知识点: 1. Struts框架:Struts是MVC...

    Spring+SpringMVC+Mybatis框架整合例子(SSM)

    同时,配合博客文章《Spring+SpringMVC+Mybatis框架整合例子》(链接:http://blog.csdn.net/zhshulin/article/details/37956105),读者可以按照教程逐步实践,加深对SSM整合的理解。 总之,SSM框架的整合使得...

    Spring+SpringMVC+Mybatis框架整合例子——亲测可用.zip

    Mybatis是一个优秀的持久层框架,它简化了JDBC的繁琐操作,支持SQL语句的动态编写,使得开发者可以直接使用SQL来操作数据库,同时还能保持数据访问的灵活性。Mybatis通过XML或注解方式配置映射文件,将Java对象与...

    spring+mybatis例子

    通过这个"spring+mybatis"的例子,我们可以学习如何将这两个框架集成,实现增删改查的基本操作。这涉及到创建数据库表、设计Java实体类、编写Mapper接口及XML映射文件、配置Spring和MyBatis的相关属性,以及在...

    spring+hibernate+struts例子

    例如,可能需要包含Spring、Hibernate、Struts的核心库,以及与MySQL数据库连接相关的JDBC驱动。在MyEclipse这样的集成开发环境中,可以通过添加库或构建路径来解决这个问题。 在压缩包内的“test2”文件可能是项目...

    spring+springMvc 例子

    4. **数据访问集成**:Spring 支持多种数据访问技术,包括JDBC、Hibernate、MyBatis等,提供了一致的编程模型和异常处理机制。 5. **事务管理**:Spring 提供了声明式和编程式事务管理,使得事务处理变得更加简单。...

    使用intellij idea搭建MAVEN+SSM(Spring+SpringMVC+MyBatis

    【标题】:“使用IntelliJ IDEA搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)项目” 【正文】 在Java开发领域,Spring、SpringMVC和MyBatis框架的组合,简称SSM,是构建Web应用程序的常用技术栈。IntelliJ IDEA作为...

Global site tag (gtag.js) - Google Analytics