工程结构:
代码:
package com.zk.domain; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.zk.domain.Student" table="t_student"> <id name="id" column="id"> <generator class="identity" /> </id> <property name="name" column="name" /> <property name="age" column="age" /> </class> </hibernate-mapping>
package com.zk.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static SessionFactory sessionFactory = buildSessionFactory(); public static SessionFactory buildSessionFactory() { return new Configuration().configure().buildSessionFactory(); } public static Session getSession(){ return sessionFactory.getCurrentSession(); } }
package com.zk.main; import java.util.List; import org.hibernate.Hibernate; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.metamodel.binding.HibernateTypeDescriptor; import org.hibernate.type.Type; import com.zk.domain.Student; import com.zk.util.HibernateUtil; public class HibernateTest { public static void main(String[] args) { Student student = new Student();//student属于瞬时状态 student.setName("zhaoliu"); student.setAge(29); //增加 addStudent(student); //修改 student.setAge(30);//student属于持久化状态 HibernateUtil.getSession().beginTransaction(); HibernateUtil.getSession().update(student); HibernateUtil.getSession().getTransaction().commit(); Session session = HibernateUtil.getSession(); session.beginTransaction(); //查询所有元素 List<Student> students = session.createQuery("from Student").list(); for (Student s : students) { System.out.println("name="+s.getName()+";age="+s.getAge()); } //查询某个元素 Query query = session.createQuery("from Student as student where student.id=:id"); query.setParameter("id", 1); System.out.println(((Student)(query.uniqueResult())).getName()); //查询数据 Long count = ((Long)(session.createQuery("select count(*) from Student").uniqueResult())).longValue(); System.out.println("count="+count); //删除 Query deleteQuery = session.createQuery("delete Student as s where s.name=:name"); deleteQuery.setString("name", "zhangsan"); int deleteCount = deleteQuery.executeUpdate(); System.out.println("deleted count="+deleteCount); session.getTransaction().commit(); } public static void addStudent(Student student){ Session session=null; Transaction ts = null; try { session=HibernateUtil.getSession(); ts = session.beginTransaction(); session.save(student); session.disconnect(); ts.commit(); } catch (Exception e) { if(ts!=null) ts.rollback(); e.printStackTrace(); }finally{ if(session!=null&&session.isOpen()) session.close(); } } }
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="connection.url">jdbc:mysql://localhost/test</property> <property name="connection.username">root</property> <property name="connection.password">123</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/zk/domain/Student.hbm.xml"/> </session-factory> </hibernate-configuration>