Hibernate高级应用

Hibernate批量处理

批量插入

Hibernate直接处理

首先在hibernate.cfg.xml中设置批量尺寸属性hibernate.jdbc.batch_size,最好关闭Hibernate的二级缓存以提高效率。

1
2
3
4
5
6
<hibernate-configuration>
<session-factory>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.jdbc.use_second_level_cache">false</property>
</session-factory>
</hibernate-configuration>

下面批量插入500个课程到数据库表中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//KcbBatch.java
package com.voidking.hibernate.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.voidking.hibernate.model.Kcb;

public class KcbBatch {
public static void main(String[] args){
//创建Session对象
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();

//创建事务对象
Transaction ts=session.beginTransaction();

for (int i = 0; i < 500; i++) {
Kcb kcb = new Kcb();
kcb.setKch(i+"");
session.save(kcb);
if(i%50==0)
{
session.flush();
session.clear();
}
}

ts.commit();

session.close();
sf.close();

}
}

Hibernate关系映射

前言

Hibernate关系映射的主要任务是实现数据库关系表与持久化类之间的映射。

一对一关联(共享主键方式)

在注册某个论坛会员的时候,往往不但要填写登录账户和密码,还要填写其他的详细信息,这两部分信息通常会放在不同的表中。
共享主键方式就是限制两个数据表的主键使用相同的值,通过主键形成一对一映射关系。

建立表命令

建立login表和detail表:

1
2
3
4
5
6
7
8
9
10
11
create table login(
id int4 primary key not null,
username varchar(20) not null,
password varchar(20) not null
);

create table detail(
id int4 primary key auto_increment not null,
truename varchar(8),
email varchar(50)
);

登陆表和详细信息表属于典型的一对一关联关系,可按共享主键方式进行。
在Hibernate概述中实例的基础上,接着开发。

Hibernate概述

名词解释

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装(未完全封装),使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

对目前的JavaEE信息化系统而言,通常采用面向对象分析和面向对象设计的过程。系统从需求分析到系统设计都是按面向对象方式进行。但是到详细设计阶段,由于数据持久化需要保存到关系数据库,不得不自底向上修改设计方案,又回到了按照过程进行编程的老路上来,这是非常令人沮丧的。

但人们的智慧是无穷的,遇到问题总会想办法解决,而不是与之妥协或绕道而走。Hibernate的问世解决了这个问题,Hibernate是一个面向Java环境的对象/关系映射工具,它可将对象模型表示的对象映射到基于SQL的关系数据模型中。这样就不用再为怎样用面向对象的方法进行数据持久化而大伤脑筋了。

Struts2综合应用实例

前言

本实例实现了一个简单的功能:添加学生信息。
我们仍然在Struts2概述中struts2项目的基础上进行。

建立数据库

使用MySQL,scott用户,建立数据库,名为XSCJ,其中有一张表XSB,结构如下:

项目名 列名 数据类型 可空 默认值 说明
学号 XH 定长字符串型(char6) × 主键
姓名 XM 不定长字符串型(varchar8) ×
性别 XB 位型(bit) × 值约束:1/0。1表示男,0表示女
出生时间 CSSJ 日期时间型(datetime)
专业Id ZY_ID 整数型(int) ×
总学分 ZXF 整数型(int) 0 0<=总学分<160
备注 BZ 不定长字符串型(varchar500)
照片 ZP longblob
1
2
3
4
5
6
7
8
9
10
11
12
13
create database xscj;
use xscj;

create table xsb(
xh char(6) not null primary key,
xm varchar(8) not null,
xb bit not null check(xb=0 or xb=1),
cssj datetime ,
zy_id int,
zxf int default 0 check(0<=zxf<160),
bz varchar(500),
zp longblob
);

Struts2文件上传

Struts2文件上传

上传单个文件

Struts2中,提供了一个很容易操作的文件上传组件。
用Struts2上传单个文件的功能非常容易实现,只要使用普通的Action即可。但为了获得一些文件上传的信息,如上传文件名等,需要按照一定规则来为Action类增加一些getter和setter方法。
Struts2的文件上传默认使用的是Jakarta的Common-FileUpload文件上传框架。因此需要在Web应用中增加两个Jar包,即common-io-*.jar和common-fileupload-*.jar。

我们接着在struts2概述中的struts2项目中开发文件上传实例。

指定文件夹

在D盘下新建upload文件夹,上传的文件放到这个目录下。