Spring:JDBCTemplate

JDBCTemplate

Spring框架针对javaee三层结构中,每一层都有解决技术,在dao层使用JDBCTemplate。

Spring对不同的持久化层技术都进行封装

JDBCTemplate使用,对数据库进行CRUD操作

第一步:导入JDBCTemplate使用的jar包,连接数据库jar包

第二步:创建对象,设置数据库信息

// 设置数据库信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");// 数据库驱动
dataSource.setUrl("jdbc:mysql:///cc1");// 数据库名称
dataSource.setUsername("root");// 用户名
dataSource.setPassword("666");// 密码

第三步:创建JDBCTemplate对象,设置数据源

// 创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

第四步:调用JDBCTemplate对象里面的方法实现操作

添加

@Test
public void add() {

	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "insert into cla values(?,?)";
	int rows = jdbcTemplate.update(sql, 1, "一班");
	System.out.println(rows);
}

删除

@Test
public void delete() {

	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "delete from cla where cid=?";
	int rows = jdbcTemplate.update(sql, 1);
	System.out.println(rows);
}

修改

@Test
public void update() {

	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "update cla set cname=? where cid=?";
	int rows = jdbcTemplate.update(sql, "武力", 1);
	System.out.println(rows);
}

查询总条数

@Test
public void retrieveCount() {

	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "select count(*) from cla";
	int count = jdbcTemplate.queryForObject(sql, Integer.class);
	System.out.println(count);
}

查询对象

@Test
public void retrieveObject() {
	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "select * from cla where cid=?";
	// 第二个参数是接口 RowMapper,需要自己写类实现接口,自己做数据封装
	Cla cla = jdbcTemplate.queryForObject(sql, new MyRowMapper(), 1);
	System.out.println(cla.getCname());
}
class MyRowMapper implements RowMapper<Cla> {

	@Override
	public Cla mapRow(ResultSet rs, int num) throws SQLException {
		// 1 从结果集里面把数据得到
		Integer cid = rs.getInt("cid");
		String cname = rs.getString("cname");

		// 2 把得到数据封装到对象里面
		Cla cla = new Cla();
		cla.setCid(cid);
		cla.setCname(cname);
		return cla;
	}
}
private Integer cid;
private String cname;

查询list集合

@Test
public void retrieveList() {
	// 设置数据库信息
	DriverManagerDataSource dataSource = new DriverManagerDataSource();
	dataSource.setDriverClassName("com.mysql.jdbc.Driver");
	dataSource.setUrl("jdbc:mysql:///cc1");
	dataSource.setUsername("root");
	dataSource.setPassword("666");

	// 创建jdbcTemplate对象,设置数据源
	JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

	// 调用jdbcTemplate对象里面的方法实现操作
	String sql = "select * from cla";
	List<Cla> list = jdbcTemplate.query(sql, new MyRowMapper());
	for (Cla cla : list) {
		System.out.println(cla.getCname());
	}
}
class MyRowMapper implements RowMapper<Cla> {

	@Override
	public Cla mapRow(ResultSet rs, int num) throws SQLException {
		// 1 从结果集里面把数据得到
		Integer cid = rs.getInt("cid");
		String cname = rs.getString("cname");

		// 2 把得到数据封装到对象里面
		Cla cla = new Cla();
		cla.setCid(cid);
		cla.setCname(cname);
		return cla;
	}
}

查询操作

查询带有参数的行映射方法:

public Object queryForObject(String sql, Object[] args, RowMapper rowMapper)

咱们上面是使用自定义的UserRowMapper完成映射,RowMapper的常用实现还有BeanPropertyRowMapper,该实现可将结果集转换成一个JavaBean(字段名与Java Bean属性名不符合规范,可用别名处理)。如下:

Object user = jdbc.queryForObject(sql, args, new BeanPropertyRowMapper(User.class));

查询方法区别

public <T> queryForObject(String sql, Class<T> requiredType) //返回单行单列数据

public List<T> queryForList(String sql, Class<T> requiredType) //返回多行单列数据

public Map<String, Object> queryForMap(String sql) //返回map形式的单行数据(key:字段名或别名,value:列值)
public <T> queryForObject(String sql, RowMapper<T> rowMapper) //返回单行数据

public List<T> query(String sql, RowMapper<T> rowMapper) //返回多行数据,一个list集合封装多个对象,通过get方法获取属性

JDBC和JDBCTemplate查询时区别

QueryRunner runner = new QueryRuner(datasource);
runner.query(sql, new BeanHandler<User>(User.class));// 返回对象
runner.query(sql, new BeanListHander<User>(User.class));// 返回list集合

在dbutils时候,有接口 ResultSetHandler,dbutils提供了针对不同的结果实现类;

jdbcTemplate实现查询,有接口 RowMapper,jdbcTemplate针对这个接口没有提供实现类,得到不同的类型数据需要自己进行数据封装。

原文链接:加载失败,请重新获取