`
TRAMP_ZZY
  • 浏览: 138870 次
社区版块
存档分类
最新评论

Spring SqlQuery 使用

阅读更多
/** 
 * Project Name:webblog 
 * File Name:ForumOODao.java 
 * Package Name:edu.bjfu.webblog.daoimpl 
 * Date:2013年9月11日 下午4:39:22 
 * Copyright (c) 2013, zhangzhaoyu0524@163.com All Rights Reserved. 
 * 
*/  
  
package edu.bjfu.webblog.daoimpl;  

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.jdbc.object.SqlFunction;
import org.springframework.jdbc.object.SqlUpdate;
import org.springframework.jdbc.object.StoredProcedure;

import edu.bjfu.webblog.domain.Forum;

/** 
 * ClassName:ForumOODao <br/> 
 * Function: 以OO 的方式访问数据库. <br/> 
 * Reason:   SqlQuery 是一个可重用的、线程安全的类,它封装了一个SQL 查询. <br/>
 * 			 其子类 MappingSqlQuery 作为一个更加易用的实现类能够将结果集中的行为
 * 			映射为Java 对象 SqlQuery 还有另外两个扩展类分别是 MappingSqlQueryWithParameters
 * 			和 UpdatableSqlQuery 
 * Date:     2013年9月11日 下午4:39:22 <br/> 
 * @author   zhangzhaoyu 
 * @version   
 * @since    JDK 1.6 
 * @see       
 */
public class ForumOODao {
	
	@Autowired
	private DataSource dataSource;
	
	private ForumQuery forumQuery;
	private ForumInsert forumInsert;
	private GetTopicNum getTopicNum;
	private SqlFunction<Integer> forumNumCount;
	
	//初始化对象
	@PostConstruct
	public void init() {
		this.forumQuery = new ForumQuery(this.dataSource);
		this.forumInsert = new ForumInsert(this.dataSource);
		this.getTopicNum = new GetTopicNum(this.dataSource);
		
		this.forumNumCount = new SqlFunction<Integer>(dataSource, 
				" SELECT count(*) FROM t_forum ");
		this.forumNumCount.compile();
	}
	
	public Forum getFourm(int forumId) {
		return this.forumQuery.findObject(forumId);
	}
	
	public void addForum(Forum forum) {
		this.forumInsert.insert(forum);
	}
	
	public int getTopicNum(int userId) {
		return this.getTopicNum.getTopicNum(userId);
	}
	
	public int getForumNum() {
		return this.forumNumCount.run();
	}
	private class ForumQuery extends MappingSqlQuery<Forum>{

		public ForumQuery(DataSource ds) {
			super(ds, "SELECT forum_id, forum_name, forum_desc FROM t_form WHERE forum_id = ? ");
			declareParameter(new SqlParameter(Types.INTEGER));
			compile();
		}
		
		@Override
		protected Forum mapRow(ResultSet rs, int rowNum) throws SQLException {
			
			Forum forum = new Forum();
			forum.setForumId(rs.getInt("forum_id"));
			forum.setForumName(rs.getString("forum_name"));
			forum.setForumDesc(rs.getString("forum_desc"));
			
			return forum;
		}
		
	}
	
	private class ForumInsert extends SqlUpdate {
		
		public ForumInsert(DataSource ds) {
			super(ds, "INSERT INTO t_forum(forum_name, forum_desc) VALUES(:forumName, :forumDesc)");
			declareParameter(new SqlParameter("forumDesc", Types.VARCHAR));
			declareParameter(new SqlParameter("forumName", Types.VARCHAR));
			compile();
		}
		
		public void insert(Forum forum) {
			Map<String, String> params = new HashMap<String, String>();
			params.put("forumName", forum.getForumName());
			params.put("forumDesc", forum.getForumDesc());
			super.updateByNamedParam(params);
		}
	}
	
	private class GetTopicNum extends StoredProcedure {
		
		private static final String SQL = " P_GET_TOPIC_NUM ";
		
		public GetTopicNum(DataSource ds) {
			setDataSource(ds);
			setSql(SQL);
			
			declareParameter(new SqlParameter("userId", Types.INTEGER));
			declareParameter(new SqlParameter("outNum", Types.INTEGER));
			compile();
		}
		
		public int getTopicNum(int userId) {
			Map<String, Integer> map = new HashMap<String, Integer>();
			map.put("userId", userId);
			Map<String, Object> outMap = execute(map);
			return (Integer)outMap.get("outNum");
		}
	}
	
	
}
 
分享到:
评论

相关推荐

    spring boot query查询

    本篇文章将深入探讨Spring Boot中使用`@Query`注解进行自定义查询的方法,包括Spring Data JPA和Template两种模式。 首先,让我们了解Spring Data JPA。这是一个强大的ORM(对象关系映射)框架,它简化了与数据库的...

    基于spring的sql map实现

    在Spring中,我们可以使用`&lt;bean&gt;`标签来定义这些配置,并通过`&lt;property&gt;`标签设置相应的属性。例如,我们可以配置数据源(DataSource),如下所示: ```xml &lt;bean id="dataSource" class="org.springframework....

    JBPM使用实例,sql spring

    SQL(Structured Query Language)是用于管理和处理关系型数据库的标准编程语言。在JBPM中,SQL主要用于存储和检索流程实例、任务、变量等相关数据。通过定制SQL查询,用户可以优化数据操作性能,实现更高效的数据...

    strut2+spring+hibernate +sqlserver2005

    开发者会创建一个users表,包含必要的字段,然后使用Hibernate的HQL(Hibernate Query Language)或SQL语句来与数据库交互。 项目中的"SS2HTEST"可能包含了以下文件和目录: - `webapp`:Web应用的根目录,包括`WEB...

    spring_Framework+经典SQL语句大全+Hibernate中文API

    4. 示例代码或项目:可能包含了一些使用Spring和Hibernate的示例程序,展示如何在实际开发中整合这两个框架,以及如何编写和执行SQL语句。 学习并掌握Spring Framework、经典SQL语句和Hibernate,对于Java开发人员...

    SpringJDBC.rar_jdbc spring_spring jd_spring jdbc_spring使用JDBC进行数

    4. **调用JdbcTemplate方法**:使用JdbcTemplate提供的execute、query、update等方法执行SQL,它们会自动处理结果集、关闭连接等细节。 5. **处理结果**:对于查询操作,JdbcTemplate会返回一个ResultSet,可以通过...

    spring内置jdbctemplate使用demo

    return jdbcTemplate.query(sql, new UserRowMapper()); } // UserRowMapper 用于将查询结果映射为 User 对象 private static class UserRowMapper implements RowMapper&lt;User&gt; { @Override public User ...

    spring-data使用mongodbTemplate对MongoDB进行读写操作

    这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDBTemplate是Spring Data MongoDB的核心组件,它提供了丰富的API来执行常见的数据库操作。 首先,让我们深入...

    使用Spring JDBC 案例

    `JdbcTemplate`是Spring JDBC模块的核心,它提供了用于执行SQL语句的模板方法,避免了繁琐的数据库连接管理和手动关闭资源。这个模板类封装了常见的数据库操作,如增删改查,使得开发更加便捷和安全。 **一、Spring...

    Spring MVC+Spring+Spring data JPA

    `@Repository` 注解标记仓库接口,`@Query` 用于自定义 SQL 或 HQL 查询。Spring Data JPA 还支持自动查询生成,例如,根据方法名自动执行对应的操作。 **SpringSide 示例项目** "SSJ" 可能指的是 SpringSide 示例...

    Spring-data-jpa常用教程.pdf

    - 对于更复杂的查询需求,可以使用 JPQL 查询或者原生 SQL 查询,通过 `@Query` 注解指定查询语句。例如: ```java @Query("SELECT u FROM User u WHERE u.email = ?1") User findByEmail(String email); ``` ...

    spring data jpa 教程

    此外,还可以通过使用 @Query 注解来明确指定 JPQL 或 SQL 查询语句。除了这些,Spring Data JPA 还提供了本地查询(使用原生 SQL)和命名参数的支持,以及更新查询和创建查询的顺序约定。 第四章:客户化扩展 Jpa...

    spring_JDBC整合包

    1. **JdbcTemplate**: 这是Spring JDBC的核心接口,提供了一组用于执行SQL语句的方法,如`update()`, `query()`, `execute()`等。它能处理数据库连接的打开和关闭,事务管理,异常处理等,让开发者专注于SQL语句本身...

    Spring之SimpleJdbcTemplate的使用

    1. **使用预编译SQL**:预编译SQL(PreparedStatement)能有效防止SQL注入,提高性能。 2. **合理配置事务边界**:根据业务需求,正确设置事务的开始和结束,确保数据一致性。 3. **错误处理**:捕获...

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    此外,还可以使用注解 `@Query` 来编写自定义的 SQL 或 HQL 查询。 4. **Pagination and Sorting**:在处理大量数据时,分页和排序是常见的需求。Spring Data JPA 提供了内置的支持,可以在查询方法中通过 `...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring Data JPA是Spring的一个模块,它简化了使用JPA进行数据访问的操作。Spring Data JPA提供了强大的Repository抽象,允许开发者以声明式的方式定义数据操作,如查询方法。只需要在接口上定义方法名,Spring Data...

    spring-jdbc-dao

    2. JdbcTemplate:它是Spring JDBC的核心,提供了执行SQL语句和处理结果集的方法,如update()用于执行更新操作,query()用于查询操作。 3. SimpleJdbcInsert/NamedParameterJdbcInsert:用于简化插入操作,可以自动...

    Spring Boot整合SpringDataJPA

    Spring Data JPA还支持更复杂的查询,如使用`@Query`注解编写自定义SQL或者HQL,或者使用` Specifications`进行动态查询。此外,它还提供了事务管理、懒加载、级联操作等特性,使得数据访问更加灵活和强大。 在实际...

    Spring使用技巧

    SSH框架是指Spring、Struts2和Hibernate这三种技术的组合使用,而本文档主要关注的是如何在这样的框架下利用DAO(Data Access Object)层来执行SQL操作。 ##### 1.1 获取数据库连接 在SSH框架中,通常会利用...

Global site tag (gtag.js) - Google Analytics