• 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的映射;


     
  • 相关阅读:
    使用NSTask调用shell
    《UML和模式应用》读书笔记(一)
    iOS网络编程
    多线程
    Quartz2D
    沙盒中的数据存取
    UIButton设置为圆形按钮并增加边框
    Mac开发快速入门
    JavaWeb学习总结(三)response与request
    JavaWeb学习总结(二) Servlet
  • 原文地址:https://www.cnblogs.com/lastingjava/p/9911956.html
Copyright © 2020-2023  润新知