hibernate简单查询单表数据库(1)

xiaoxiao2025-10-18  12

hibernate简单查询单表数据库(1)

Hibernate :基于JDBC的,不用写SQL语句的持久层框架,其构架JAVA实体对象映射储存到数据库的表中,只需要维护对象与表的映射关系。

Hibernate自动生成SQL语句。Hibernate简化了对数据库的操作,提供了不同数据库的统一接口,应用程序开发使跨数据库成了可能。

 

 

Hibernate是开源的、用于封装数据库访问层的组件,我们称之为数据访问层框架(持久层框架),之前我们通过JDBC/SQL语句从数据库中访问/操作数据,而Hibernate就封装了这些操作,专门用于数据访问层的组件技术。

出现Hibernate框架之前在企业项目开发过程中,如下几点造就了程序员的痛苦:hibernate的好处是:

SQL语句过于繁杂,和数据库的耦合度太高。

2.不同数据库之间SQL不同,导致项目难以移植。

3.二维关系表和对象之间数据结构不匹配。基于以上苦难,Hibernate应用而生。对象关系映射

在我们的应用程序(APP)中,数据用对象来体现,而在数据库中,数据使用表的形式保存。Hibernate用于应用程序中的对象(Object)与表中的数据关系之间的映射(Mapping),即把对象保存到关系表中或者把关系表中数据取出映射为对象。6、可以这样理解,当我们使用 Hibernate 框架技术,就可以直接从数据库中取出 Java 对象,或者把Java 对象直接保存于数据库中,中间写 sql 语句等繁琐的步骤被 Hibernate 封装,对我们是透明的。

Hibernate 自动化的程度很高的组件,因此比较难以驾驭,在对 Hibernate 理解不够透彻的情况下使用,稍不留神可能就会影响性能。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

核心API:configuration Sessionfactory session query transaction

工作原理:Hibernate  启动------>configuration(xml)-->

SessionFactory---->Session--->创建Transaction--->持久化操作

----->提交transaction----关闭session

使用: 1、导包 2、文件配置  :Hibernate.cfg.xml和xx.hbm.xml(映射关系)

 

 

 

Saveorupdate:有就保存。没有就更新

在数据库中的主外键的形式来体现,实体对象中体现在对象与对象之间的引用。Hibernate多表之间关系不好做。Hibernate 可以控制外键,主表不需要创建外键

权限:

1、用URL控制

2、资源控制  shiro  权威指南

Hibernate的缓存机制:

Hibernate是持久层的数据框架,与数据库交互,为了降低应用程序与物理数据源的交互评率,提高应用的运行的性能

工作原理:查询请求首先进入一级缓存,如果没有进到二级缓存查找,如果还没有,与数据库进行交互,将查询到的结果返回给应用程序。

一级缓存的管理:

evict(obj)将对象从session中清除,从持久态变为游离态。

Clear()将session中的所有对象读清除。

Flush():将缓存中的数据与数据库中的数据进行同步。

Contains(obj):判断缓存中是否存在已知的对象。

load( ):是懒加载。

一级缓存的应用:save( ) ;get();load()将查询的数据放到session

HQL查询:将查询到的对象放到session中

主键的生成的方式

1、自增长

 2、Sequence

3、UUID

搭建项目 一、这里在数据库test中建3个表,分别为T_user、T_student、T_teaher

t_user表

t_student表

t_teacher表

二、在com.zhiyou100.entity中分别根据数据库的属性创建User、Teaher、Student

三、配置hibernate.cfg.xml文件

<hibernate-configuration> <!--与数据库进行连接,建sessionFactory工厂--> <session-factory> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql:///test</property> <property name="show_sql">true</property> <!-- 数据库与实体类关系表不用写SQl语句 --> <mapping resource="User.hbm.xml"/> <mapping resource="Student.hbm.xml"/> <mapping resource="Teacher.hbm.xml"/> <mapping resource="Book.hbm.xml"/> </session-factory> </hibernate-configuration>

在这里必须在每个.xml文件中加

<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

四、根据数据库的属性分别建.hbm.xml文件

User.hbm.xml

<hibernate-mapping> <class name="com.zhiyou100.entity.User" table="T_user"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"></property> </class> </hibernate-mapping>

Teacher.hbm.xml

<hibernate-mapping> <class name="com.zhiyou100.entity.Teacher" table="T_teacher"> <id name="id" column="id" type="int"> </id> <property name="name" column="name" type="string"></property> </class> </hibernate-mapping>

Studnt.hbm.xml

<hibernate-mapping> <class name="com.zhiyou100.entity.Student" table="T_student"> <id name="id" column="id" type="int"> <generator class="identity"></generator> </id> <property name="name" column="name" type="string"></property> </class> </hibernate-mapping>

五、进行测试建Testcase,查询条件的时候要参照数据库中的条件

 

public class TestCase { public static Session openSession() { //读取数据库信息 Configuration cfg = new Configuration(); cfg.configure("Hibernate.cfg.xml"); //获取session对象 SessionFactory sf = cfg.buildSessionFactory(); Session session = sf.openSession(); return session; } //测试类 /*public static void main(String[] args) { System.out.println(TestCase.openSession()); }*/ @Test public void testUser() { //获取session对象 Session session=TestCase.openSession(); //通过Session操作数据库 User user = (User) session.get(User.class,"1"); System.out.println(user.getName()); session.close(); } @Test public void testStudent() { //获取Session Session session=TestCase.openSession(); //开启事务 Transaction t = session.beginTransaction(); t.begin(); //创建Student对象,给name赋值 Student st=new Student(); //st.setId(); st.setName("tom"); session.save(st); t.commit(); session.close(); } @Test public void testTeacher() { //获取Session Session session=TestCase.openSession(); //开启事务 Transaction t = session.beginTransaction(); t.begin(); //创建Student对象,给name赋值 Teacher st=new Teacher(); //st.setId(); st.setName("tom"); session.save(st); t.commit(); session.close(); } @Test /* * 修改,先查找,后修改 */ public void testUpdate() { Session session = TestCase.openSession(); Transaction t = session.beginTransaction(); t.begin(); Student student = (Student) session.get(Student.class, 2); System.out.println(student); student.setName("Jery"); System.out.println(student); t.commit(); System.out.println(""); session.close(); } @Test public void testDelete() { Session session = TestCase.openSession(); Transaction t = session.beginTransaction(); t.begin(); Student st = (Student) session.get(Student.class, 5); session.delete(st); t.commit(); session.close(); } @Test public void testEvict() { Session session = TestCase.openSession(); Transaction t = session.beginTransaction(); t.begin(); Student student = (Student) session.get(Student.class, 6); System.out.println(student); //与studnet解除关系 ,从session中清除student对象 session.evict(student); student.setName("tmo"); System.out.println(student); t.commit(); session.close(); } @Test public void testObjectUpdate() { //游离态变回持久态 Session session = TestCase.openSession(); Transaction t = session.beginTransaction(); t.begin(); //获取持久态对象 Student student = (Student) session.get(Student.class, 6); session.evict(student); System.out.println(student); //让对象回到持久态 student.setName("2"); session.update(student); System.out.println(student); t.commit(); session.close(); } //练习HQL @Test public void testSelect() { //1.获取Session Session session = TestCase.openSession(); // 不用获取事务 //2.编写HQL语句 String hql="from Student"; //3.创建query对象 Query query=session.createQuery(hql); //4.调用list()方法查询数据 @SuppressWarnings("unchecked") List<Student> list=query.list(); for (Student student : list) { System.out.println(student); } //6.关闭session session.close(); } @Test //hql 条件查询 public void testWhere() { //获取session Session session = TestCase.openSession(); //2.编写HQL语句 String hql="from Student where name=:name"; //3.创建query对象 Query query = session.createQuery(hql); //4.设置参数 query.setString("name", "Jery"); //5.调用list()方法查询数据 @SuppressWarnings("unchecked") List <Student> list= query.list(); for (Student student : list) { System.out.println(student); } //6.关闭session session.close(); } //排序查询,查询Student所有记录,以ID倒序的方式显示出来 @Test public void testOrder() { //获取session Session session = TestCase.openSession(); String hql="from Student order by id desc"; Query query = session.createQuery(hql); @SuppressWarnings("unchecked") List<Student> list = query.list(); for (Student student : list) { System.out.println(student); } session.close(); }

在测试的时候细心,后续继续改善!!!

转载请注明原文地址: https://www.6miu.com/read-5038135.html

最新回复(0)