一个计算机技术爱好者与学习者

0%

从代理机制初探AOP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.voidking.aop;

import java.util.logging.*;

public class HelloSpeaker {
private Logger logger = Logger.getLogger(this.getClass().getName());
public void hello(String name)
{
logger.log(Level.INFO, "hello method starts...");
System.out.println("hello,"+name);
logger.log(Level.INFO, "hello method ends...");
}
}

在HelloSpeaker类中,当执行hello()方法时,程序员希望该方法执行开始与执行完毕时都留下日志。最简单的做法是上面的程序设计,在方法执行前后加上日志动作。

然而对于HelloSpeaker类来说,日志的这种动作并不属于HelloSpeaker的逻辑,这使得HelloSpeaker增加了额外的职责。

阅读全文 »

名词解释

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

Spring框架是Rod Johnson开发的,2003年发布了Spring框架的第一个版本。Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,从而大大提高了企业应用的开发效率。

Spring为企业应用的开发提供了一个轻量级的解决方案。其中依赖注入、基于AOP的声明式事务管理、多种持久层的整合与优秀的Web MVC框架等最为人们关注。Spring可以贯穿程序的各层之间,但它并不是要取代那些已有的框架,而是以高度的开发性与它们紧密地整合,这也是Spring被广泛应用的原因之一。

Spring使用最基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,任何Java应用都可以从Spring中受益。

官网

http://spring.io

阅读全文 »

应用实例:学生选课系统。
要求:学生登录系统后,可以查看、修改个人信息,查看个人选课情况,选定课程及退选课程。

建立数据库和表

郝同学仍然使用MySQL数据库,scott用户。在xscj数据库中建立登录表、学生表、专业表、课程表,以及学生课程表即连接表。

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
create table dlb(
id int not null primary key,
xh char(6) not null ,
kl varchar(20)
);

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
);

create table zyb(
id int not null auto_increment primary key,
zym varchar(12) not null,
rs int default 0,
fdy varchar(8)
);

create table kcb(
kch char(3) not null primary key,
kcm varchar(12),
kxxq smallint check(kxxq>=1 and kxxq<=8),
xs int default 0,
xf int default 0
);

create table xs_kcb(
xh char(6),
kch char(6),
primary key(xh,kch)
);

阅读全文 »

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
39
40
//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关系映射的主要任务是实现数据库关系表与持久化类之间的映射。

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

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

建立表命令

建立login表和detail表:

1
2
3
4
5
6
7
8
9
10
11
12
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概述中实例的基础上,接着开发。

阅读全文 »