测试
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&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连接 例子,入门级别,很有用的 ,新手可看
标题中的“Lucene+compass+spring+jdbc+庖丁的一个例子”揭示了这是一个关于整合多个技术来构建一个搜索系统的示例。在这个系统中,我们有以下几个关键组件: 1. **Lucene**: Apache Lucene 是一个高性能、全文本...
在这个"后台springBoot+jdbc例子"中,我们将探讨SpringBoot如何与Java数据库连接(JDBC)结合使用,实现数据的增删改查操作。 首先,让我们从项目结构开始。在"springBootDemo"这个项目中,我们通常会看到以下主要...
通过学习这个例子,开发者可以了解如何将Spring的灵活性和JDBC的强大数据库支持结合在一起,构建出高效、可扩展的Web服务。这将对理解和实施分布式系统、API开发和后端数据库操作有很大的帮助。
本文档主要讲解Spring与mybatis与jdbc结合使用的方法和例子。
总结来说,"dwr+springJdbc例子"展示了如何利用DWR实现实时的前后端交互,Spring提供依赖注入和数据访问抽象,而JDBC则负责与数据库的底层通信。这样的组合使得开发高效、灵活且易于维护的Web应用成为可能。理解并...
这个小例子为初学者提供了一个学习Struts2、Spring和JDBC整合的起点,通过实践,可以更好地理解和掌握这些技术的用法和它们之间的协作机制。对于进一步的进阶,可以考虑学习如何将Hibernate或MyBatis这样的ORM框架...
Mybatis则是一个轻量级的持久层框架,它解决了JDBC的繁琐代码问题,提供了更方便的SQL映射和对象关系映射。Mybatis允许开发者直接编写SQL,提高了查询效率和灵活性,同时通过XML或注解方式配置和映射原生信息,将...
在这个例子中,Ibatis的SqlMapConfig.xml文件将配置数据库连接和映射文件,Action类会调用Service层的方法,Service层通过Ibatis的SqlSession执行SQL。 整合这两个框架,开发者通常需要做以下工作: - 配置Struts2...
Spring还包含许多模块,如Spring JDBC、Spring ORM(支持Hibernate等ORM工具)、Spring MVC等,可以方便地集成其他框架。 3. **Struts**:是基于MVC(Model-View-Controller)设计模式的Web应用框架,主要用于处理...
在"struts+spring+hibernate简单登录的例子"中,我们可以看到一个基础的整合应用,它演示了如何将这三个框架集成到一起处理用户登录功能。下面我们将详细探讨这个例子中的关键知识点: 1. Struts框架:Struts是MVC...
同时,配合博客文章《Spring+SpringMVC+Mybatis框架整合例子》(链接:http://blog.csdn.net/zhshulin/article/details/37956105),读者可以按照教程逐步实践,加深对SSM整合的理解。 总之,SSM框架的整合使得...
Mybatis是一个优秀的持久层框架,它简化了JDBC的繁琐操作,支持SQL语句的动态编写,使得开发者可以直接使用SQL来操作数据库,同时还能保持数据访问的灵活性。Mybatis通过XML或注解方式配置映射文件,将Java对象与...
通过这个"spring+mybatis"的例子,我们可以学习如何将这两个框架集成,实现增删改查的基本操作。这涉及到创建数据库表、设计Java实体类、编写Mapper接口及XML映射文件、配置Spring和MyBatis的相关属性,以及在...
例如,可能需要包含Spring、Hibernate、Struts的核心库,以及与MySQL数据库连接相关的JDBC驱动。在MyEclipse这样的集成开发环境中,可以通过添加库或构建路径来解决这个问题。 在压缩包内的“test2”文件可能是项目...
4. **数据访问集成**:Spring 支持多种数据访问技术,包括JDBC、Hibernate、MyBatis等,提供了一致的编程模型和异常处理机制。 5. **事务管理**:Spring 提供了声明式和编程式事务管理,使得事务处理变得更加简单。...
【标题】:“使用IntelliJ IDEA搭建MAVEN+SSM(Spring+SpringMVC+MyBatis)项目” 【正文】 在Java开发领域,Spring、SpringMVC和MyBatis框架的组合,简称SSM,是构建Web应用程序的常用技术栈。IntelliJ IDEA作为...