Hibernate环境配置与实战Demo

来源:互联网 发布:手机java游戏 网站 编辑:程序博客网 时间:2024/06/14 00:01

这里写图片描述

一、新建java项目,检查项目的编码,加入JDK1.7以上

二、引入jar包

2.1 引入required文件下面的所有jar包

    * antlr-2.7.7.jar    实现hql到sql的转换    * dom4j-1.6.1.jar       xml解析    * geronimo-jta_1.1_spec-1.1.1.jar Geronimo是一个项目(整合优秀的组件和设计理念)    * hibernate-commons-annotations-5.0.1.Final.jar 注解    * hibernate-core-5.0.11.Final.jar           核心包    * hibernate-jpa-2.1-api-1.0.0.Final.jar  hibenate对JPA的支持    * jandex-2.0.0.Final.jar                 用来索引annotation    * javassist-3.18.1-GA.jar                  字节码操作    * jboss-logging-3.3.0.Final.jar        使用一个注解处理器来实现你的带注释的接口类

2.2 引入jpa文件夹下面的jar包

    * hibernate-entitymanager-5.0.11.Final.jar   hibernate对jpa的实现

2.3 引入jpa-metamodel-generator文件夹下面的jar包

    * hibernate-jpamodelgen-5.0.11.Final.jar  关于模型自动生成的jar包

2.4 引入option/c3p0连接池的jar包

    * c3p0-0.9.2.1.jar    * mchange-commons-java-0.2.3.4.jar      c3p0新版本的辅助包    * hibernate-c3p0-5.0.11.Final.jar

2.5 引入option/ecache下面的slf4j-api.jar

    SLF4J ,simple logging facade for java 简单的日志门面    它不是具体的日志解决方案,它只是提供了统一的记录日志的接口   ,其他组件就按照其提供的接口实现即可    * slf4j-api.jar    * slf4j-log4j.jar    * log4j.jar

2.6 引入junit /mysql/oracle
* junit-4.11.jar
* hamcrest-core-1.3.jar
* mysql-connector-java-5.0.8-bin.jar
* ojdbc14.jar

三、数据库建立表(create table t_student(st_id int,st_name varchar(20), st_age int);)
定义一个对象(对应于数据库表的持久化对象)entity

四、hibernate的配置文件(hibernate.cfg.xml)

 * 引用约束  核心包org.hibernate.hibenate-configuration-3.0.dtd * 数据库连接  project\etc\hibernate.properties * 数据源配置 c3po * 方言配置 * 上下文配置
<?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>        <!-- 连接数据库四要素  数据库驱动 url username password -->        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/test</property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">123456</property>        <!--用c3p0的数据源连接方式  -->        <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>        <!--数据库方言  -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!--session上下文  -->        <property name="hibernate.current_session_context_class">thread</property>        <!--打印sql  -->        <property name="hibernate.show_sql">true</property>        <!--打印的sql格式化  -->        <property name="hibernate.format_sql">true</property>        <!--加入映射文件路径  -->        <mapping resource="com/xxx/hibernatestudy/sysmanage/entity/student.hbm.xml" />    </session-factory></hibernate-configuration>

五、数据库表与持久化对象的映射关系配置文件(xxx.hbm.xml)

 * 引入约束 * 持久化对象和数据库表的对应关系 * 讲映射文件引入到主配置文件hibernate.cfg.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>    <class name = "com.xxx.hibernatestudy.sysmanage.entity.Student" table = "T_STUDENT">        <id name = "stId" column = "ST_ID">            <generator class="native"></generator>        </id>        <property name="stName" column = "ST_NAME"></property>        <property name="stAge" column = "ST_AGE"></property>        </class></hibernate-mapping>   

六、编写测试代码

package com.xxx.hibernatestudy.sysmanage.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.xxx.hibernatestudy.sysmanage.entity.Student;public class HibernateDemoTest {    private Session getSession() {        //1:读取hibenrate.cfg.xml配置文件            Configuration configer = new Configuration().configure();        //Configuration configer = new Configuration().configure("xxx.cfg.xml");                //2:创建sessionFactory        SessionFactory sessionFactory= configer.buildSessionFactory();        //3:获取session        Session session = sessionFactory.getCurrentSession();        return session;    }    @Test    public void testAdd(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = new Student();            student.setStName("keshao");student.setStAge(18);            session.save(student);            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }    }    @Test    public void testPersist(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = new Student();            student.setStName("muniuliuma");student.setStAge(18);            session.persist(student);  //jpa提供的接口            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }        }    @Test    public void testDel(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = new Student();            student.setStId(23);            //student.setStName("muniu");student.setStAge(18);            session.delete(student); //删除方法是根据对象的id来操作的            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }    }    @Test    public void testUpdate(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = new Student();            student.setStId(22);            student.setStName("liuma");student.setStAge(18);            session.update(student);//修改方法是根据对象的id来操作的            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }    }    @Test    public void testSaveOrUpdate(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = new Student();            student.setStId(25);            student.setStName("muniu&liuma");student.setStAge(18);            session.saveOrUpdate(student);//如果对象没有id,则为增加操作,如果有id,则为修改操作            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }        }    @Test    public void testGet(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = session.get(Student.class, 160);            if(student!=null)                 System.out.println(student.getStName()+"---"+student.getStAge());            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }        }    @Test    public void testLoad(){        Session session = getSession();        try{            //4:开启事务            session.beginTransaction();                 //session.getTransaction().begin();            //5:增删改查操作            Student student = session.load(Student.class, 160);            if(student!=null)                System.out.println(student.getStName()+"---"+student.getStAge());            //6:事务提交            session.getTransaction().commit();        }catch(Exception e){                e.printStackTrace();            //7:事务回滚            session.getTransaction().rollback();        }        }}

这里写图片描述

原创粉丝点击