zoukankan      html  css  js  c++  java
  • Hibernate ORM初始(入门基础)

    使用IDEA开发项目 

    1.Hibernate是一个开发源代码的对象关系映射框架(ORM);

    2.对JDBC进行了轻量级的封装,可以将实体类和数据库中的表产生映射关系;

    3.是一个全自动的ORM框架;hibernate能自动生成sql语句;

    4.程序猿可以完全按照面向对象的编程思想来操作数据库.

    本次使用节点   pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>Mybatis</artifactId>
            <groupId>cn.Study</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>Hib</artifactId>
        <packaging>war</packaging>
    
        <name>Hib Maven Webapp</name>
        <!-- FIXME change it to the project's website -->
        <url>http://www.example.com</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.11</version>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.2.12.Final</version>
            </dependency>
    
            <!-- 添加Log4J依赖 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.16</version>
            </dependency>
    
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-nop</artifactId>
                <version>1.6.4</version>
            </dependency>
    
            <!-- 添加javassist -->
            <dependency>
                <groupId>javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.12.0.GA</version>
            </dependency>
    
            <dependency>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.0-api</artifactId>
                <version>1.0.1.Final</version>
            </dependency>
    
    
            <dependency>
                <groupId>javax.transaction</groupId>
                <artifactId>jta</artifactId>
                <version>1.1</version>
            </dependency>
    
    
    
            <!-- mysql数据库的驱动包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.26</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                </resource>
            </resources>
        </build>
    </project>

      使用 hibernate 我们连接mysql是数据库  

     

      我们首先进行大配置书写 。    

      

      以下是我们本次学习hibernate所需要的头文件配置    一大  一笑   大小配置的命名也有特殊要求  

    1.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">
    
    
    2.hbm.xml文件需要的头部信息
    
    <?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">        
    View Code

      

      大配置文件名  必须是 hibernate.cfg.xml    因为我们在真正使用时,我们实用的类中读取的大配置文件名就是 前面的名字

      现在  开始 大配置书写   

      直接上代码 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>
            <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"></property>
    
            <property name="hibernate.show_sql">true</property>
    
            <property name="hibernate.format_sql">true</property>
            <property name="hbm2ddl.auto">update</property>
            <!--加载需要的hbm.xml文件-->
            <mapping resource="entity/Teacher.hbm.xml"/>
         </session-factory>
    </hibernate-configuration>

           前面连接数据库的4个属性我就不说了, 

          show_sql : 在运行时,控制台展示sql语句 。 

          format_sql : 让sql展示的好看一点,没用这个的话,就是一行展示,使用之后,显得有层次感一点。  

            hbm2ddl.auto :就是把xx.hbm.xml文件中的配置生成数据库中DDL(数据定义语言)
             create:  每次运行都会删除 上次生成的表,还会创建新的!

            update: 没有表会自动创建,有表就增加数据!
            validate: 如果hbm文件和数据库中的字段对应 就会新增,否则抛出异常!
           create-drop:  每次运行都会删除 上次生成的表,前提是sessionFactory关闭

       <mapping resource="entity/Teacher.hbm.xml"/> 这个是连接我们小配置文件的节点 mapping  

         

         在写小配置之前,我们先写我们想要的属性,实体类  

         我就简单的写一个老师类吧。     

        

    package entity;
    
    /**
     * Created by 维吉的笔记本 on 2018/5/25.
     */
    public class Teacher {
    
        private  Integer tid;
    
        private String tname;
    
        public Integer getTid() {
            return tid;
        }
    
        public void setTid(Integer tid) {
            this.tid = tid;
        }
    
        public String getTname() {
            return tname;
        }
    
        public void setTname(String tname) {
            this.tname = tname;
        }
    
    
    
    }
    View Code

       

       现在开始我们小配置的书写 。 

       

    <?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">
    
    <hibernate-mapping package="entity">
    
        <class name="Teacher" table="teacher">
            <id name="tid" column="tid">
                <!--主键生成策略-->
                <generator class="identity"/>

    </id> <property name="tname" column="tname"></property> </class> </hibernate-mapping>
    <hibernate-mapping package="entity">  这个是个我们实体类的包 
    <class name="Teacher" table="teacher">  类名  表名  

    <id name="tid" column="tid">
                <!--主键生成策略-->
                <generator class="native"/>
      </id>           主键名   实体和数据库列名最好相同吧。  
      <property name="tname" column="tname"></property>  name属性


     <!--主键生成策略-->
       <generator class="identity"/> 我一般使用这个 自增    

    现在开始我们的项目测试

    先开一个测试类 。

    我们先建个表
        Session session = null;
        Transaction transaction = null;
        Configuration cfg=new Configuration().configure();
        SessionFactory factory=cfg.buildSessionFactory();
    
        @Test
        public void st(){
            session.close();
        }
    走完这个单侧之后,在你大配置里指定的mysql数据库中,表就应该生成好了吧。

    全自动,了解一下

    现在开始增删改查吧

    save 相当于insert update 就是update delete 就是 删除 记得事务提交 get load 都为拿取单条属性 一个是马上查,一个是使用的时候查询
      @Test
        public  void up(){
            session=factory.openSession();
            transaction=session.beginTransaction();
            Teacher teacher=new Teacher();
            teacher.setTname("lolo");
            session.save(teacher);
    
            transaction.commit();
            session.close();
    
        }
    
        @Test
        public void upda(){
            session=factory.openSession();
            transaction=session.beginTransaction();
            Teacher teacher=new Teacher();
            teacher.setTid(2);
            teacher.setTname("lwj");
            session.update(teacher);
            transaction.commit();
        }
    
        @Test
        public void delete(){
            session=factory.openSession();
            transaction=session.beginTransaction();
            Teacher teacher=new Teacher();
            teacher.setTid(1);
            session.delete(teacher);
            transaction.commit();
        }
    
        @Test
        public void getload(){
            session=factory.openSession();
            transaction=session.beginTransaction();
            Teacher teacher = session.get(Teacher.class, 2);
            System.out.println("******************");
            System.out.println(teacher.getTname());
            System.out.println("******************");
    
            Teacher load = session.load(Teacher.class, 2);
            System.out.println("******************");
            System.out.println(load.getTname());
            System.out.println("******************");
    
    
        }

        ‘ 现在我要开始介绍  查询全部的两个方法 

         

         * iterator能够利用懒加载和缓存的机制来提高查询效率!
     * 第一条语句就是从数据库中获取所有的id,保存在缓存中,
     * 便于下次查询! 只有缓存中不存在数据时,才会去查询数据库!
     * iterator使用于开启二级缓存的情况!

    //    @Test
    //    public void list(){
    //        List<Teacher> query = session.createQuery("from Teacher").list();
    //        System.out.println("*****************");
    //
    //        for(Teacher te:query){
    //            System.out.println(te.getTname());
    //        }
    //        System.out.println("**********");
    //    }
    //
    //    @Test
    //    public void Itor(){
    //         String sl="from Teacher";
    //        Iterator<Teacher> iterate = session.createQuery(sl).iterate();
    //         while (iterate.hasNext()){
    //             Teacher next = iterate.next();
    //             System.out.println(next.getTname());
    //             System.out.println("*****");
    //         }
    //
    //    }


















  • 相关阅读:
    大话设计模式总结(28种设计模式定义+简单理解)
    Dbank网盘下载地址提取ASP
    C#特性详解
    wcf大文件传输解决之道(1)
    WCF完美搭建android平台服务之一
    堆栈和委托堆的区别(c#)一
    wcf完美搭建android平台服务之三
    liunx简单命令集合
    WCF完美搭建android平台服务之二
    WCF中常用的binding方式比较
  • 原文地址:https://www.cnblogs.com/LWLDD/p/9092090.html
Copyright © 2011-2022 走看看