Jdbc笔记 —— Spring的JdbcTemplate

JdbcTemplate

Spring对Jdbc操作做了封装,提供一个较为简单的实现 —— JdbcTemplate,使得开发人员的Jdbc操作更加简单方便

使用步骤

导入Spring的jar包

<properties>
     <java.version>1.8</java.version>
     <spring.version>5.2.6.RELEASE</spring.version>
</properties>
<!-- spring dependencies -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

创建JdbcTemplate对象

这个JdbcTemplate对象依赖于DataSource

使用JdbcTemplate

调用方法来完成数据库操作

  1. update() 进行DML操作,增删改
  2. query() 可以传入一个sql字符串,以及一个RowMapper对象,可以使用Spring提供的RowMapper实现 —— BeanPropertyRowMapper。更方便的进行JavaBean封装
  3. queryForMap() 注意这个方法期望返回值只有1条记录
  4. queryForList() 将每一行记录封装成一个Map,再把所有Map塞到一个List里
  5. queryForObject 常用于聚合操作

代码示例

private JdbcTemplate jdbcTemplate;

@Before
public void init(){
    
    
	//创建JdbcTemplate,只需要传入一个DataSource即可
	jdbcTemplate = new JdbcTemplate(DruidUtil.getDataSource());
}
@Test
public void testUpdate(){
    
    
	//JdbcTemplate会自动调用DataSource创建链接
	//查询完毕后会自动释放连接,这样代码就变得简洁了许多
	String sql = "UPDATE product SET price = ? WHERE name = ?";
	int i = jdbcTemplate.update(sql, 450, "日炎斗篷");
	System.out.println(i + " rows affected");
}
//执行结果
//1 rows affected
@Test
public void testSelect(){
    
    
	String sql = "SELECT * FROM product WHERE id = 1";
	//注意queryForMap方法期望只返回一行记录
	//若没有返回,或返回的记录数大于1,则会报错
	Map<String, Object> result = jdbcTemplate.queryForMap(sql);
    System.out.println(result);
}
//执行结果
/**
{id=1, name=无尽之刃, price=3600.00, seller_id=99, buyer_id=101}
**/
@Test
public void testQueryForList(){
    
    
	String sql = "SELECT * FROM product";
	List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
	for (Map map : maps){
    
    
		System.out.println(map);
	}
}
/***执行结果
{id=1, name=无尽之刃, price=3600.00, seller_id=99, buyer_id=101}
{id=2, name=最后的轻语, price=2300.00, seller_id=null, buyer_id=null}
{id=3, name=日炎斗篷, price=450.00, seller_id=null, buyer_id=null}
{id=4, name=破败王者之刃, price=2000.00, seller_id=null, buyer_id=null}
{id=5, name=狂徒铠甲, price=22000.00, seller_id=null, buyer_id=null}
**/
//query方法可以传入一个RowMapper参数,用于封装数据,当然也可以用lambda表达式
@Test
public void TestQuery(){
    
    
	String sql = "SELECT * FROM product";
	List<Product> productList = jdbcTemplate.query(sql, new RowMapper<Product>() {
    
    
		@Override
		public Product mapRow(ResultSet resultSet, int i) throws SQLException {
    
    
			int id = resultSet.getInt("id");
			String name = resultSet.getString("name");
			double price = resultSet.getDouble("price");
			int seller_id = resultSet.getInt("seller_id");
			int buyer_id = resultSet.getInt("buyer_id");
			return new Product(id, name, price, seller_id, buyer_id);
		}
	});
	System.out.println(productList.size());
}
//执行结果
//5
//可以用Spring提供好的RowMapper实现类

@Test
public void testQuery2(){
    
    
	String sql = "SELECT * FROM product";
	List<Product> productList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Product>(Product.class));
	System.out.println(productList.size());		
	productList.stream().forEach(System.out::println);
}
@Test
public void testQueryForObject(){
    
    
    //queryForObject一般来用执行一些聚合函数
	String sql = "SELECT count(1) FROM product";
	Long aLong = jdbcTemplate.queryForObject(sql, Long.class);
	System.out.println(aLong);
}

猜你喜欢

转载自blog.csdn.net/vcj1009784814/article/details/106131780