(十四)JdbcTemplate--查

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangshangchunjiezi/article/details/88862897

queryForObject:返回一个对象

一、Spring中的RowMapper

sping中的RowMapper可以将数据中的每一行数据封装成用户定义的类

我们在数据库查询中,如果返回的类型是用户自定义的类型(其实我们在数据库查询中大部分返回的都是自定义的类)则需要包装,如果是Java自定义的类型,如:String。

1.1 自定义RowMapper

在一般情况下,它总是建议实现 RowMapper 接口来创建自定义的RowMapper,以满足您的需求。

package com.gp6.jdbc.template.rowMapper.bean;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

@SuppressWarnings("rawtypes")
public class CustomerRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        Customer customer = new Customer();
        customer.setCustId(rs.getInt("CUST_ID"));
        customer.setName(rs.getString("NAME"));
        customer.setAge(rs.getInt("AGE"));
        return customer;
    }
}

它传递给 queryForObject()方法,返回的结果将调用自定义 mapRow()方法的值匹配到属性。

 public Customer findByCustomerId(int custId){
         
        String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";
     
        Customer customer = (Customer)getJdbcTemplate().queryForObject(
                sql, new Object[] { custId }, new CustomerRowMapper());
            
        return customer;
    }

二、 BeanPropertyRowMapper

在Spring2.5中,带有一个方便 RowMapper 实现所谓“BeanPropertyRowMapper”,它可以通过匹配行的名字的列值映射到一个属性。只要确保这个属性和列具有相同的名称,如属性“CUSTID'将匹配到列名为:”CUSTID'或下划线“CUST_ID”。


public Customer findByCustomerId2(int custId){
         
    String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";
 
    Customer customer = (Customer)getJdbcTemplate().queryForObject(
            sql, new Object[] { custId }, 
            new BeanPropertyRowMapper(Customer.class));
    
    return customer;
}

三、query返回一个集合

  /**
     * 功能:查询返回对象集合
     * 步骤:新建MyRowMapper类实现RowMapper接口,重写mapRow方法,指定返回User对象
     */
    public static void queryForList(JdbcTemplate jdbcTemplate) {
        String sql = "select * from user";
//        第三个参数可以省略
        List<User> users = jdbcTemplate.query(sql, new MyRowMapper());
        System.out.println(users);
    }
 

四、queryForList返回一个集合 (但不支持 RowMapper),所以获得list列表后,要手动映射

public List<Customer> findAll(){
		
	String sql = "SELECT * FROM CUSTOMER";
		 
	List<Customer> customers = new ArrayList<Customer>();
	
	List<Map> rows = getJdbcTemplate().queryForList(sql);
	for (Map row : rows) {
		Customer customer = new Customer();
		customer.setCustId((Long)(row.get("CUST_ID")));
		customer.setName((String)row.get("NAME"));
		customer.setAge((Integer)row.get("AGE"));
		customers.add(customer);
	}
		
	return customers;
}

五、BeanPropertyRowMapper获取多行数据

public List<Customer> findAll(){
		
	String sql = "SELECT * FROM CUSTOMER";
		
	List<Customer> customers  = getJdbcTemplate().query(sql,
			new BeanPropertyRowMapper(Customer.class));
		
	return customers;
}

六、查询单值

单列名

public String findCustomerNameById(int custId){
		
	String sql = "SELECT NAME FROM CUSTOMER WHERE CUST_ID = ?";
		 
	String name = (String)getJdbcTemplate().queryForObject(
			sql, new Object[] { custId }, String.class);
	
	return name;
		
}

猜你喜欢

转载自blog.csdn.net/jiangshangchunjiezi/article/details/88862897