Hibernate第一个程序

来源:互联网 发布:python教程3.6.2 编辑:程序博客网 时间:2024/06/14 05:33

定义持久化类

持久化类也叫实体类,是用来存储要与数据库交互的数据。持久化类的实例称为持久化对象(Persistent Object,PO),其作用是完成对象持久化操作。简单地说,通过PO可以用面向对象的方式操作数据库,实现数据增、删、改操作。

Student.java

package FirstProgram;public class Student {private Long id;private long studentNo;private String studentName;private int sage;private String major;public Student() {}public Student(long studentNo, String studentName, int sage, String major) {super();this.studentNo = studentNo;this.studentName = studentName;this.sage = sage;this.major = major;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public long getStudentNo() {return studentNo;}public void setStudentNo(long studentNo) {this.studentNo = studentNo;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public int getSage() {return sage;}public void setSage(int sage) {this.sage = sage;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}}


定义映射文件

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="FirstProgram"><class name="Student" table="student" ><id name="id" column="id"><generator class="identity"/></id><property name="studentNo" type="long" column="student_no"/><property name="studentName" type="string" column="student_name"/><property name="sage" type="integer" column="sage"/><property name="major" type="string" column="major"/></class></hibernate-mapping>


编写配置文件

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate??useUnicode=true&characterEncoding=utf-8</property><property name="connection.username">root</property><property name="connection.password">Cham</property><!-- 指定JDBC连接池(use the built-in) --><property name="connection.pool_size">1</property><!-- 指定SQL方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 打开Hibernate自动会话上下文管理 --><property name="current_session_context_class">thread</property><!-- 关闭二级缓存 --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- 指定将所有执行的SQL语句回显到stdout --><property name="show_sql">true</property><!-- 指定在启动时对表进行更新 --><property name="hibernate.hbm2ddl.auto">update</property><!-- 指定映射文件,若有多个映射文件,使用多个mapping元素指定 --><mapping resource="FirstProgram/Student.hbm.xml"/></session-factory></hibernate-configuration>

测试程序

Main.java

package FirstProgram;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;//import org.hibernate.service.ServiceRegistryBuilder;  版本4import org.hibernate.boot.registry.StandardServiceRegistryBuilder;//版本5import org.hibernate.SessionFactory;import org.hibernate.Session;import org.hibernate.Transaction;import FirstProgram.Student;public class Main {public static void main(String[] args) {//加载配置文件hibernate.cfg.xmlConfiguration configuration = new Configuration().configure();configuration.addClass(Student.class);//版本5中需增加该方法,否则无法找到实体类//创建服务注册对象/*ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();版本4*/ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();//版本5//创建会话工厂对象SessionFactory factory =configuration.buildSessionFactory(serviceRegistry);//创建会话对象Session session = factory.openSession();//创建一个事务对象Transaction tx = session.beginTransaction();Student student = new Student();student.setStudentNo(20170707);student.setStudentName("王小明");student.setSage(20);student.setMajor("计算机科学");session.save(student);//将student对象持久化到数据表中System.out.println("插入学生成功!");//从数据库中读取一个对象Student stud = session.get(Student.class, new Long(1));System.out.println(stud.getStudentName()+" "+stud.getSage());tx.commit();//提交事务session.close();factory.close();}}

结果





使用HibernateUtil辅助类

HibernateUtil.java

package util;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import FirstProgram.Student;public class HibernateUtil {private static SessionFactory factory;private static ServiceRegistry serviceRegistry;static{try{Configuration configuration = new Configuration().configure();configuration.addClass(Student.class);serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();factory = configuration.buildSessionFactory(serviceRegistry);}catch(HibernateException e){e.printStackTrace();}}//返回会话工厂对象public static SessionFactory getSessionFactory(){return factory;}//返回一个会话对象public static Session getSession(){Session session = null;if(factory!=null)session = factory.openSession();return session;}//关闭指定的会话对象public static void closeSession(Session session){if(session!=null){if(session.isOpen())session.close();}}}

测试

StudentDemo.java

package FirstProgram;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import util.HibernateUtil;public class StudentDemo {public static void main(String[] args) {try{Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();Student student = session.get(Student.class, new Long(1));student.setStudentName("王晓明");session.update(student);tx.commit();session.close();}catch(HibernateException he){he.printStackTrace();}try{Session session = HibernateUtil.getSession();Transaction tx = session.beginTransaction();//创建查询对象Query query = session.createQuery("from Student s");List<Student> students = query.list();for(int i=0;i<students.size();i++){Student student = students.get(i);System.out.println("学号:"+student.getStudentNo()+"\t姓名:"+student.getStudentName()+"\t年龄:"+student.getSage()+"\t专业:"+student.getMajor());}tx.commit();session.close();}catch(HibernateException he){he.printStackTrace();}}}

结果





文件位置及JAR包




原创粉丝点击