Spring的数据库开发

1 Spring JDBC

1.1 JDBC

  一般JDBC连接数据库步骤:

  相比之下,Spring的JDBC模块负责数据库资源管理和错误处理,简化了开发人员对数据库的操作,这样使得开发人员将专注点放在业务逻辑的实现上。

1.2 Spring JdbcTemplate的解析

  针对数据库的操作,Spring框架提供了JdbcTemplate类,这个类是Spring框架数据抽象层的基础,也是Spring JDBC的核心类。继承了抽象类jdbcAccessor,实现了JdbcOperations接口。
  JdbcTemplate类的直接父类是JdbcAccessor ,该类提供了一些访问数据库时使用的公共属性:

  1. DataSource :其主要功能是获取数据库连接,还可以引入对数据库连接的缓冲池和分布式事务的支持,它可以作为访问数据库资源的标准接口。
  2. SQLExceptionTranslator :该接口负责对SQLException进行转译工作。通过必要的设置获取SQLExceptionTranslator中的方法,可以使JdbcTemplate在需要处理SQLException时, 委托SQLExceptionTranslator的实现类来完成相关的转译工作。

  JdbcOperations接口定义了在JdbcTemplate类中可以使用的操作集合。如:添加、修改、查询和删除等操作。

1.3 Spring JDBC的配置

  Spring JDBC模块主要由4个包组成,分别是core (核心包)、dataSource (数据源包)、object (对象包)和support (支持包)。描述如下:

  配置文件:

1.3.1 利用property-placeholder提取数据库配置参数

  将配置参数提取到jdbc.properties文件中,建议使用这种方法。还可以考虑加密,在配置文件中不以明文形式存储。

2 Spring JdbcTemplate的常用方法

  在JdbcTemplate核心类中,提供了大量的更新和查询数据库的方法,使用这些方法可以方便地操作数据库。

  • execute():用于执行sql语句。
  • update():执行插入、更新和 删除操作。
  • query():用于数据查询操作。

2.1 execute

  执行sql语句:

//测试创建表
	@Test
	public void mainTest() {
		// 加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 获取JdbcTemplate实例
		JdbcTemplate jdTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
		// 使用execute()方法执行SQL语句,创建用户账户管理表account
		jdTemplate.execute("create table account(" + "id int primary key auto_increment," + "username varchar(50),"
				+ "balance double)");
		System.out.println("账户表account创建成功!");
	}

2.2 update

  update()方法可以完成插入、 更新和删除数据的操作。在JdbcTemplate类中,提供了一系列的update()方法,其常用方法如下所示:

使用例子:
//更新账户
	public int updateAccount(Account account) {
		//定义SQL语句
		String sql="update account set username=?,balance=? where id = ?";
		//定义数组来存放SQL语句中的参数
		Object[] params =new Object[] {account.getUsername(),account.getBalance(),account.getId()};
		//执行SQL语句,返回受影响的记录条数
		int num = this.jdbcTemplate.update(sql,params);
		return num;
	}

2.3 query

  常用几个query方法:

使用实例:
//查询所有账户信息
	public List<Account> findAllAccount() {
		// TODO Auto-generated method stub
		//定义SQL语句
		String sql="select * from account";
		//创建一个新的BeanPropertyRowMapper对象
		RowMapper<Account>rowMapper=new BeanPropertyRowMapper<Account>(Account.class);
		//执行查询,通过RowMapper返回结果
		return this.jdbcTemplate.query(sql,rowMapper);
	}

3 JUnit测试

  在软件开发过程中,需要有相应的测试工作。依据测试目的不同,可以将软件测试分为单元测试、集成测试、确认测试和系统测试等。其中单元测试在软件开发阶段是最底层的测试,它易于及时发现并解决问题。JUnit就是一个进行单元测试的开源框架。
使用实例:

package cn.edu.ujn.ch4.jdbc;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

//以什么样的方式运行
@RunWith(SpringJUnit4ClassRunner.class)
//指定Spring的配置文件
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class AccountDaoImplTest {
	@Autowired
//注入一个实例
//对于注入实例,还有一种方法就是在每个**Test()方法中都使用加载配置文件的方式,会比较繁琐
//附上代码:
//	  加载配置文件
//    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//    获取AccountDao实例
//    AccountDao accountDao =(AccountDao) applicationContext.getBean("accountDao");

	private IAccountDao accountTest;

//注意:一定要在测试方法前加上@Test,不然会报错(no runable mathod),而且Test的T要大写

//测试创建表
	@Test
	public void mainTest() {
		// 加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		// 获取JdbcTemplate实例
		JdbcTemplate jdTemplate = (JdbcTemplate) applicationContext.getBean("jdbcTemplate");
		// 使用execute()方法执行SQL语句,创建用户账户管理表account
		jdTemplate.execute("create table account(" + "id int primary key auto_increment," + "username varchar(50),"
				+ "balance double)");
		System.out.println("账户表account创建成功!");
	}
}

注意注解@RunWith和@ContextConfiguration的使用。


声明:
若本人发布的作品涉及版权或存在其他问题,请联系我删除。
谢谢浏览!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值