`
emavaj
  • 浏览: 49898 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

模拟Hibernate的抓取

阅读更多

如果不使用Hibernate , 仅使用JDBC

以前觉得有点不方便,但是现在觉得,Hibernate也不是哪都适用

对于小项目来说,Hibernate反而是个累赘,还不如使用JDBC方便

 

使用JDBC查询的时候,有点不是很理想的是,返回的是ResultSet,而不是Bean

需要你再做一次转换,才能变成方便使用的Bean

而且,相较于Hibernate来说,抓取并自动填充Set,JDBC显得比较苍白无力

 

情景如下:

一个User实体,有uId,username,和group

/**.
 * 用户
 * @author eMavaj
 * 2010-5-31
 */
public class User {
	/**用户Id.*/
	private int uid;
	/**用户名.*/
	private String username;
	/**所属组.*/
	private Group group;
	
	/**.
	 * 构造函数
	 * @param uid 用户Id
	 * @param username 用户名
	 * @param group 所属组实体
	 */
	public User(int uid, String username, Group group) {
		this.uid = uid;
		this.username = username;
		this.group = group;
	}

 (所有代码都省略getter、setter)

Group如下:

/**.
 * 用户组
 * @author eMavaj
 * 2010-5-31
 */
public class Group {
	/**组Id.*/
	private int gid;
	/**组名.*/
	private String groupname;
	/**用户集合.*/
	private List<User> users;
	
	/**.
	 * 构造函数
	 * @param gid 组Id
	 * @param groupname 组名
	 */
	public Group(int gid, String groupname) {
		super();
		this.gid = gid;
		this.groupname = groupname;
	}

 

 

现在需要加载Group,并且同时加载Group关联的User

(这里的明显是一对多关系,现在维护关系的是User端,也就是外键在User端)

 

如果用Hibernate这个根本不算是问题,但是JDBC不是那么好办

所以,写下一下方法,模仿Hibernate的抓取 ,来填充Set<User>这个集合

/**.
 * 组实体交互对象
 * @author eMavaj
 * 2010-5-31
 */
public class GroupDao {
	
	/**.
	 * 通过Id加载组,包括组内的用户
	 * @param id 组Id
	 * @return 组实体
	 */
	public Group loadGroupById(int id) {
		/**执行SQL查询.*/
		ResultSet rs = DataBaseUtil.getInstance().executeQuery(
				"select g.*, u.* from t_group as g left join t_user as u on g.Id = u.group where g.gId = ?", 
				new Object[]{id});
		/**存储实体.*/
		Group group = null;
		int gId = -1;
		try {
			while (rs.next()) {
				/**看是否是同个实体.*/
				int tempId = rs.getInt("gId");
				if (tempId != gId) {
					group = new Group(tempId, rs.getString("groupname"));
					gId = tempId;
				}
				/**组下的实体.*/
				User user = new User(rs.getInt("uId"), rs.getString("username"), group);
				/**加入组.*/
				group.getUsers().add(user);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return group;
	}
}

 

 

先看sql语句:

select g.*, u.* from t_group as g left join t_user as u on g.Id = u.group where g.gId = ?

 

 

可以说和Hibernate输出的差不多,使用了Join的方式

目的是让返回的ResultSet的后面几行都是关联的User实体的信息!

(当然,前面几行虽然重复了Group信息,但是恰好用作标识,是否是同个Group实体的信息)

 

使用上面的方法遍历出Group和Set<User>信息,就可以组成对象,返回了

 

相对于直接返回ResultSet的方式相比,这样返回Bean的做法,确实多了一个循环的时间

但是,却方便了后续的一系列操作——操作Bean总比操作ResultSet方便吧

而且,有些场合,比如RMI、Flex等,不能传递ResultSet过去

使用这样的方法非常合适

0
1
分享到:
评论

相关推荐

    网络爬虫,抓取视频信息

    在这个项目中,我们将使用Structs、Hibernate和Spring这三个核心框架构建一个完整的Web应用,以实现视频信息的抓取和处理。 首先,让我们详细了解这些关键技术: 1. **Structs**:这是一个用于构建动态Web应用的...

    SpringMVC+Hibernate+ActiveMQ+爬虫

    此外,需要考虑反爬策略,如设置合理的请求间隔、模拟用户代理等,以避免被目标网站封禁。 综上所述,这个项目将结合多种技术,构建一个能够高效、稳定抓取和存储网络小说信息的分布式系统。SpringMVC处理Web请求,...

    JSP抓取网页的代码

    - HtmlUnit:一个无头浏览器库,用于模拟浏览器行为,进行更复杂的网页交互。 - ExecutorService:Java内置的线程池服务,用于高效管理并发任务。 6. **文件“JSP抓取网页代码的程序.txt”** - 这个文件很可能...

    网络爬虫完美demo

    《网络爬虫完美demo》是基于Java技术栈实现的一个完整的爬虫项目,它结合了Spring、SpringMVC和Hibernate框架,旨在实现对网页内容的分类抓取和非全文搜索引擎的功能。这个项目不仅提供了从前端界面到后台数据库的全...

    java网络爬虫-通过登陆网站携带COOKIE信息爬取网站数据

    Java网络爬虫是一种用于自动化获取网页信息的程序,它能够模拟浏览器的行为,通过发送HTTP请求并接收响应来抓取网页内容。在这个特定的场景中,爬虫需要处理登录过程,以便能够携带有效的COOKIE信息来访问受保护的...

    youzhan:仿优栈网,可以根据搜索的酒店对比其他旅游酒店网站的酒店价格信息。采用maven整合spring mvc 和 hibernate。爬取酒店数据采用HTTPClient的抓包形式和采用JSoup的解析html页面方式

    在本项目中,HTTPClient可能被用来抓取酒店网站的数据,模拟浏览器发送请求,获取HTML响应。 5. **JSoup**:JSoup是一个Java库,用于处理HTML文档。它可以解析、遍历和修改HTML结构,提取数据。在本项目中,JSoup...

    ssh爬虫搜索工程

    爬虫可能使用了多线程或者异步I/O来提高效率,还可能包含URL管理、网页解析(如HTML解析、正则表达式匹配等)、反反爬策略(如模拟浏览器头、IP代理池)等技术。 【Lucene】 Lucene是Apache软件基金会的开源全文...

    Java虚拟网络机器人

    Java虚拟网络机器人是一种基于Java编程语言开发的自动化工具,它能够在网络环境中模拟人类用户的操作,进行数据抓取、页面交互、任务执行等。这个技术在爬虫、自动化测试、社交媒体管理等领域有着广泛应用。通过理解...

    java网络爬虫+数据库+jsp+搜索引擎.rar.rar

    Java爬虫通过模拟浏览器发送HTTP请求到目标网站,接收并解析返回的HTML或其他格式的网页内容。主要使用的库有Jsoup、Apache HttpClient和HtmlUnit等。Jsoup提供了简洁的API来解析HTML,提取结构化数据;Apache ...

    百合网data crawler

    1. **数据爬虫技术**:数据爬虫是通过模拟浏览器行为,自动遍历和下载网页内容的程序。在这个项目中,数据爬虫可能采用了如Jsoup或Apache HttpClient等Java库来解析HTML,获取百合网页面上的结构化信息。 2. **Java...

    基于人工智能的就业平台数据采集与分析.docx

    这是一种自动化的网页抓取方法,通过编写特定的脚本来模拟浏览器行为,从而提取所需的数据。Python爬虫技术在数据采集方面非常强大,能够快速准确地从多个来源收集大量信息。 - **Mysql数据库存储**:抓取的数据被...

    [搜索链接]Java网络爬虫(蜘蛛)源码_zhizhu.rar

    文件系统操作可以通过Java的`java.io`包,而数据库操作则可能需要用到JDBC或者ORM框架如Hibernate。 5. **多线程与并发**:为了提高爬取效率,通常会采用多线程或者异步处理。Java的`Thread`类、`ExecutorService`...

    Java专题爬虫

    Java JDBC库用于数据库连接,JPA或Hibernate提供ORM(对象关系映射)功能。 5. **反爬策略与应对** - IP限制:网站可能会对频繁访问的IP进行限制,解决方案包括使用代理IP池。 - User-Agent:模拟浏览器发送请求...

    JAVA网络爬虫用到的JAR包,很全的的喔

    2. HtmlUnit:HtmlUnit是一个无头浏览器模拟器,它能执行JavaScript并渲染页面,从而允许开发者模拟真实浏览器的行为。这对于需要处理动态加载或依赖JavaScript内容的网页来说尤其有用。 3. Apache HttpClient:...

    qichacha.zip

    Spring Boot与各种数据库(如MySQL、MongoDB等)集成良好,可以方便地通过JDBC或ORM框架(如Hibernate)进行数据操作。在这个项目中,可能会有一个数据模型来映射企查查的企业信息,并使用Repository接口进行CRUD...

    搜索引擎的设计与实现的毕业论文

    1. **爬虫**:负责从互联网上抓取网页,是搜索引擎获取数据的第一步。爬虫通过模拟用户行为,遍历网页并提取HTML内容。 2. **预处理**:包括HTML清理、分词、去停用词等步骤,将原始网页转化为可供索引的形式。 3....

    Java写的爬虫

    Java提供了JDBC接口和其他库如JPA、Hibernate来方便地与数据库交互。 7. **异常处理与日志记录**:良好的异常处理和日志记录是爬虫稳定运行的关键。Java的try-catch语句和logging框架如Log4j可以帮助我们捕获错误并...

    jsoup1.8.1jar包

    在实际开发中,**使用场景**包括但不限于:构建爬虫抓取网站信息、从网页中提取结构化数据(如新闻标题、评论等)、网页自动化测试(模拟用户操作,如点击按钮、填写表单)、以及HTML内容的生成和修改(如生成动态...

    infinispan-core-5.2.11.Final.zip

    2. 数据持久化:支持多种持久化策略,如JDBC、JPA、Hibernate等,确保数据在系统重启后能够恢复。 3. 内存计算:Infinispan能够在内存中处理大量数据,提高应用性能。 4. 支持多种缓存模式:包括缓存-穿透、缓存-侧...

    毕业设计论文-IT计算机-[新闻文章]自动新闻采集系统_webapps-源码.zip

    ORM(Object-Relational Mapping)框架如Hibernate或MyBatis可以简化数据库操作,将数据库操作转化为面向对象的代码。 5. **线程与并发**:为了提高效率,新闻采集系统可能需要同时处理多个采集任务,这就涉及到了...

Global site tag (gtag.js) - Google Analytics