
2011年10月9日
> 引言
在Jorm中,主鍵的生成策略主要有AUTO、UUID、GUID、FOREIGN、SEQUENCE、INCREMENT、IDENTITY、ASSIGNED,下面分別來講述這幾種策略的應用場景
> GenerationType.AUTO
Jorm的默認主鍵策略,自動增長型,自增步長為1,適用數據類型int,long,如:
private int id // 默認策略就是AUTO,故可以不寫主鍵策略
或
@Id(GenerationType.AUTO) // 默認策略可以省去不寫的哦~
private int id
> GenerationType.INCREMENT
顧名思義,增長型,適用數據類型int,long。自增步長為1
1> 使用默認自增步長1,如:
@Id(GenerationType.INCREMENT)
@Column("item_id")
private long id;
2> 使用自定義步長,如:
@Id(value = GenerationType.INCREMENT, incrementBy=3) // 這里自增步長為3,注意寫法
private int id;
> GenerationType.IDENTITY
對于那些實現了自動增長的數據庫,可以使用IDENTITY,如MySQL,SQL Server,PostreSQL,前提是
MySQL數據庫中建表語句定義了主鍵為:id(你的主鍵列名) int NOT NULL AUTO_INCREMENT 或
id(你的主鍵列名) bigint NOT NULL AUTO_INCREMENT
SQL Server數據庫中建表語句定義了主鍵為:id int identity(xx, xx) 如此類似
PostreSQL數據庫中建表語句定義了主鍵為:id bigserial 或 id serial
使用例子
@Id(GenerationType.IDENTITY)
@Column("id")
private long sid;
> GenerationType.UUID
與數據庫無關的策略,適用數據類型:字符串類型,適用所有數據庫,長度須大于或等于32
@Id(GenerationType.UUID)
private String id;
> GenerationType.GUID
與UUID有點類似,不過這個id值是又數據庫來生成的,適用于數據庫MySQL、PostgreSQL、SQL Server、Oracle等
@Id(GenerationType.GUID)
private String id;
> GenerationType.FOREIGN
適用于一對一關系中引用了另一個對象的主鍵作為自己的主鍵的情形,如:
@Id(GenerationType.FOREIGN)
@Column("identity_number")
private String identity;
> GenerationType.SEQUENCE
這個不用多說,應用于Oracle、H2、PostgreSQL等有sequence序列功能的數據庫
> GenerationType.ASSIGNED
用戶自定義生成,需要由程序員手工給主鍵主動賦值
posted @
2011-10-10 15:17 jadmin 閱讀(1492) |
評論 (3) |
編輯 收藏
直接上代碼吧:
> Demo one
public void batch_op_one() {
session = Jorm.getSession();
JdbcBatcher batcher = session.createBatcher();
batcher.addBatch("delete from t_id_auto");
batcher.addBatch("delete from t_incre");
batcher.addBatch("delete from t_user");
batcher.execute();
session.beginTransaction();
long start;
try {
start = System.currentTimeMillis();
String sql = "INSERT INTO t_user(sex,age,career,name,id) VALUES(?,?,?,?,?)";
for (int i = 0; i < 100000; i++) {
batcher.addBatch(sql, new Object[] {"男", Numbers.random(98), Strings.random(10), Strings.fixed(6), (i+1) });}
String sqlx = "INSERT INTO t_id_auto(name, id) VALUES(?, ?)";
for (int i = 0; i < 100000; i++) {
batcher.addBatch(sqlx, new Object[] {Strings.fixed(6), (i+1)});
if(i > 200) {
//Integer.parseInt("kkk");
}
}
batcher.execute();
System.out.println(System.currentTimeMillis() - start);
} catch (Exception e) {
session.rollback();
} finally {
session.endTransaction();
session.close();
}
}
> Demo two
public void batch_op_two() {
session = Jorm.getSession();
session.beginTransaction();
session.clean(User.class);
JdbcBatcher batcher = session.createBatcher();
batcher.setBatchSize(500);// 指定每批處理的記錄數
User u;
int times = 20 * 100;
long start = System.currentTimeMillis();
for(int i = 0; i < times; i++) {
String sex = (i % 2 == 0 ? "男" : "女");
u = new User(Strings.fixed(6), sex, Numbers.random(100), Strings.random(16));
batcher.save(u);
}
batcher.execute();
session.endTransaction();
long cost = (System.currentTimeMillis() - start);
System.out.println("Total:" + cost);
System.out.println("Each:" + (float) cost / times);
session.close();
}
項目地址:http://javaclub.sourceforge.net/jorm.html
下載地址: http://sourceforge.net/projects/javaclub/files/jorm/
posted @
2011-10-09 20:09 jadmin 閱讀(1294) |
評論 (0) |
編輯 收藏