Spring中,JdbcTemplate的query方法的参数中实现RowMapper接口,可以将查询结果的每行映射为数据库表对应的EntityBean,并最终返回List<EntityBean>,这个属于基本运用,但实际应用往往是多表查询返回的结果集并非可以直接映射为表的实体类;另,jsp页面使用ajax返回结果为json字符串处理起来相对方便;下面记录一下sping JdbcTemplate多表查询结果处理为json字符串并在页面展现。
1,JdbcTemplate DAO
两表连接查询,获取结果集为List<Map>,方便处理为json数组
@Repository public class DAOJdbcTemplate { private static Logger log = Logger.getLogger(DAOJdbcTemplate.class.getName()); private JdbcTemplate jdbctemplate; @Autowired public void setDataSource(DataSource dbcp2datasource){ this.jdbctemplate = new JdbcTemplate(dbcp2datasource); } public List getInfoList(String pubday, String title){// StringBuffer sql = new StringBuffer(); List lst = null; sql.append("select t.title as title, t.pubday as pubday, u.name as name from info left join user on t.puber=u.id where 1=1 "); if(null != pubday && !"".equals(pubday)){ sql.append("and t.pubday='"+ pubday +"' "); } if(null != title && !"".equals(title)){ sql.append("and t.title like '%"+ title +"%' "); } sql.append("order by t.optime desc "); lst = this.jdbctemplate.query(sql.toString(),new RowMapper<Map<String,String>>(){ @Override public Map<String,String> mapRow(ResultSet rs, int index) throws SQLException { Map<String,String> mp = new HashMap<String,String>(); mp.put("title", rs.getString("title")); mp.put("pubday", rs.getDate("pubday").toString()); mp.put("name", rs.getString("name")); return mp; } }); return lst; } }
2,Controller中处理结果返回json响应
@ResponseBody @RequestMapping(path="/querybyparam",method={RequestMethod.POST}) public void getlistbyparam(@RequestParam(name="pubday") String pubday, @RequestParam(name="title") String title, HttpServletRequest request, HttpServletResponse response){ try { log.info("pubday: "+ pubday + ", title: "+ title); List lst = commonimpl.getInfoList(pubday,title); log.info(lst); JSONArray jsn = JSONArray.fromObject(lst); response.getWriter().print(jsn); return; } catch (IOException e) { log.info(e.toString()); } }
3,页面请求、响应处理、返回结果展现
function query(){ $.ajax({ url:'info/querybyparam', dataType:'json', type:'post', cache:false, data:{'pubday':$('#tonggaoid').val(),'title':$('#tonggaotitle').val()}, success:function(data){ var html = ''; $.each(data,function(index,elem){ html += '<tr>'; html +='<td style="width:10%;font-weight: bold;text-align: center;">'+ (index+1) +'</td>'; html += '<td style="width: 40%;text-align: center;">'+ elem.title +'</td>'; html += '<td style="width: 25%;text-align: center;">'+ elem.pubday+'</td>'; html += '<td style="width: 25%;text-align: center;">'+ elem.name +'</td>'; html += '</tr>'; }); $('#datatable').append(html); }, error:function(XMLHttpRequest){ alert(XMLHttpRequest.responseText); } }); }
相关推荐
`是预编译的占位符,`params`数组包含了实际参数,`MyRowMapper`是一个自定义的映射器,用于将查询结果转换为Java对象。 接下来,让我们看看如何使用`jdbcTemplate`进行预编译的插入操作。`update()`方法可以用来...
这里的`queryForInt()`方法接收一个SQL语句作为参数,并返回查询结果中的第一行第一列的值,该值会被自动转换为整型。如果查询结果为空或者出现异常,则会抛出异常。 ##### 2. `queryForObject()` 此方法用于执行...
这通常涉及设置查询结果集类型为ResultSet.TYPE_FORWARD_ONLY和CONCUR_READ_ONLY,以启用数据库的游标支持。 3. **使用RowCallbackHandler**:为了处理每一条数据,我们需要实现`RowCallbackHandler`接口。在这个...
使用Spring的JdbcTemplate实现分页功能
Spring框架提供了JdbcTemplate或NamedParameterJdbcTemplate,使得与数据库交互变得简单,可以直接执行SQL语句并获取结果集。这些结果可以被转换为Java对象,然后进一步转换成JSON。 为了从数据库读取数据并以JSON...
示例中展示了如何遍历并打印查询结果中的user_id和name。 5. **事务管理**: Spring的JdbcTemplate默认支持自动提交和回滚事务,这使得在执行一系列数据库操作时无需手动管理事务。如果出现异常,所有未提交的更改...
首先,我们可以使用JdbcTemplate的queryForList()方法来查询数据库,并将查询结果转换为自定义对象集合。下面是一个示例代码: ```java public List<UserInfo> findAll() { String sql = "SELECT * FROM user_info...
在查询结果为空或查询结果大于 1 行时,JdbcTemplate 会抛出异常。这些异常包括: * org.springframework.dao.EmptyResultDataAccessException:查询结果为空 * org.springframework.dao....
在`JsonBean.java`中,可能定义了一个用于存储数据库查询结果的Java bean类,它的属性与数据库表的字段相对应,通过`RowMapper`映射到对象。例如: ```java public class JsonBean { private String field1; ...
它返回一个包含查询结果的`List`,每个元素通常是一个`Map`对象,其中键是列名,值是对应的列值。例如,`List, Object>> rows = jdbcTemplate.queryForList("select * from user where id=" + id.intValue());`会...
在上述代码中,`MyEntityRowMapper`是自定义的结果集映射器,用于将查询结果转化为Java对象。 进一步封装,我们可以创建一个Page类来表示分页结果,包括总记录数、当前页、每页大小以及数据列表。通过JdbcTemplate...
在本教程中,我们将深入探讨如何在Spring Boot项目中配置和使用多数据源以及JdbcTemplate。 首先,让我们了解什么是`JdbcTemplate`。它是Spring提供的一种模板类,用于执行SQL语句,通过回调机制将结果转换为Java...
批量操作的关键在于有效地利用了`PreparedStatement`,它预编译SQL语句并允许多次执行,只需要改变参数值,这样可以避免因重复解析SQL而带来的性能开销。同时,`JdbcTemplate`提供了异常处理和资源管理,使得代码更...
`JdbcTemplate`是Spring对JDBC的轻量级封装,它消除了手动管理连接、事务和结果集的繁琐过程,提高了代码的可读性和可维护性。通过使用模板方法设计模式,`JdbcTemplate`提供了一系列静态和非静态的方法来执行各种...
`作为占位符,并传递参数数组,JdbcTemplate会自动处理参数绑定,避免了SQL注入的风险。 **6. 代码测试** 由于JdbcTemplate不依赖于具体的数据库连接,它在单元测试中非常方便。可以使用Mockito等工具模拟...
这里,`queryForList`接受SQL语句和结果集映射类作为参数,它会自动将查询结果转换为指定类型的列表。 2. **参数化查询** Spring JdbcTemplate支持参数化的SQL查询,这可以避免SQL注入的风险。例如,使用`query`...
3. 执行分页查询:通过分页信息调用JdbcTemplate方法来返回结果集合。 JdbcTemplate的使用涉及到许多细节,如事务管理、异常处理和SQL注入防护等。在具体应用时,开发者需要结合实际业务需求和Spring框架的其他特性...
- `query(String sql, RowMapper<T> rowMapper)`: 执行SQL查询并使用RowMapper将结果映射到自定义类型。 - `queryForObject(String sql, RowMapper<T> rowMapper, Object... args)`: 执行查询并期望只返回一个对象。...