目录
Spring框架的JDBC模板技术
Spring框架的JDBC模板技术概述
演示JDBC的模板类
使用Spring框架来管理模板类
Spring框架管理开源的连接池
Spring框架的JDBC模板的简单操作
查询一条或多条记录的另外一种封装方式 BeanPropertyRowMapper
继承 Spring提供的 JdbcDaoSupport 类
1. Spring框架中提供了很多持久层的模板类来简化编程,使用模板类编写程序会变的简单 2. 提供了JDBC模板,Spring框架提供的 * JdbcTemplate类 类似我们之前学习的一个工具类dbutils 里面的QueryRunner 3. Spring框架可以整合Hibernate或MyBatis 框架,也提供了模板类 * HibernateTemplate类
1. 步骤一:创建数据库的表结构 create database spring_day03; use spring_day03; create table t_account( id int primary key auto_increment, name varchar(20), money double ); 2. 引入开发的jar包 * 先引入IOC基本的6个jar包 com.springsource.org.apache.commons.logging-1.1.1.jar com.springsource.org.apache.log4j-1.2.15.jar spring-beans-5.0.2.RELEASE.jar spring-context-5.0.2.RELEASE.jar spring-core-5.0.2.RELEASE.jar spring-expression-5.0.2.RELEASE.jar * 再引入Spring-aop的jar包 spring-aop-5.0.2.RELEASE.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar spring-aspects-5.0.2.RELEASE.jar * 最后引入JDBC模板需要的jar包 * MySQL数据库的驱动jar包 * spring-jdbc-5.0.2.RELEASE.jar * spring-tx-5.0.2.RELEASE.jar * 想要做测试再引入一个测试的包 spring-test-5.0.2.RELEASE.jar
** 当然如果是Maven项目,我们只需要在pom.xml 文件中添加所需jar包的坐标org.springframework spring-context 5.0.2.RELEASE org.aspectj aspectjweaver 1.8.7 junit junit 4.12 org.springframework spring-test 5.0.2.RELEASE org.springframework spring-jdbc 5.0.2.RELEASE org.springframework spring-tx 5.0.2.RELEASE mysql mysql-connector-java 5.1.6
3.编写测试代码(自己来new对象的方式,不用加载配置文件) @Test public void run1(){ // 创建连接池,先使用Spring框架内置的连接池 DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl("jdbc:mysql:///spring_day03"); dataSource.setUsername("root"); dataSource.setPassword("123456"); // 创建模板类 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); //参数要一个连接池,可以使用Spring内置的链接池,可以使用第三方的 例如 C3P0,DBCP // 完成数据的添加 jdbcTemplate.update("insert into t_account values (null,?,?)", "测试",10000); }
1. 刚才编写的代码使用的是new的方式,应该把这些类交给Spring框架来管理。 2. 修改的步骤如下 * 步骤一:Spring管理内置的连接池* 步骤二:Spring管理模板类 * 步骤三:编写测试程序 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class Demo2 { @Resource(name="jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test public void run2(){ jdbcTemplate.update("insert into t_account values (null,?,?)", "测试2",10000); } }
1. 管理DBCP连接池 * 先引入DBCP的2个jar包 在我们下载的Spring开发包中的依赖文件夹中可以找到这两个jar包 资料\spring-framework-3.0.2.RELEASE-dependencies 这个依赖的文件夹中找到DBCP的两个jar包 * com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar * com.springsource.org.apache.commons.pool-1.5.3.jar * 如果是Maven项目添加DBCP的jar包坐标org.apache.commons com.springsource.org.apache.commons.pool 1.5.3 * 编写配置文件 commons-dbcp commons-dbcp 1.2.2 2. 管理C3P0连接池 * 先引入C3P0的jar包 在 资料\spring-framework-3.0.2.RELEASE-dependencies 这个依赖的文件夹中找到C3P0这个jar包 * com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar * 如果是Maven项目,添加c3p0的jar包坐标 * 编写配置文件 com.mchange c3p0 0.9.2.1 com.alibaba druid 1.1.10
1. 增删改查的操作 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class SpringDemo3 { @Resource(name="jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test // 插入操作 public void demo1(){ jdbcTemplate.update("insert into account values (null,?,?)", "冠希",10000d); } @Test // 修改操作 public void demo2(){ jdbcTemplate.update("update account set name=?,money =? where id = ?", "思雨",10000d,5); } @Test // 删除操作 public void demo3(){ jdbcTemplate.update("delete from account where id = ?", 5); } @Test // queryForObject()方法 查询一条记录 也就是返回一行记录 写一个JavaBean 然后查询一条数据,帮你封装进这个JavaBean public void demo4(){ Account account = jdbcTemplate.queryForObject("select * from account where id = ?", new BeanMapper(), 1); System.out.println(account); } @Test // 查询所有记录 使用query方法 直接返回一个集合 这个集合装有所有记录 public void demo5(){ Listlist = jdbcTemplate.query("select * from t_account", new BeanMapper()); for (Account account : list) { System.out.println(account); } } @Test public void findAll() { List
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate"); //我们查询出来的数据直接封装到JavaBean里面,然后再放到集合中 //那么我们可以使用BeanPropertyRowMapper 来做 Listlist = jdbcTemplate.query("select * from account where id=?", new BeanPropertyRowMapper (Account.class), 4); System.out.println(list);
public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao { //在继承了JdbcDaoSupport后,我们就可以不需要再dao里面注入jdbcTemplate而是从父类获取一个用 /* private JdbcTemplate jdbcTemplate; @Override public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }*/ public ListfindAll() { List query = super.getJdbcTemplate().query("select * from account", new BeanPropertyRowMapper (Account.class)); return query; } } 上面的dao继承了 JdbcDaoSupport 后,我们可以通过getJdbcTemplate()来获取一个JdbcTemplate对象 那么配置文件中就可以直接注入数据源 注入数据源,那么父类JdbcDaoSupport就会创建JDBCTemplate 在继承了JdbcDaoSupport我们就不需要注入jdbcTemplate了