hibernate 简单入门 配置

hibernate两个配置文件,一个是类和表的映射关系文件,一个是数据库连接的配置文件

类和表的映射关系

<?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 auto-import="false">
 <!-- 
        class:将持久化对象(javabean)关联数据库表
            * name:持久化对象的名称(包名)
            * table:表名称
     -->
 <class name="com.itheima.a_primer.Customer" table="a_customer">
  <!-- 
            id:主键映射(必须要有主键)
                * <generator class="increment"></generator>:主键生成策略
                        * increment:自增长
                        
         -->
  <id column="id" name="id" type="integer">
   <generator class="increment"/>
  </id>
  <!-- 
            property:将持久化对象对象(javabean)中的属性映射数据库表的字段
                * name:持久化对象的属性名称
                * type:表示Hibernate的类型(用来将持久化对象的属性类型,映射成数据库所支持的类型)
                        * 写成:java.lang.String
                        * 写成:string
                * column:数据库表列的名字
         -->
  <property generated="never" lazy="false" name="name" type="string">
   <column name="name" sql-type="varchar(50)"/>
  </property>
  <property column="age" generated="never" lazy="false" name="age" type="integer"/>
  <property column="des" generated="never" lazy="false" name="des" type="string"/>
 </class>
</hibernate-mapping>

连接配置

<?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/itheima0309?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>
        <!-- 
            映射文件to数据库表
                * 指定程序运行时是否在数据库自动生成数据表
                * create:如果数据库中没有表,可以创建表,但是每次操作都会先删除表,再创建表
                * none:默认:不能通过hibernate的映射文件不能创建表,有表会直接操作
                * update:如果数据库中没有表,可以创建表,如果有表,就直接操作,不需要创建表
        -->
        <property name="hibernate.hbm2ddl.auto">update</property> 
        <!-- 
            在控制台显示sql语句(方便我们查看hibernate底层输出的sql)
         -->
        <property name="hibernate.show_sql">true</property>
        
        
        
    </session-factory>
</hibernate-configuration>

代码操作

实体类遵循javabean规范

package com.itheima.a_primer;

public class Customer {

    private Integer id;//主键字段
    private String name;
    private Integer age;
    private String des;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getDes() {
        return des;
    }
    public void setDes(String des) {
        this.des = des;
    }
    
    
}

测试存储

package com.itheima.a_primer;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class CopyOfApp {

    @Test
    public void save(){
        //加载hibernate.cfg.xml和Customer.hbm.xml
        Configuration configuration = new Configuration();
        configuration.configure();//默认加载classpath路径下(src下)的hibernate.cfg.xml
        /**
         * 方案一:要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同
         * configuration.addClass(Customer.class)
         * 等同于:在hibernate.cfg.xml中配置:
         * <mapping class="com.itheima.a_primer.Customer"/>
         * 
         * 方案二:如果Customer.java和Custoemr.hbm.xml不放在同一个包下
         * configuration.addResource("com/itheima/a_primer/Customer.hbm.xml");
         * 等同于:在hibernate.cfg.xml中配置:
         * <mapping resource="com/itheima/a_primer/Customer.hbm.xml"/>
         */
        configuration.addClass(Customer.class);//加载Customer.java文件(要求:Customer.java和Custoemr.hbm.xml要放置到同一个包下,而且名称要相同)
        //创建SessionFactory类,这是hibernate操作数据库的工厂,相当于jdbc中的连接池
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        //建Session类,这是hibernate操作数据库的核心类,相当于jdbc中的连接(connection)
        Session session = sessionFactory.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现
        Customer c = new Customer();
        c.setName("黄蓉");
        c.setAge(18);
        c.setDes("女侠");
        
        //保存
        session.save(c);
        //提交事务
        tr.commit();
        session.close();
    }
}
package com.itheima.a_primer;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

public class App {

    static SessionFactory sf = null;
    
    static{
        //加载hibernate.cfg.xml和Customer.hbm.xml
        Configuration configuration = new Configuration();
        configuration.configure("com/itheima/a_primer/hibernate.cfg.xml");
        configuration.addClass(Customer.class);
        sf = configuration.buildSessionFactory();
    }
    
    /**保存*/
    @Test
    public void save(){
        Session session = sf.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现
        Customer c = new Customer();
        c.setName("黄老邪");
        c.setAge(68);
        c.setDes("侠");
        
        //保存
        session.save(c);
        //提交事务
        tr.commit();
        session.close();
    }
    
    /**更新*/
    @Test
    public void update(){
        Session session = sf.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现
        Customer c = new Customer();
        c.setId(2);
        c.setName("蓉儿");
        c.setAge(18);
        c.setDes("修改后");
        
        //更新
        session.update(c);
        //提交事务
        tr.commit();
        session.close();
    }
    
    /**8.通过id删除客户信息*/
    @Test
    public void delete(){
        Session session = sf.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现
        Customer c = new Customer();
        c.setId(2);
        
        //删除
        session.delete(c);
        //提交事务
        tr.commit();
        session.close();
    }
    
    /**9.通过id查询客户信息*/
    @Test
    public void findObjectByID(){
        Session session = sf.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现
        Customer c = (Customer) session.get(Customer.class, 3);//或者session.load()
        System.out.println(c.getId()+"     "+c.getName());
        //提交事务
        tr.commit();
        session.close();
    }
    
    /**10. 查询所有的客户信息*/
    @Test
    public void findAll(){
        Session session = sf.openSession();
        //开启事务
        Transaction tr = session.beginTransaction();
        
        //操作对象的过程就是操作数据库表的实现(面向对象的编程)
        //HQL语句:hql语句,操作持久化对象和对象中的属性 select c from Customer c  ===  from Customer c
        //SQL语句:sql语句,操作数据表和字段,select * from a_customer
        String hql = "from Customer c";
        Query query = session.createQuery(hql);
        List<Customer> list = query.list();
        if(list!=null && list.size()>0){
            for(Customer c:list){
                System.out.println(c.getId()+"     "+c.getName());
            }
        }
        //提交事务
        tr.commit();
        session.close();
    }
}
原文地址:https://www.cnblogs.com/baijin05/p/5093568.html