如果不使用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过去
使用这样的方法非常合适
分享到:
相关推荐
在这个项目中,我们将使用Structs、Hibernate和Spring这三个核心框架构建一个完整的Web应用,以实现视频信息的抓取和处理。 首先,让我们详细了解这些关键技术: 1. **Structs**:这是一个用于构建动态Web应用的...
此外,需要考虑反爬策略,如设置合理的请求间隔、模拟用户代理等,以避免被目标网站封禁。 综上所述,这个项目将结合多种技术,构建一个能够高效、稳定抓取和存储网络小说信息的分布式系统。SpringMVC处理Web请求,...
- HtmlUnit:一个无头浏览器库,用于模拟浏览器行为,进行更复杂的网页交互。 - ExecutorService:Java内置的线程池服务,用于高效管理并发任务。 6. **文件“JSP抓取网页代码的程序.txt”** - 这个文件很可能...
《网络爬虫完美demo》是基于Java技术栈实现的一个完整的爬虫项目,它结合了Spring、SpringMVC和Hibernate框架,旨在实现对网页内容的分类抓取和非全文搜索引擎的功能。这个项目不仅提供了从前端界面到后台数据库的全...
Java网络爬虫是一种用于自动化获取网页信息的程序,它能够模拟浏览器的行为,通过发送HTTP请求并接收响应来抓取网页内容。在这个特定的场景中,爬虫需要处理登录过程,以便能够携带有效的COOKIE信息来访问受保护的...
在本项目中,HTTPClient可能被用来抓取酒店网站的数据,模拟浏览器发送请求,获取HTML响应。 5. **JSoup**:JSoup是一个Java库,用于处理HTML文档。它可以解析、遍历和修改HTML结构,提取数据。在本项目中,JSoup...
爬虫可能使用了多线程或者异步I/O来提高效率,还可能包含URL管理、网页解析(如HTML解析、正则表达式匹配等)、反反爬策略(如模拟浏览器头、IP代理池)等技术。 【Lucene】 Lucene是Apache软件基金会的开源全文...
Java虚拟网络机器人是一种基于Java编程语言开发的自动化工具,它能够在网络环境中模拟人类用户的操作,进行数据抓取、页面交互、任务执行等。这个技术在爬虫、自动化测试、社交媒体管理等领域有着广泛应用。通过理解...
Java爬虫通过模拟浏览器发送HTTP请求到目标网站,接收并解析返回的HTML或其他格式的网页内容。主要使用的库有Jsoup、Apache HttpClient和HtmlUnit等。Jsoup提供了简洁的API来解析HTML,提取结构化数据;Apache ...
1. **数据爬虫技术**:数据爬虫是通过模拟浏览器行为,自动遍历和下载网页内容的程序。在这个项目中,数据爬虫可能采用了如Jsoup或Apache HttpClient等Java库来解析HTML,获取百合网页面上的结构化信息。 2. **Java...
这是一种自动化的网页抓取方法,通过编写特定的脚本来模拟浏览器行为,从而提取所需的数据。Python爬虫技术在数据采集方面非常强大,能够快速准确地从多个来源收集大量信息。 - **Mysql数据库存储**:抓取的数据被...
文件系统操作可以通过Java的`java.io`包,而数据库操作则可能需要用到JDBC或者ORM框架如Hibernate。 5. **多线程与并发**:为了提高爬取效率,通常会采用多线程或者异步处理。Java的`Thread`类、`ExecutorService`...
Java JDBC库用于数据库连接,JPA或Hibernate提供ORM(对象关系映射)功能。 5. **反爬策略与应对** - IP限制:网站可能会对频繁访问的IP进行限制,解决方案包括使用代理IP池。 - User-Agent:模拟浏览器发送请求...
2. HtmlUnit:HtmlUnit是一个无头浏览器模拟器,它能执行JavaScript并渲染页面,从而允许开发者模拟真实浏览器的行为。这对于需要处理动态加载或依赖JavaScript内容的网页来说尤其有用。 3. Apache HttpClient:...
Spring Boot与各种数据库(如MySQL、MongoDB等)集成良好,可以方便地通过JDBC或ORM框架(如Hibernate)进行数据操作。在这个项目中,可能会有一个数据模型来映射企查查的企业信息,并使用Repository接口进行CRUD...
1. **爬虫**:负责从互联网上抓取网页,是搜索引擎获取数据的第一步。爬虫通过模拟用户行为,遍历网页并提取HTML内容。 2. **预处理**:包括HTML清理、分词、去停用词等步骤,将原始网页转化为可供索引的形式。 3....
Java提供了JDBC接口和其他库如JPA、Hibernate来方便地与数据库交互。 7. **异常处理与日志记录**:良好的异常处理和日志记录是爬虫稳定运行的关键。Java的try-catch语句和logging框架如Log4j可以帮助我们捕获错误并...
在实际开发中,**使用场景**包括但不限于:构建爬虫抓取网站信息、从网页中提取结构化数据(如新闻标题、评论等)、网页自动化测试(模拟用户操作,如点击按钮、填写表单)、以及HTML内容的生成和修改(如生成动态...
2. 数据持久化:支持多种持久化策略,如JDBC、JPA、Hibernate等,确保数据在系统重启后能够恢复。 3. 内存计算:Infinispan能够在内存中处理大量数据,提高应用性能。 4. 支持多种缓存模式:包括缓存-穿透、缓存-侧...
ORM(Object-Relational Mapping)框架如Hibernate或MyBatis可以简化数据库操作,将数据库操作转化为面向对象的代码。 5. **线程与并发**:为了提高效率,新闻采集系统可能需要同时处理多个采集任务,这就涉及到了...