hibernate CoreAPI

// model
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Transient;

@Entity
public class Teacher {

private int id;
private String name;
private String title;
private String yourWifeName;
private Date birthDate;
private boolean good;
private Gender gender;

@Enumerated(EnumType.STRING)
@Column(length = 10)
public Gender getGender() {
return gender;
}

public void setGender(Gender gender) {
this.gender = gender;
}

public boolean isGood() {
return good;
}

public void setGood(boolean good) {
this.good = good;
}

@Transient
@Column(length = 10)
public String getYourWifeName() {
return yourWifeName;
}

public void setYourWifeName(String yourWifeName) {
this.yourWifeName = yourWifeName;
}

@Id
@GeneratedValue // 主键生成策略
public int getId() {
return id;
}

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

@Column(length = 10)
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Column(length = 10)
public String getTitle() {
return title;
}

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

public Date getBirthDate() {
return birthDate;
}

public void setBirthDate(Date birthDate) {
this.birthDate = birthDate;
}
}
// test
import java.util.Date;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class HibernateCoreAPITest {
private static SessionFactory sessionFactory;

@BeforeClass
public static void beforeClass() { // 全局只需要一个 SessionFactory
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
}

@AfterClass
public static void afterClass() {
sessionFactory.close();
}

@Test
public void testSchemaExport() { // 导出表
new SchemaExport(new AnnotationConfiguration().configure()).create(
true, true);
// 第一个输出SQL语句 第二个导出表
}

@Test
public void testTeacherSave() {

Teacher t = new Teacher();

t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());

// Session session = sessionFactory.openSession(); //
// openSession每次new新的session
Session session = sessionFactory.getCurrentSession();
// getCurrentSession从上下文找,由<property
// name="current_session_context_class">thread</property>控制

session.beginTransaction();
session.save(t);

Session session2 = sessionFactory.getCurrentSession();

System.out.println(session == session2); // true

session.getTransaction().commit(); // 提交关闭session

Session session3 = sessionFactory.getCurrentSession();

System.out.println(session == session3); // false
}

@Test
public void testSaveWith3State() {

Teacher t = new Teacher(); // transient 内存中一个对象,没有持久化标识,缓存和数据库中没有

t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
System.out.println(t.getId()); // persistent 拥有持久化标识,缓存和数据库中有
session.getTransaction().commit(); // detached 上下文被关闭,缓存没有,数据库中有

System.out.println(t.getId());
}

@Test
public void testDelete() { // 只要有ID号就可以删除,transient状态没ID

Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.save(t);
System.out.println(t.getId());
session.getTransaction().commit();

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.delete(t); // 删除detached状态对象
session2.getTransaction().commit();
}

@Test
public void testDelete2() {

Teacher t = new Teacher();
t.setId(2); // 只要有ID号就可以删除,手动设置ID

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.delete(t);
session2.getTransaction().commit();
}

@Test
public void testLoad() { // 先从缓存查找

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.load(Teacher.class, 24); // 默认支持lazy,生成代理

System.out.println(t.getName()); // 要用到对象时才真正加载对象
session.getTransaction().commit(); // 关闭session
System.out.println(t.getClass());
// class com.bjsxt.hibernate.Teacher_$$_javassist_1(代理类),为teacher的一个子类
}

@Test
public void testGet() { // 先从缓存查找

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 24); // 直接返回加载对象

session.getTransaction().commit();
System.out.println(t.getName());
System.out.println(t.getClass()); // class com.bjsxt.hibernate.Teacher
}

@Test
public void testUpdate1() {

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 24); // persistent

session.getTransaction().commit(); // detached

t.setName("zhangoshi");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.update(t);

session2.getTransaction().commit();
}

@Test
public void testUpdate2() {

Teacher t = new Teacher();
t.setName("zhanaoshi");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.update(t); // 不能更新transient状态对象

session2.getTransaction().commit();
}

@Test
public void testUpdate3() {

Teacher t = new Teacher();
t.setId(1);
t.setName("zhanaoshi");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.update(t);

session2.getTransaction().commit();
}

@Test
public void testUpdate4() {

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.get(Teacher.class, 41);
t.setName("zhangsan2"); // 修改persistent状态
session.getTransaction().commit();
}

@Test
public void testUpdate5() { // xml配置dynamic-update 用于控制修改指定属性,还是修改所有属性

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Student s = (Student) session.get(Student.class, 61);
s.setName("zhangsan5");
session.getTransaction().commit();

s.setName("z4");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.update(s); // session间的save
session2.getTransaction().commit();
}

@Test
public void testUpdate6() {

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Student s = (Student) session.get(Student.class, 62);
s.setName("zhangsan6");
session.getTransaction().commit();

s.setName("z4");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.merge(s);
session2.getTransaction().commit();
}

@Test
public void testUpdate7() {

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Query q = session
.createQuery("update Student s set s.name='z5' where s.id = 1");
q.executeUpdate(); // HQL
session.getTransaction().commit();
}

@Test
public void testSaveOrUpdate() {

Teacher t = new Teacher();
t.setName("t1");
t.setTitle("middle");
t.setBirthDate(new Date());

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(t);

session.getTransaction().commit();

t.setName("t2");

Session session2 = sessionFactory.getCurrentSession();
session2.beginTransaction();
session2.saveOrUpdate(t);
session2.getTransaction().commit();
}

@Test
public void testClear() { // 实验

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.load(Teacher.class, 62);
System.out.println(t.getName()); // 从缓存中获取ID为62的name

session.clear(); // 清除缓存

Teacher t2 = (Teacher) session.load(Teacher.class, 62);
System.out.println(t2.getName());
session.getTransaction().commit();
}

@Test
public void testFlush() {

Session session = sessionFactory.getCurrentSession();
session.beginTransaction();
Teacher t = (Teacher) session.load(Teacher.class, 2);
t.setName("tttt");

session.flush();
/**
*
*/

t.setName("ttttt");

session.getTransaction().commit();
}

public static void main(String[] args) {
beforeClass();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值