`
jinchun1223
  • 浏览: 259466 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

一个Hibernate 的例子,还有jsp上传和下载较为复杂的例子

阅读更多

参考别人例子Hibernate 的例子

第一步,我们要创建一个表 结构如下
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | MUL | NULL | auto_increment |
| title | varchar(400) | YES | | NULL | |
| content | text | YES | | NULL | |
| time | datetime | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+

第二步,在Eclipse中创建一个JAVA项目(我在项目中用到的包名是cn.com.nick.hbm)。编写News.java类,这个类对应了数据库中的表

package cn.com.nick.hbm;

import java.util.Date;

public class News
{
private int id;
private String title;
private String content;
private Date date;

public int getId()
{
return id;
}

public void setId(int id)
{
this.id = id;
}

public String getTitle()
{
return title;
}

public void setTitle(String title)
{
this.title = title;
}

public String getContent()
{
return content;
}

public void setContent(String content)
{
this.content = content;
}

public Date getDate()
{
return date;
}

public void setDate(Date date)
{
this.date = date;
}

}

第三步,配置对应关系 保存为News.hbm.xml文件 与News类在同一目录下(并不是一定要在同一目录下,为了方便暂时先放在这里)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<!-- 这里说明了cn.com.nick.hbm.News这个类对应了NEWS表,數據庫裱中的字段和表名不區分大小寫 -->
<class name="cn.com.nick.hbm.News" table="NEWS">
<!-- 从这里开始配置了News类中的属性对应到表中的那个字段,以及这个字段的类型 -->
<id name="id" column="id">
<generator class="native" />
</id>
<!--

数据库中的表名和字段名都是不区分大小写的,所以这些字段可以大写也可以小写column="title"

-->
<property name="title" type="string" column="title" />
<property name="content" type="string" column="content" />
<property name="date" type="timestamp" column="time" />

</class>

</hibernate-mapping>

第四步,配置hibernate.cfg.xml 注意这个名字不能改,并且要放到SRC的跟路径下(这里要注意,如果放错地方示例中的方法是找不到这个文件的)

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory name="java:/hibernate/HibernateFactory">

<property name="show_sql">true</property><!-- 这里配置成显示SQL语句,方便调试 -->
<property name="connection.driver_class">
com.microsoft.jdbc.sqlserver.SQLServerDriver<!-- 这里是sql2000的JDBC driver class名 -->
</property>
<property name="current_session_context_class">thread</property><!-- 配置上下文 -->
<property name="connection.url">
jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test<!-- 这里是sql2000的hibernate_test数据库URL -->
</property>
<property name="connection.username">sa</property><!-- 用户名 -->
<property name="connection.password"></property>
<!-- 密码 -->
<property name="dialect">
org.hibernate.dialect.SQLServerDialect<!-- 这里是sql2000的Dialect -->
</property>
<property name="myeclipse.connection.profile">my</property>
<mapping resource="cn/com/nick/hbm/News.hbm.xml" /><!-- 指定News的映射文件 -->

</session-factory>

</hibernate-configuration>

最后创建一个测试类 Test.java 代码如下,里边有注释说明

package cn.com.nick.hbm;

import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;

public class Test {

private static final SessionFactory sessionFactory;

static {
try {
// 这里创建了SessionFactory 将hibernate.cfg.xml文件放到SRC的跟路径下
// Hibernate会自己找到
sessionFactory = new Configuration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;
}

public static void main(String[] args) {
// 实例化一个新的News对象,并填充内容
News news = new News();
news.setId(2);
news.setTitle("金春");
news.setContent("金春天天開心");
news.setDate(new Date());

Test t = new Test();
// 调用Test类下的存储方法,相当于执行INSERT语句
t.Save(news);
// 调用查询方法,显示数据库的内容
System.out.println("wwww");
t.select();
// 调用更新方法
// t.update();
// 调用删除
// t.delete();
}

/**
* 一个简单的添加数据方法
*
* @param news
* news对象,这个对象将被添加到库中
*/
public void Save(News news) {
try {
// 获取hibernate的session
Session session = Test.getSessionFactory().getCurrentSession();
session.beginTransaction();
// 这里只需要调用save方法把news对象传进去就插入成功了!
session.save(news);
session.getTransaction().commit();

} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* 查询方法
*/
public void select() {
try {
Session session = Test.getSessionFactory().getCurrentSession();
session.beginTransaction();
// 注意!!!这里的 News 不是表名称! 是对象名所以要注意大小写
String sql = " from News";
// 带条件的查询
// String sql="from News where id=1";

// 用session.createQuery()执行HQL查询语句
List<News> l = session.createQuery(sql).list();
// 在控制台循环输出
for (News n : l) {
System.out.println(n.getId());
System.out.println(n.getTitle());
System.out.println(n.getContent());
System.out.println(n.getDate());
System.out.println("==============");
}
session.getTransaction().commit();

} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

/**
* 更新方法
*/
public void update() {
try {
Session session = Test.getSessionFactory().getCurrentSession();
session.beginTransaction();
// 定义了要装载对象的ID
Integer id = 1;
// 用load方法装载一个对象进来
News n = (News) session.load(News.class, new Integer(id));
// 重新设置这个对象的标题
n.setTitle("更新后标题");
// 用update方法更新这个对象
session.update(n);
session.getTransaction().commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void delete() {
try {
Session session = Test.getSessionFactory().getCurrentSession();
session.beginTransaction();
// 定义了要装载对象的ID
Integer id = 6;
// 用load方法装载一个对象进来
News n = (News) session.load(News.class, new Integer(id));
// 用delete方法删除这个对象
session.delete(n);
session.getTransaction().commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}

public void delete1() {
Session session = Test.getSessionFactory().getCurrentSession();
session.beginTransaction();

Integer id = 6;
News n = (News) session.load(News.class, new Integer(id));
session.delete(n);
session.getTransaction().commit();

}

}
jsp上传和下载较为复杂的例子

1upload,jsp文件如下:

<form action="servlet/Upload" method="post">
<input type="file" name="file1">
<br>
<input type="file" name="file2">
<br>
<input type="file" name="file3">
<input type="submit" value="upload" />
<br>
<br>
<a href="servlet/down?downFile=入门教程.doc">down</a>
</form>

2、在servlet(Upload.java)中的dopost中写代码如下:

response.setContentType("text/html; charset=gb2312");
// 要下载的文件名
// 之所以这样处理,主要是因为文件名的中文化问题,这样处理的话,中文文件名也会正常显示
String aa=new String((request.getParameter("file1"))
.getBytes("iso8859-1"), "gb2312");
String bb=new String((request.getParameter("file2"))
.getBytes("iso8859-1"), "gb2312");
String cc=new String((request.getParameter("file3"))
.getBytes("iso8859-1"), "gb2312");
List<String> list = new ArrayList<String>();
if(aa!=null || !aa.equals(""))
list.add(aa);
if(!bb.equals("") || bb!=null)
list.add(bb);
if(cc!=null || !cc.equals(""))
list.add(cc);
// 建立上传文件存放的路径
File uploadPath = new File(request.getRealPath("/downloadPath") );
System.out.println(uploadPath );
if (!uploadPath.exists()) {
uploadPath.mkdirs();
}
for (int i = 0; i < list.size(); i++) {
String fileName[] = new String[list.size()];
String exFileName[] = new String[list.size()];
// 文件路径
String filePath = list.get(i);
// 取上传的文件名称
fileName[i] = filePath.substring(filePath.lastIndexOf("\\") + 1,
filePath.length());
// 取文件的扩展名称
// exFileName[i] = filePath.substring(filePath.lastIndexOf("." + 1,
// filePath.length()));
// 在存放的目录下新建文件
File uploadFileName = new File(uploadPath, fileName[i]);
if (!uploadFileName.exists()) {
uploadFileName.createNewFile();
}
FileInputStream fin=new FileInputStream(filePath);
// 向服务器写入文件
java.io.FileOutputStream fos = new java.io.FileOutputStream(uploadPath + "/" + fileName[i]);
int c = fin.read();
while (c != -1) {
fos.write((char)c);
c=fin.read();
}
fin.close();
fos.close();
}

4、下载servlet(down.java)的doget方法下代码如下:

response.setContentType("text/html; charset=gb2312");
HttpSession session = request.getSession();
// 要下载的文件名
String downloadfile = new String((request.getParameter("downFile"))
.getBytes("iso8859-1"), "gb2312");

ServletContext context = getServletContext();
ServletConfig config = getServletConfig();

// 获取要下载文件所在的目录,这里是对应于服务器上的物理路径
// 目录的格式是这样的:
// 根目录(WEB主目录所对应的实际物理目录)
// +虚拟目录(下载文件存放的子目录)
String downloadpath = context.getRealPath(File.separator)
+ "downloadPath" + File.separator;
System.out.println(downloadpath);
// 构建下载文件的对象
java.io.File file = new java.io.File(downloadpath + downloadfile);
// 获得文件的长度
long filesize = file.length();
// 设置输出格式
response.addHeader("content-type", "application/x-msdownload;");
response.addHeader("Content-Disposition", "attachment; filename="
+ response.encodeURL(downloadfile));//你要在保存窗口中显示的保存文件名
response.addHeader("content-length", Long.toString(filesize));
// 向客户端写入文件
java.io.FileInputStream fin = new java.io.FileInputStream(file);
byte[] b = new byte[1];
int j = 0;
while ((j = fin.read(b)) > 0) {
response.getOutputStream().write(b);
}
fin.close();

3、web.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>Upload</servlet-name>
<servlet-class>com.Upload</servlet-class>
</servlet>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>down</servlet-name>
<servlet-class>com.down</servlet-class>
</servlet>


<servlet-mapping>
<servlet-name>Upload</servlet-name>
<url-pattern>/servlet/Upload</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>down</servlet-name>
<url-pattern>/servlet/down</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

分享到:
评论

相关推荐

    hibernate的第一个例子

    **标题解析:**“hibernate的第一个例子”表明这是一个关于Hibernate框架的基础教程,主要目标是展示如何使用Hibernate进行数据持久化操作。 **描述分析:**描述提到这是一个超级简单的例子,包含一个持久化对象...

    一个很简单的hibernate例子

    这个例子是学习Hibernate的基础,它展示了如何使用Hibernate进行基本的数据操作。随着对Hibernate的深入学习,还可以掌握更复杂的功能,如级联操作、懒加载、缓存机制以及实体关系映射等。理解并熟练运用Hibernate,...

    Hibernate 的第一个例子

    在本文中,我们将深入探讨如何创建Hibernate的第一个例子,帮助初学者快速入门。** **一、Hibernate 简介** Hibernate 提供了丰富的API,简化了Java应用程序与关系数据库之间的交互。它通过XML配置文件或注解来定义...

    hibernate+jsp例子

    7. CRUD操作:在这个例子中,我们可以通过Hibernate实现对"shopping-cart"相关的数据库操作,如添加商品到购物车(Create)、查看购物车内容(Read)、修改购物车商品数量(Update)和删除购物车商品(Delete)。...

    spring+Hibernate+jsp的简单例子

    这个"spring+Hibernate+jsp的简单例子"是为初学者提供了一个了解和学习这些技术如何协同工作的实践项目。下面我们将深入探讨这三个组件以及它们在Web开发中的应用场景。 1. Spring框架:Spring是一个全面的Java企业...

    Hibernate实践例子程序

    Hibernate 是一个开源的O/R mappimg的框架,基于JDBC提供了一种持久性数据管理的方案,相对于EntityBean来说是相当轻量级的。...还有一个ddl2hbm,是根据数据库来导出表结构,并生成映射文件和POJO class。

    使用Hibernate的一个完整例子

    通过这个例子,我们可以看到Hibernate如何将Java对象和数据库表进行映射,以及如何执行CRUD操作,同时理解了配置、事务处理、关联和缓存等关键概念。在实际项目中,根据需求,还可以探索更高级的功能,如 Criteria ...

    jsp+Spring+hibernate 博客系统

    在本文中,我们将深入探讨一个采用JSP、Spring和Hibernate技术构建的博客系统。这种组合提供了强大的功能,包括后端业务逻辑管理、持久层支持以及用户友好的前端界面。 **JSP (JavaServer Pages)** JSP是Java的一...

    第一个hibernate例子

    个人的第一个hibernate例子,下载后添加表,修改数据库连接,用户名密码即可使用。 参考网址: https://blog.csdn.net/yerenyuan_pku/article/details/64209343

    Hibernate(23):一个较为复杂些的例子

    在这个例子中,我们可能会遇到一个多对多的关系映射,比如角色(Role)和权限(Right)。在数据库设计中,角色可以拥有多个权限,权限也可以被多个角色共享,这样的关系需要通过关联表(RoleRight)来实现。在...

    hibernate第一个例子

    【hibernate第一个例子】 在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作。本示例将引导初学者了解如何使用Hibernate进行简单的数据库连接和操作。 首先,我们需要...

    我的第一个hibernate例子

    # Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的...

    Hibernate 经典例子全

    Hibernate支持单继承和多层继承的映射,通过`&lt;subclass&gt;`或`&lt;joined-subclass&gt;`标签将子类映射到数据库中的特定表,这在设计复杂的对象模型时非常有用。 **四、一对一关系映射** 在`hibernate_one2one_ufk_1`示例...

    jsp+hibernate+struts2简单登录和注册

    它结合了三种关键技术:JSP(JavaServer Pages)、Hibernate(一个对象关系映射框架)以及Struts2(一个MVC框架)。这些技术的组合旨在简化Web应用开发,提供数据持久化、用户界面和业务逻辑的协调处理。 描述中...

    Spring Hibernate 集成的例子

    这个例子可能是通过创建一个简单的Java项目,然后引入Spring和Hibernate的相关库,配置相应的XML文件,以及编写对应的Java代码来展示集成过程。 描述中提到的“博文链接:https://xwhoyeah.iteye.com/blog/517879”...

    Hibernate servlet 和 JSP页面

    【标题】:“Hibernate Servlet 和 JSP 页面” 在Java Web开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。Servlet是Java中用于处理HTTP请求的服务端程序,而JSP...

    struts与hibernate实现文件的上传与动态下载

    通过以上步骤,你可以实现一个基于Struts2和Hibernate的文件上传与动态下载系统。这个系统能够处理用户上传的文件,将其保存到服务器,同时提供动态下载功能,允许用户根据需要下载文件。在实际开发中,还需要考虑...

    一个简单的增删查改demo(jsp,hibernate,struts2)

    【标题】"一个简单的增删查改demo(jsp,hibernate,struts2)"提供了基于Java Web技术栈的数据库操作示例,主要涉及了三个核心组件:JSP(JavaServer Pages)、Hibernate(对象关系映射框架)和Struts2(MVC框架)...

    jsp+servlet++hibernate+购物车系统

    【标题】"jsp+servlet+hibernate+购物车系统"是一个基于Web的电商应用程序,它结合了三种核心技术:JavaServer Pages(JSP)、Servlet和Hibernate。这个系统旨在实现一个完整的购物过程,包括商品浏览、选择商品加入...

    JSP+Hibernate实现留言板

    例如,一个简单的JSP页面可能包含一个表单让用户输入姓名和留言内容,然后通过POST请求提交到服务器。服务器端的Java代码会处理这些数据并保存到数据库。 **2. Hibernate** Hibernate是一个流行的开源对象关系映射...

Global site tag (gtag.js) - Google Analytics