您的位置:首页 > 其它

Hibernate的入门配置例子

2015-03-22 01:05 316 查看

Hibernates入门

案例视图

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


第一步:建立itcastHibernate工程

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

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

antlr-2.7.6.jar——>一个语言转换工具,Hibernate利用它实现HQL到SQL的转换

commons-collections-3.1.jar——>collections Apache的工具类,用来增强Java对集合的处理能力

dom4j-1.6.1.jar——>dom4j XML解析器

hibernate-jpa-2.0-api-1.0.1.Final.jar——>JPA接口开发包

hibernate3.jar——>hibernate核心包

javassist-3.12.0.GA.jar——>代码生成工具,Hibernate用它在运行时扩展Java类

jta-1.1.jar——>标准的Java事物(跨数据库)处理接口

junit-4.8.2.jar

log4j-1.2.16.jar

mysql-connector-java-5.1.28-bin.jar

slf4j-api-1.6.1.jar——>Hibernate使用的一个日志系统

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&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>



创建对象-关系映射文件

Hibernate 采用 XML 格式的文件来指定对象和关系数据之间的映射. 在运行时 Hibernate 将根据这个映射文件来生成各种 SQL 语句

映射文件的扩展名为 .hbm.xml 这里Customer.hbm.xml文件

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方法

/*更新/

@Test
public 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方法

@Test
public 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查询信息/

@Test
public 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语句)

/*查询所有信息/

@Test
public 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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: