zoukankan      html  css  js  c++  java
  • hibernate入门配置及第一个hibernate程序

    学习了hibernate后就想先给大家分享一下它的配置方法:

    jar包导入

    一、数据库表的创建

      

    二、开启hibernate配置

    编译器:eclipse 数据库:mysql

    1.创建第一个xml文件

    在类路径下(src),hibernate默认是读取类路径下的文件的,创建xml文件:hibernate.cfg.xml。注:名称必须是这个,不能随意更改

     <?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>
         <!-- 这是Mysql的配置信息,name值均是hibernate提供的固定的值 。Oracle并非是这样的-->  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123456</property> <property name="hibernate.show_sql">true</property> <!-- 方言,使用的是哪个数据库 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 这个是映射文件的路径 --> <mapping resource="com/xxx/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>

    http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd,这个是hibernate对于xml文件的约束,只能使用hibernate规定的标签

    将约束引入eclipse中,根据给定的路径,将路径拷贝到浏览器的地址栏,进行dtd文件的下载(此路径就是dtd文件的下载路径,直接复制即可)

    下载之后是:

    接下来,打开eclipse--->window--->Preferences,搜索xml,找到XML Catalog,点击Add,Location是你本机上下载的dtd文件的路径,Key type选择是URI,Key是xml文件中的约束路径,点击Ok就可以了

     2.创建一个实体类User(com.xxx.pojo)

    实体类中的属性必须和数据库中表的字段相对应(属性名和字段名称可以不一致,但是字段类型和数量必须一致)。

     3.在实体类包下创建第二个配置文件:User.hbm.xml。

     此配置文件,格式是xxx.hbm.xml,xxx可以改变,但必须是实体类的类名,后面的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="com.xxx.pojo.User" table="user"> <id name="id" column="id"> <!-- 设置主键生成策略 increment:主键按数值顺序递增,用在mysql上 sequence:采用数据库提供的sequence 机制生成主键。如Oralce中的Sequence native:由Hibernate 根据使用的数据库自行判断 --> <generator class="native"> <param name=""></param> </generator> </id> <property name="name" column="user_name"></property> <property name="sex" column="user_sex"></property> <property name="age" column="user_age"></property> </class> </hibernate-mapping>

    这个xml文件中也有一个约束,和之前的hibernate.cfg.xml文件对的约束的添加方法是一致的

    完成后,不要忘记将此映射文件的路径引入进 hibernate.cfg.xml 中,上面的hibernate.cfg.xml文件已经引入,可自行去查看

    到这里,hibernate 配置就已经结束了,接下来是测试阶段

    三、测试hibernate程序

    ps:相关概念

    (1).Configuration类,启动Hibernate,用来指定对象,关系映射,文件的位置或者动态配置hibernate的属性

    (2).SessionFactory接口,一个存储源(DB)的代理,一个Factory对应一个DB

    (3).session接口 持久化管理器,主要增删改查

    (4).Transaction接口 主要是事务管理

    (5).Query和Criteria接口 都是查询 get() load();

    1.测试插入数据

        @org.junit.Test
        public void test1(){
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            
            User user = new User("李四", "男", 20);
            session.save(user);
            transaction.commit();
            session.close();
            
        }

    2.测试查询数据(查询所有)

        @org.junit.Test
        public void test2(){
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            
            //方法一
            /*Criteria createCriteria = session.createCriteria(User.class);
            List<User> list = createCriteria.list();
            System.out.println(list);*/
            
            //方法二 
            /*Query query = session.createQuery("from User");
            List<User> list = query.list();
            System.out.println(list);*/
            
            //方法三
            SQLQuery query = session.createSQLQuery("select *from user");
            List<Object[]> list = query.list();
            for (Object[] objects : list) {
                System.out.println(Arrays.toString(objects));
            }
            
            transaction.commit();
            session.close();
            
        }    

    3.测试删除数据

        @org.junit.Test
        public void test3(){
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            //进行删除前,先查询出来这条记录
            User user = session.get(User.class, 1);
            //进行删除
            session.delete(user);
            transaction.commit();
            session.close();
            
        }    

    4.测试更新数据

    @org.junit.Test
        public void test4(){
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            //进行删除前,先查询出来这条记录
            User user = session.get(User.class, 3);
            //重新给name复制
            user.setName("xxx");
            //进行插入
            session.update(user);
            transaction.commit();
            session.close();
            
        }

    到此结束,哈哈!!!

  • 相关阅读:
    [leetcode]Copy List with Random Pointer @ Python
    [leetcode]Convert Sorted List to Binary Search Tree @ Python
    [leetcode]Convert Sorted Array to Binary Search Tree @ Python
    [leetcode]Binary Tree Level Order Traversal II @ Python
    [leetcode]Minimum Depth of Binary Tree @ Python
    [leetcode]Binary Tree Zigzag Level Order Traversal @ Python
    [leetcode]Binary Tree Level Order Traversal @ Python
    [leetcode]Sum Root to Leaf Numbers @ Python
    [leetcode]Flatten Binary Tree to Linked List @ Python
    [leetcode]Binary Tree Postorder Traversal @ Python
  • 原文地址:https://www.cnblogs.com/BeenTogether/p/11364356.html
Copyright © 2011-2022 走看看