Spring JdbcTemplate查询实例

这里有几个例子向您展示如何使用JdbcTemplate的query()方法来查询或从数据库提取数据。整个项目的目录结构如下:
1.查询单行数据
这里有两种方法来查询或从数据库中提取单行记录,并将其转换成一个模型类。
1.1 自定义RowMapper

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

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

import org.springframework.jdbc.core.RowMapper;

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;

}
1.2 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;

}
2,查询多行
现在,查询或从数据库中提取多行,并且将它转换成一个列表。
2.1手动映射它
返回多行,RowMapper 不支持 queryForList()方法,需要手动映射它。
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;

}
2.2 BeanPropertyRowMapper

最简单的解决方案是使用 BeanPropertyRowMapper 类。
public List<Customer> findAll(){

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

}
3.查询单值
在这个例子中,展示了如何从数据库中查询或提取单个列值。
3.1单列名
它显示了如何查询单个列名作为字符串。
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;

}
3.2、行总数
它展示了如何从数据库中查询行的总数。
public int findTotalCustomer(){

String sql = "SELECT COUNT(*) FROM CUSTOMER";
     
int total = getJdbcTemplate().queryForInt(sql);
            
return total;

}
运行它

package com.yiibai.common;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.yiibai.customer.dao.CustomerDAO;
import com.yiibai.customer.model.Customer;

public class JdbcTemplateApp
{
public static void main( String[] args )
{
ApplicationContext context =
new ClassPathXmlApplicationContext("Spring-Customer.xml");

     CustomerDAO customerDAO = (CustomerDAO) context.getBean("customerDAO");

     Customer customerA = customerDAO.findByCustomerId(1);
     System.out.println("Customer A : " + customerA);
     
     Customer customerB = customerDAO.findByCustomerId2(1);
     System.out.println("Customer B : " + customerB);
     
     List<Customer> customerAs = customerDAO.findAll();
     for(Customer cust: customerAs){
         System.out.println("Customer As : " + customerAs);
     }
    
     List<Customer> customerBs = customerDAO.findAll2();
     for(Customer cust: customerBs){
         System.out.println("Customer Bs : " + customerBs);
     }
     
     String customerName = customerDAO.findCustomerNameById(1);
     System.out.println("Customer Name : " + customerName);
     
     int total = customerDAO.findTotalCustomer();
     System.out.println("Total : " + total);
     
}

}
总结

JdbcTemplate类,附带了很多有用的重载查询方法。它提醒参考现有的查询方法在创建自己的自定义查询方法之前,因为 Spring 已经做给你了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,578评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,734评论 18 399
  • 那天树枝突挂红带 你一声叹息穿过荆棘坟场 骇俗之气冲破绝望之河 不带一句原谅的决然离别 我该是一个演员 成为地球仰...
    AJMMMM阅读 242评论 1 2
  • 春天来了,风妈妈带着风儿去春游。风儿只顾着自己玩,把妈妈忘记了。 太阳回家了,月亮也回家了。风儿着急得想哭的时候,...
    窗边的小杜杜阅读 852评论 0 0
  • 10月末就已然嗅到了远处买买买的吆喝声 从当当和京东的图书100减50 从国外万圣节的欢乐go go 虽说无用消费...
    TS小西阅读 129评论 1 0

友情链接更多精彩内容