/**
* 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 Data JPA和Template两种模式。 首先,让我们了解Spring Data JPA。这是一个强大的ORM(对象关系映射)框架,它简化了与数据库的...
在Spring中,我们可以使用`<bean>`标签来定义这些配置,并通过`<property>`标签设置相应的属性。例如,我们可以配置数据源(DataSource),如下所示: ```xml <bean id="dataSource" class="org.springframework....
SQL(Structured Query Language)是用于管理和处理关系型数据库的标准编程语言。在JBPM中,SQL主要用于存储和检索流程实例、任务、变量等相关数据。通过定制SQL查询,用户可以优化数据操作性能,实现更高效的数据...
开发者会创建一个users表,包含必要的字段,然后使用Hibernate的HQL(Hibernate Query Language)或SQL语句来与数据库交互。 项目中的"SS2HTEST"可能包含了以下文件和目录: - `webapp`:Web应用的根目录,包括`WEB...
4. 示例代码或项目:可能包含了一些使用Spring和Hibernate的示例程序,展示如何在实际开发中整合这两个框架,以及如何编写和执行SQL语句。 学习并掌握Spring Framework、经典SQL语句和Hibernate,对于Java开发人员...
4. **调用JdbcTemplate方法**:使用JdbcTemplate提供的execute、query、update等方法执行SQL,它们会自动处理结果集、关闭连接等细节。 5. **处理结果**:对于查询操作,JdbcTemplate会返回一个ResultSet,可以通过...
return jdbcTemplate.query(sql, new UserRowMapper()); } // UserRowMapper 用于将查询结果映射为 User 对象 private static class UserRowMapper implements RowMapper<User> { @Override public User ...
这个库是Spring Data框架的一部分,旨在简化数据访问层的实现,尤其在使用NoSQL数据库如MongoDB时。MongoDBTemplate是Spring Data MongoDB的核心组件,它提供了丰富的API来执行常见的数据库操作。 首先,让我们深入...
`JdbcTemplate`是Spring JDBC模块的核心,它提供了用于执行SQL语句的模板方法,避免了繁琐的数据库连接管理和手动关闭资源。这个模板类封装了常见的数据库操作,如增删改查,使得开发更加便捷和安全。 **一、Spring...
`@Repository` 注解标记仓库接口,`@Query` 用于自定义 SQL 或 HQL 查询。Spring Data JPA 还支持自动查询生成,例如,根据方法名自动执行对应的操作。 **SpringSide 示例项目** "SSJ" 可能指的是 SpringSide 示例...
- 对于更复杂的查询需求,可以使用 JPQL 查询或者原生 SQL 查询,通过 `@Query` 注解指定查询语句。例如: ```java @Query("SELECT u FROM User u WHERE u.email = ?1") User findByEmail(String email); ``` ...
此外,还可以通过使用 @Query 注解来明确指定 JPQL 或 SQL 查询语句。除了这些,Spring Data JPA 还提供了本地查询(使用原生 SQL)和命名参数的支持,以及更新查询和创建查询的顺序约定。 第四章:客户化扩展 Jpa...
1. **JdbcTemplate**: 这是Spring JDBC的核心接口,提供了一组用于执行SQL语句的方法,如`update()`, `query()`, `execute()`等。它能处理数据库连接的打开和关闭,事务管理,异常处理等,让开发者专注于SQL语句本身...
1. **使用预编译SQL**:预编译SQL(PreparedStatement)能有效防止SQL注入,提高性能。 2. **合理配置事务边界**:根据业务需求,正确设置事务的开始和结束,确保数据一致性。 3. **错误处理**:捕获...
此外,还可以使用注解 `@Query` 来编写自定义的 SQL 或 HQL 查询。 4. **Pagination and Sorting**:在处理大量数据时,分页和排序是常见的需求。Spring Data JPA 提供了内置的支持,可以在查询方法中通过 `...
Spring Data JPA是Spring的一个模块,它简化了使用JPA进行数据访问的操作。Spring Data JPA提供了强大的Repository抽象,允许开发者以声明式的方式定义数据操作,如查询方法。只需要在接口上定义方法名,Spring Data...
2. JdbcTemplate:它是Spring JDBC的核心,提供了执行SQL语句和处理结果集的方法,如update()用于执行更新操作,query()用于查询操作。 3. SimpleJdbcInsert/NamedParameterJdbcInsert:用于简化插入操作,可以自动...
Spring Data JPA还支持更复杂的查询,如使用`@Query`注解编写自定义SQL或者HQL,或者使用` Specifications`进行动态查询。此外,它还提供了事务管理、懒加载、级联操作等特性,使得数据访问更加灵活和强大。 在实际...
SSH框架是指Spring、Struts2和Hibernate这三种技术的组合使用,而本文档主要关注的是如何在这样的框架下利用DAO(Data Access Object)层来执行SQL操作。 ##### 1.1 获取数据库连接 在SSH框架中,通常会利用...