增删改查:
- save
- update
- delete
- get/load(查询单个记录)
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
//测试类
public class StudentsTest {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){ //初始化
//创建配置对象
Configuration config=new Configuration().configure();
//创建服务注册对象
ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
//创建会话工厂对象
sessionFactory=config.buildSessionFactory(serviceRegistry);
//会话对象,打开会话
session=sessionFactory.openSession();
//打开事务
transaction=session.beginTransaction();
}
@After
public void destory(){ //释放资源
//提交事务
transaction.commit();
//关闭会话
session.close();
//关闭会话工厂
sessionFactory.close();
}
@Test
public void testSaveStudents(){
//生成学生对象
// Students s=new Students(1,"张三丰","男",new Date(),"武当山");
Students s=new Students();
// s.setSid(1); //native:主键自动增长,无须赋值;若强制赋值无效果
s.setSname("张三丰");
s.setGender("男");
s.setBirthday(new Date());
// s.setAddress("武当山");
Address address=new Address("710068","02988567123","西安市");
s.setAddress(address);
//保存对象进入数据库
session.save(s);
}
@Test
public void testGetStudents(){ //查:get方法
Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
System.out.println(s);
}
@Test
public void testLoadStudents(){ //查:load方法
Students s=(Students)session.load(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
System.out.println(s);
}
@Test
public void testUpdateStudents(){ //更新
Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
s.setGender("女");
session.update(s);
}
@Test
public void testDeleteStudents(){ //删除
Students s=(Students)session.get(Students.class, 1); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
session.delete(s);
}
}
hibernate.cfg.xml:
<property name="hbm2ddl.auto">update</property>
执行save,数据库:
查询get方法,控制台:
查询load,控制台:
执行update,数据库:
执行delete,数据库:
get和load的区别:
一:
get:立刻发送sql语句,返回的就是本身的持久化类的对象。
load:不立刻发送sql语句,返回代理对象,只有真正使用这个对象时才发送sql语句。
二:
@Test
public void testGetStudents(){ //查:get方法
Students s=(Students)session.get(Students.class, 100); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
// System.out.println(s.getClass().getName()); //打印对象的类对象的名字
System.out.println(s);
}
@Test
public void testLoadStudents(){ //查:load方法
Students s=(Students)session.load(Students.class, 100); //第一个参数表示类对象(即查询的表所对应的类对象,本例查询students表,对应Students类);第二个参数是标识符,即所要查询的记录对应的主键。
// System.out.println(s.getClass().getName()); //打印对象的类对象的名字
System.out.println(s);
}