Hibernate的入门配置例子

来源:互联网 发布:消防职业技能鉴定软件 编辑:程序博客网 时间:2024/06/15 09:00

Hibernates入门

案例视图

Customer类<——CustomerService    ^               |    |               VHibernate       Hibernate API[对象关系映射]    Hibernate配置文件    |    V关系数据库[customer表]

第一步:建立itcastHibernate工程

第二步:建立数据库itcasthibernate,可将编码格式设置成UTF-8

第三步:引入hibernate相关的jar包

  1. antlr-2.7.6.jar——>一个语言转换工具,Hibernate利用它实现HQL到SQL的转换
  2. commons-collections-3.1.jar——>collections Apache的工具类,用来增强Java对集合的处理能力
  3. dom4j-1.6.1.jar——>dom4j XML解析器
  4. hibernate-jpa-2.0-api-1.0.1.Final.jar——>JPA接口开发包
  5. hibernate3.jar——>hibernate核心包
  6. javassist-3.12.0.GA.jar——>代码生成工具,Hibernate用它在运行时扩展Java类
  7. jta-1.1.jar——>标准的Java事物(跨数据库)处理接口
  8. junit-4.8.2.jar
  9. log4j-1.2.16.jar
  10. mysql-connector-java-5.1.28-bin.jar
  11. slf4j-api-1.6.1.jar——>Hibernate使用的一个日志系统
  12. slf4j-log4j12-1.7.2.jar

第四步:持久化对象Customer.java(持久化类)

create table customer(  id              int primary key,  name        varchar(12),  age           int,  des           text)public class Customer {    private Integer id;    private String name;    private Integer age;    private String des;}持久化对象的要求:提供一个无参数 public访问控制符的构造器(默认就是)提供一个标识属性,映射数据表主键字段所有属性提供public访问控制符的 set  get 方法属性应尽量使用基本数据类型的包装类型

第五步: hibernate.cfg.xml

在cn.itcast.a_primer中创建hibernate.cfg.xml,hibernate.cfg.xml是hibernate的核心配置文件,用来查询数据库,配置如何操作数据库,加载映射文件等

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/itcasthibernate?useUnicode=true&amp;characterEncoding=utf8</property>        <property name="hibernate.connection.username">root</property>        <property name="hibernate.connection.password">root</property>        <!-- 其他配置 -->        <!-- 方言:用来指定hibernate操作的数据库         方言的作用是:根据方言设置值生成对应的查询语句,因为每个数据库支持的查询是不一样的        Hibernate如果不设置方言,可以进行正常的增删改语句的生成 -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>        <!-- hibernate操作对象用来执行操作数据库表,在控制台中显示sql语句 -->        <property name="hibernate.show_sql">true</property>        <!--             hibernate.hbm2ddl.auto:用来建立对象和表的关联             * create:每次都会先删除表,再创建表,问题不能保存数据             * none:默认值:有表的时候,可以直接操作,没有表就会报错,默认向表中追加数据             * update:没有表就创建表,有表就直接操作数据         -->        <property name="hibernate.hbm2ddl.auto">update</property>        <!-- 加载映射文件                1:class="cn.itcast.a_primer.Customer"(要求类和映射文件放在同一个目录下,而且文件名要相同)                2:resource=cn/itcast/a_primer/Customer.hbm.xml(第二种方式)
        <mapping resource="cn/itcast/a_primer/Customer.hbm.xml"/>-->    </session-factory></hibernate-configuration>

第六步:customer.hbm.xml创建对象-关系映射文件

3 创建对象-关系映射文件
创建对象-关系映射文件(.xml),规范的写法.hbm.xml
Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句映射文件的扩展名为 .hbm.xml 这里Customer.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>    <!--         对象关联表        name:对象的全路径(底层使用反射)        table:映射表的名称     -->    <class name="cn.itcast.a_primer.Customer" table="a_customer">        <!--             对象的属性映射表的字段            type:表示hibernate的映射类型,用来建立java类型和数据库类型的桥梁(非必填项)                    * 使用java类型,比如java.lang.Integer                    * integer            name:对象中的属性名称(必填项)            column:表中的字段名称(非必填项,如果不填写,则默认使用name的值作为字段名称            * generator:hibernate的生成策略(重点)            sql-type="varchar(20)",指定数据库表中列的类型,默认是varchar(255)         -->        <id name="id" type="integer">            <column name="id"></column>            <generator class="increment"></generator>        </id>        <property name="name" type="string">            <column name="name"></column>        </property>        <property name="age" column="age" type="integer"></property>        <property name="des" column="des" type="string"></property>    </class></hibernate-mapping>
  1. 创建对象-关系映射文件
    Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句
    映射文件的扩展名为 .hbm.xml 这里Customer.hbm.xml文件

  2. property元素:设定持久化类的属性和表字段映射
    name属性:指定持久化类的属性的名字
    column属性:指定表中字段的名称
    type属性指定Hibernate映射类型 Hibernate映射类型是java类型与SQL类型的桥梁
    注:该映射文件的规范在org.hibernate. hibernate-mapping-3.0.dtd文件中

第七步:测试单表操作的CRUD

使用测试代码进行测试,创建App的测试类,使用junit进行测试
(1)hibernate的SessionFactory在初始化阶段只初始化一次即可,所有使用静
态代码块进行封装,其中Configuration是用来加载hibernate的配置文件和映射文件的,加载后可以获取SessionFactory。
private static SessionFactory sf = null;

static{    Configuration configuration = new Configuration();    configuration.configure("cn/itcast/a_primer/hibernate.cfg.xml");    configuration.addClass(Customer.class);    sf = configuration.buildSessionFactory();}

(2)新增保存:save方法
/*保存/
@Test
public void save(){
Session s = sf.openSession();
Transaction tr = s.beginTransaction();

    Customer c = new Customer();    c.setName("洪七公");    c.setAge(60);    c.setDes("帮助");    s.save(c);    //或者使用s. persist(Object obj)方法保存    tr.commit();//实质上执行了2步操作,1:s.flush();//清理缓存,让session缓存中的数据与数据库同步,2:事务提交    s.close();//Session的缓存就没有了}

(3)更新:update方法
/*更新/

@Testpublic void update(){    Session s = sf.openSession();    Transaction tr = s.beginTransaction();    Customer c = new Customer();    c.setId(3);    c.setName("黄老邪");    c.setAge(59);    c.setDes("药师");    s.update(c);    tr.commit();    s.close();}

(4)删除:delete方法

@Testpublic void delete(){    Session s = sf.openSession();    Transaction tr = s.beginTransaction();    Customer c = new Customer();    c.setId(3);    s.delete(c);    tr.commit();    s.close();}

(5)查询:get和load方法
/*使用ID查询信息/

@Testpublic void findCustomerById(){    Session s = sf.openSession();    Transaction tr = s.beginTransaction();    Customer c = (Customer) s.get(Customer.class, 2);    System.out.println(c.getId()+"   "+c.getName()+"   "+c.getAge()+"   "+c.getDes());    tr.commit();    s.close();}

(6)查询:query查询(支持hql语句,sql语句,qbc语句)
/*查询所有信息/

@Testpublic void findAllCustomerList(){    Session s = sf.openSession();    Transaction tr = s.beginTransaction();    /**使用Hql语句:操作持久对象和属性     * 复习sql语句:操作数据库表和数据库表的列*/    Query query = s.createQuery("from Customer o");    List<Customer> list = query.list();    if(list!=null && list.size()>0){        for(Customer c:list){            System.out.println(c.getId()+"   "+c.getName()+"   "+c.getAge()+"   "+c.getDes());        }    }    tr.commit();    s.close();}
0 0
原创粉丝点击