Hibernate基础(1)

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的配置文件,创建在src目标中,配置访问数据库的驱动,用户名,密码等 -->
<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class" >com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/test?characterEncoding=utf-8</property>
        <property name="connection.username">root</property>
        <property name="connection.password">admin</property>
        <!-- 告诉hibernate使用的是MySQL数据库 -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- hibernate事务管理方式 ,每个线程一个事务 -->
        <property name="current_session_context_class">thread</property>
        <!-- true:打印出sql语句到控制台 -->
        <property name="show_sql">true</property>
        <!-- 表示是否会自动更新数据库的表结构,可以不用创建表,自动创建 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 对应的类的xml -->
        <mapping resource="com/study/hibernate/Category.hbm.xml" />
    </session-factory>
</hibernate-configuration>

每个类的单独配置:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <!-- 这是类Category的配置文件,创建在该类包目录中, hibernate-mapping代表该类的包名-->
<hibernate-mapping package="com.study.hibernate">
    <!-- name:类名,table:该类对应的表名 -->
    <class name="Category" table="Category">
    <!-- name:主键名 column:对应表主键字段id -->
        <id name="id" column="id">
        <!-- id的自增长方式采用数据库的本地方式 -->
        <generator class="native"></generator>
        </id>
        <!-- 类Category的属性名 -->
        <property name="name" />    
    </class>
</hibernate-mapping>

类代码:一定要有getter,setter

package com.study.hibernate;

public class Category {
    public int id;
    public String name;
    public Category(String name) {
        this.name=name;
    }
    public Category() {}
    public void setId(int id) {
        this.id=id;
    }
    public int getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name=name;
    }
}

Hibernate中类的状态:

    //对象在hibernate中的状态,瞬时,持久,脱管
    public static void method() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        Category c=new Category("hibernate");//此时Category对象是瞬时的
        s.save(c);//此时对象Category是持久的
        s.getTransaction().commit();//此时对象Category是脱管的
        s.close();
        sf.close();

Hibernate获取存在数据库中对象的的方法

    //获取数据库中数据的方法
    public static void getMethod() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        //传入Category类的类类型,和主键id
        Category c=(Category)s.get(Category.class, 1);
        s.getTransaction().commit();
        System.out.println(c.getName());
        s.close();
        sf.close();
    }

Hibernate删除数据的方法

    //删除数据的方法
    public static void delete() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        //获取id为5的字段
        Category c=(Category)s.get(Category.class, 5);
        //删除获得的字段
        s.delete(c);
        s.getTransaction().commit();
        s.close();
        sf.close();
    }

Hibernate更新数据的方法

    //修改数据的方法
    public static void update() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        //获取对象
        Category c=(Category)s.get(Category.class, 4);
        System.out.println(c);
        //修改对象 
        c.setName("newIphone");
        //更新对象
        s.update(c);
        s.getTransaction().commit();
        s.close();
        sf.close();
        
    }

Hibernate查找数据的方法(不常用)

    //查找数据的方法(不常用)
    public static void select() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        //获取Query对象 ,HQL语句不用写select* 
        Query q=s.createQuery("from Category c where c.name like?");
        //与preparedStatement不同的是计算从0开始;
    //%name:表示左匹配。 name%:表示右匹配。 %name%:表示模糊查询。
q.setString(0, "%iphone2%"); s.getTransaction().commit(); List<Category> list=q.list(); for(Category c:list) { System.out.println(c); } s.close(); sf.close(); }

    //通过Criteria查找数据
    public static void selectFromCriteria() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        //获取criteria对象
        Criteria criteria=s.createCriteria(Category.class);
        //增加约束
        criteria.add(Restrictions.like("name","%iphon%"));
        List<Category> list=criteria.list();
        for(Category c:list) {
            System.out.println(c);
        }
        
    }

    //通过标准Sql查询
    public static void selectFromSql() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        SQLQuery query=s.createSQLQuery("Select * from Category c where c.name like 'iphone%'");
        s.getTransaction().commit();
        List<Object[]> list=query.list();
        for(Object[] c:list) {
            for(Object o:c) {
                //Category category=(Category)o;
                System.out.println(o);
            }
        }
    }
    //一对多关系
    public static void manyToOne() {
        SessionFactory sf=new Configuration().configure().buildSessionFactory();
        Session s=sf.openSession();
        s.beginTransaction();
        //先把one存入
        Category c=new Category("iphone");
        s.save(c);
        //product 对应一个category
        Product p=(Product)s.get(Product.class, 1);
        System.out.println(p.getName());
        p.setCategory(c);
        s.update(p);
        
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
1.为Product类增加Category属性;
2.在Product.hbm.xml中设置many-to-one属性;
<many-to-one name="category" class="Category" column="cid" />
3.在hibernate.cfg.xml中加入类Category的映射;


 
原文地址:https://www.cnblogs.com/lastingjava/p/9911956.html