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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值