分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

Hibernate ?ORM初始(入门基础)

发布时间:2023-09-06 01:56责任编辑:蔡小小关键词:Hibernate

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











??






Hibernate ?ORM初始(入门基础)

原文地址:https://www.cnblogs.com/LWLDD/p/9092090.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved