hibernate 配置文件:`
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url" >jdbc:oracle:thin:@localhost:1521:ORCL</property>
<property name="connection.username">scott</property>
<property name="connection.password">orcl</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- <property name="connection.username"/> -->
<!-- <property name="connection.password"/> -->
<!-- DB schema will be updated if needed -->
<!-- <property name="hibernate.hbm2ddl.auto">update</property> -->
<mapping resource="com/hfxt/entiy/Emp.xml"/>
</session-factory>
</hibernate-configuration>
实体类:
package com.hfxt.entiy;
import java.util.Date;
public class Emp {
private Integer empNo;
private String eName;
private String job;
private Integer mgr;
private Date hireDate;
private Double sal;
private Double comm;
private Integer deptNo;
public Emp() {
}
public Emp(String eName, Double sal) {
this.eName = eName;
this.sal = sal;
}
public Integer getEmpNo() {
return empNo;
}
public void setEmpNo(Integer empNo) {
this.empNo = empNo;
}
public String geteName() {
return eName;
}
public void seteName(String eName) {
this.eName = eName;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Integer getMgr() {
return mgr;
}
public void setMgr(Integer mgr) {
this.mgr = mgr;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public Double getComm() {
return comm;
}
public void setComm(Double comm) {
this.comm = comm;
}
public Integer getDeptNo() {
return deptNo;
}
public void setDeptNo(Integer deptNo) {
this.deptNo = deptNo;
}
}
实体类的xml配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- class写持久化类的全限定名 (包名+类名) -->
<class name="com.hfxt.entiy.Emp" >
<id name="empNo" type="java.lang.Integer" column="empno">
<generator class="increment"></generator>
</id>
<property name="comm" type="java.lang.Double" column="comm"/>
<property name="eName" type="java.lang.String" column="ename"/>
<property name="job" type="java.lang.String" column="job"/>
<property name="mgr" type="java.lang.Integer" column="mgr"/>
<property name="hireDate" type="java.util.Date" column="hireDate"/>
<property name="sal" type="java.lang.Double" column="sal"/>
<property name="deptNo" type="java.lang.Integer" column="deptno"/>
</class>
</hibernate-mapping>
实现增加删除的方法:
package com.hfxt.test;
import com.hfxt.entiy.Emp;
import com.hfxt.entiy.EmpCondition;
import com.hfxt.tool.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.junit.Test;
import java.util.Iterator;
import java.util.List;
public class Test02 {
// 查询所有
@Test
public void selectAll()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp";
Query query =session.createQuery(hql);
List<Emp> list=query.list();
// Iterator iterate = query.iterate();
for(Emp emp:list)
{
System.out.println(emp.geteName()+"\t"+emp.getJob());
}
HibernateUtil.closeSession();
}
// 带条件查询
@Test
public void selectif()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp where eName like :ename and sal>:sal";
List<Emp> list=session.createQuery(hql)
.setParameter("ename","%T%")
.setParameter("sal",900.00).list(); // Iterator iterate = query.iterate();
for(Emp emp:list)
{
System.out.println(emp.geteName()+"\t"+emp.getJob()+"\t"+emp.getSal());
}
HibernateUtil.closeSession();
}
// 对象赋值
@Test
public void selectobject()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp where eName like :eName and sal>:sal";
Emp empc=new Emp();
empc.seteName("%T%");
empc.setSal(500.00);
List<Emp> list=session.createQuery(hql)
.setProperties(empc).list(); // Iterator iterate = query.iterate();
for(Emp emp:list)
{
System.out.println(emp.geteName()+"\t"+emp.getJob()+"\t"+emp.getSal());
}
HibernateUtil.closeSession();
}
//动态查询
@Test
public void selectsomeif()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp where 1=1";
EmpCondition empCondition=new EmpCondition();
empCondition.setJob("CLERK");
if (empCondition.getJob()!=null) {
hql+="and job=:job";
}
if (empCondition.getSal()!=null) {
hql+="and sal>:sal";
}
if (empCondition.getStartHiredate()!=null) {
hql+="and hiredate>:startHiredate()";
}
if (empCondition.getEndHireddate()!=null) {
hql+="and hiredate<:endHireddate";
}
List<Emp> list=session.createQuery(hql)
.setProperties(empCondition).list(); // Iterator iterate = query.iterate();
for(Emp emp:list)
{
System.out.println(emp.geteName()+"\t"+emp.getJob()+"\t"+emp.getSal()+"\t"+emp.getHireDate());
}
HibernateUtil.closeSession();
}
//分页
@Test
public void selectpage()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp ";
Integer pageindex=2;
Integer pagesize=3;
List<Emp> list=session.createQuery(hql).setFirstResult((pageindex-1)*pagesize).
setMaxResults(pagesize).list();
for(Emp emp:list)
{
System.out.println(emp.geteName()+"\t"+emp.getJob()+"\t"+emp.getSal());
}
HibernateUtil.closeSession();
}
//投影查询
@Test
public void selectone()
{
Session session= HibernateUtil.currentSession();
String hql="select eName from Emp ";
List<String> list=session.createQuery(hql).list();
for(String str:list)
{
System.out.println(str);
}
HibernateUtil.closeSession();
}
@Test
public void selectsome()
{
Session session= HibernateUtil.currentSession();
String hql="select eName ,sal from Emp ";
List<Object[]> list=session.createQuery(hql).list();
for(Object[] obj:list)
{
System.out.println(obj[0]+"\t"+obj[1]);
}
HibernateUtil.closeSession();
}
@Test
public void selectobj()
{
Session session= HibernateUtil.currentSession();
String hql="select new Emp(eName,sal)from Emp ";
List<Emp> list=session.createQuery(hql).list();
for(Emp emp:list)
{
System.out.println(emp.getSal()+"\t"+emp.geteName());
}
HibernateUtil.closeSession();
}
@Test
public void selecton()
{
Session session= HibernateUtil.currentSession();
String hql="from Emp where empNo=:empno";
Emp emp=(Emp) session.createQuery(hql).setParameter("empno",7369).uniqueResult();
System.out.println(emp.getSal()+"\t"+emp.geteName());
HibernateUtil.closeSession();
}
}
工具类
package com.hfxt.tool;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
// 初始化一个ThreadLocal对象
private static final ThreadLocal sessionTL = new ThreadLocal();
private static Configuration configuration;
private final static SessionFactory sessionFactory;
static {
try {
configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
} catch (Throwable ex) {
ex.printStackTrace();
throw new ExceptionInInitializerError(ex);
}
}
/**
* 获取Session
*/
public static Session currentSession() {
//sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
//也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
//ThreadLocal保证了每个线程都有自己的Session。
Session session = (Session) sessionTL.get();
// 如果session为null,则打开一个新的session
if (session == null) {
//创建一个数据库连接对象session。
session = sessionFactory.openSession();
// 保存该数据库连接session到ThreadLocal中。
sessionTL.set(session);
}
//如果当前线程已经访问过数据库了,
//则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
return session;
}
/**
* 关闭Session
*/
@SuppressWarnings("unchecked")
public static void closeSession(){
Session session = (Session) sessionTL.get();
sessionTL.set(null);
session.close();
}
}