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("*****");
//         }
//
//    }

 



















 

posted on 2018-05-26 10:35  LWJDD  阅读(443)  评论(0编辑  收藏  举报

导航