近日系统有一个打印采购单的功能,发现连续打印多张后,主机宕机,看了下service和dao层的实现,很繁杂,估计原因主要出在组页面资料的时候,循环套循环导致效能下降,然后想想有什么办法可以减少组资料时的一些对象转换,dao层取回来的是map,然后还要转换成vo,然后又循环组资料,google下资料,发现jdbctemplate查询还有个query方法,可以直接在查好后返回你需要的vo,改好上线,不知道对效能有没有帮助,不过这个做法感觉不错,特把文章贴在blog里面,以备后用,呵呵
在内部建立内联类实现RowMapper接口
- package hysteria.contact.dao.impl;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Types;
- import java.util.List;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.jdbc.core.RowMapper;
- import hysteria.contact.dao.ItemDAO;
- import hysteria.contact.domain.Item;
- public class ItemDAOImpl implements ItemDAO {
- private JdbcTemplate jdbcTemplate;
- public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- }
- public Item insert(Item item) {
- String sql = "INSERT INTO items(user_id,name,phone,email) VALUES(?,?,?,?)";
- Object[] params = new Object[]{item.getUserId(),item.getName(),item.getPhone(),item.getEmail()};
- int[] types = new int[]{Types.INTEGER,Types.VARCHAR,Types.CHAR,Types.VARCHAR};
- jdbcTemplate.update(sql,params,types);
- return item;
- }
- public Item update(Item item) {
- String sql = "UPDATE items SET name = ?, phone = ?, email = ? WHERE id = ?";
- Object[] params = new Object[] {item.getName(),item.getPhone(),item.getEmail(),item.getId()};
- int[] types = new int[] {Types.VARCHAR,Types.CHAR,Types.VARCHAR,Types.VARCHAR,Types.INTEGER};
- jdbcTemplate.update(sql,params,types);
- return item;
- }
- public void delete(Item item) {
- String sql = "DELETE FROM items WHERE id = ?";
- Object[] params = new Object[] {item.getId()};
- int[] types = new int[]{Types.INTEGER};
- jdbcTemplate.update(sql,params,types);
- }
- public Item findById(int id) {
- String sql = "SELECT * FROM items WHERE id = ?";
- Object[] params = new Object[] {id};
- int[] types = new int[] {Types.INTEGER};
- List items = jdbcTemplate.query(sql,params,types,new ItemMapper());
- if(items.isEmpty()){
- return null;
- }
- return (Item)items.get(0);
- }
- public List<Item> findAll() {
- String sql = "SELECT * FROM items";
- return jdbcTemplate.query(sql,new ItemMapper());
- }
- public List<Item> findAllByUser(int user_id) {
- String sql = "SELECT * FROM items WHERE user_id = ?";
- Object[] params = new Object[]{user_id};
- int[] types = new int[]{Types.INTEGER};
- List items = jdbcTemplate.query(sql,params,types,new ItemMapper());
- return items;
- }
- protected class ItemMapper implements RowMapper {
- public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
- Item item = new Item();
- item.setId(rs.getInt("id"));
- item.setUserId(rs.getInt("user_id"));
- item.setName(rs.getString("name"));
- item.setPhone(rs.getString("phone"));
- item.setEmail(rs.getString("email"));
- return item;
- }
- }
- }
相关推荐
spring JdbcTemplate query方法使用示例,欢迎下载借鉴
本文将深入探讨Spring JdbcTemplate的常用方法,并结合提供的`JsonBean.java`和`JdbcUtils.java`文件,来理解其在实际应用中的使用。 首先,JdbcTemplate的核心功能在于它提供了一系列的方法来执行SQL语句,包括...
Spring JdbcTemplate提供了一个面向对象的接口,用于执行SQL查询、更新和存储过程,避免了直接与JDBC API打交道的繁琐工作。它通过异常处理、事务管理以及结果集的自动处理,简化了数据库访问。基于注解的Spring ...
Spring 框架 JdbcTemplate 类中查询方法介绍 JdbcTemplate 是 Spring 框架中 org.springframework.jdbc.core 包提供的 JDBC 模板类,它是核心类,其他模板类都是基于它封装完成的。JdbcTemplate 类主要提供四类方法...
1. **JdbcTemplate对象**:这是Spring JdbcTemplate的核心,它包含了执行SQL语句的所有方法,如update()用于更新,query()用于查询,insert()用于插入等。 2. **参数绑定**:JdbcTemplate支持多种方式的参数绑定,...
SpringJdbcTemplate是一个模板类,它提供了大量的方法来执行SQL查询、更新、存储过程等操作。这些方法会自动处理JDBC相关的资源关闭、异常转换等细节,使得代码更加整洁和健壮。 2. **数据库自适应** Spring...
首先,Spring JdbcTemplate通过提供一系列的模板方法,如`queryForList`、`queryForObject`、`execute`等,使得执行SQL查询变得更加简洁和安全。这些方法能够处理结果集、自动转换数据类型,并且在发生异常时提供更...
4. 使用JdbcTemplate方法:调用JdbcTemplate的相应方法,如`update()`, `query()`, `execute()`等,传入SQL和参数。 5. 处理结果:根据操作类型,处理返回的结果集或者受影响的行数。 6. 事务管理:如果需要,可以...
在使用`jdbcTemplate`进行预编译查询时,我们通常会使用`query()`或`queryForList()`方法。例如: ```java String sql = "SELECT * FROM table WHERE id = ?"; Object[] params = {1}; List<MyObject> result = ...
Spring JdbcTemplate是Spring框架中的一个核心组件,主要用来简化数据库操作。它提供了一种模板方法设计模式,将SQL语句的执行与结果处理进行了抽象,使得开发者可以更加专注于业务逻辑,而无需关心底层数据访问的...
除了上述方法,`JdbcTemplate`还提供了一系列`queryForXXX`方法,用于快速返回简单的查询结果,例如查询计数或返回单个字段的值。这些方法简化了常见查询场景的编码工作,提高了开发效率。 总之,`JdbcTemplate`...
JdbcTemplate提供了`query()`和`queryForXXX()`方法来执行SQL的SELECT语句。例如,获取单个用户: ```java public User getUserById(int id) { String sql = "SELECT * FROM users WHERE id = ?"; return ...
4. 调用JdbcTemplate提供的方法,如`update()`执行DML语句,`query()`执行查询,`queryForList()`获取列表,`queryForObject()`获取单个对象等。 5. 使用占位符(问号)或命名参数进行SQL动态绑定,避免SQL注入。 ...
在这个例子中,我们注入了JdbcTemplate实例,并使用query方法执行SQL查询。传入的RowCallbackHandler将在遍历结果集时被调用,处理每一行数据。 **5. 总结** Spring JdbcTemplate简化了数据库操作,通过模板模式...
使用JdbcTemplate的`query()`方法,可以将动态生成的SQL与参数绑定,执行查询。例如: ```java public List<MyEntity> queryByPage(int pageNum, int pageSize) { String sql = "SELECT * FROM table LIMIT ? ...
Spring JdbcTemplate是Spring JDBC模块的核心组件,它提供了一套模板方法,用于执行常见的JDBC操作,如查询、更新、插入和删除等。通过使用JdbcTemplate,开发者可以避免编写大量重复的JDBC模板代码,减少出错的可能...
1. **JdbcTemplate的基本使用**:JdbcTemplate的核心在于它的`update()`和`query()`方法,前者用于执行更新语句(INSERT、UPDATE、DELETE),后者用于执行查询语句。这些方法接收SQL语句作为参数,并可以传递绑定...
`query()`方法用于执行SQL查询,这里我们使用了自定义的`RowMapper`将结果集映射为User对象。 3. **更新(Update)**: ```java public void updateUser(User user) { jdbcTemplate.update( "UPDATE users SET...
4. **调用 JdbcTemplate 方法**:根据 SQL 类型选择 `query()`, `update()`, `call()` 等方法。 5. **结果处理**:通过回调接口(RowMapper, ResultSetExtractor)或 Pojo 映射(RowCallbackHandler)处理结果。 ##...
List<Account> accounts = jdbcTemplate.query("SELECT * FROM account", new AccountMapper()); ``` 其中,`AccountMapper`实现了`RowMapper`接口,用于将结果集转换为对象。 ##### 查询单个对象 ```java ...