day36 hibernate quickstart


一、hibernate优劣

hibernate框架:数据库的操作框架

   优点

      1、比较简单

      2、数据缓存:一级缓存    二级缓存  查询缓存

      3、移植性比较好

   缺点

      1、因为sql语句是hibernate内部生成的,所以程序员干预不了,不可控

      2、如果数据库特别大,不适合用hibernate


jdbc的优点和缺点

   缺点

  1、查询代码特别繁琐

  2、重复性代码特别多,频繁的try,catch

  3、数据的缓存

  4sql的移植性不好

   优点

     速度比较快

    把控性比较好



二、hibernate结构以及加载方式






三、hibernate配置文件两种加载方式



四、hibernate curd 操作

Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<!-- 
		用来描述一个持久化类
		name  类的全名
	 	table 可以不写  默认值和类名一样 
	 	catalog  数据库的名称  一般不写
	 -->
	<class name="cn.zjy.domain.Person">
		<!-- 
			标示属性  和数据库中的主键对应
			name  属性的名称
			column 列的名称
		 -->
		<id name="pid" column="pid" length="200" type="java.lang.Long">
			<!-- 
				主键的产生器
				  就该告诉hibernate容器用什么样的方式产生主键
			 -->
			<generator class="increment"></generator>
		</id>
		<!-- 
			描述一般属性
		 -->
		<property name="pname" column="pname" length="20" type="java.lang.String">
		</property>
		
		<property name="psex" column="psex" length="10" type="java.lang.String">
		</property>
	</class>
</hibernate-mapping>
hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<!-- 
		一个session-factory只能连接一个数据库
	-->
<session-factory>
	<!-- 
		数据库的用户名
	-->
	<property name="connection.username">root</property>
	<!-- 
		密码
	-->
	<property name="connection.password">345300</property>
	<!-- 
		url
	-->
	<property name="connection.url">
		jdbc:mysql://localhost:3306/day36
	</property>
	<!-- 
		作用:根据持久化类和映射文件生成表
		validate
		create-drop
		create
		update
	-->
	<property name="hbm2ddl.auto">update</property>
	<!-- 
		显示hibernate内部生成的sql语句
	-->
	<property name="show_sql">true</property>
	<mapping resource="cn/zjy/domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
Person.java

package cn.zjy.domain;

import java.io.Serializable;



public class Person implements Serializable{
	private Long pid;
	private String pname;
	private String psex;
	public Person(){}
	
	public Person(String pname){
		this.pname = pname;
	}
	
	public Long getPid() {
		return pid;
	}
	public void setPid(Long pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public String getPsex() {
		return psex;
	}
	public void setPsex(String psex) {
		this.psex = psex;
	}

}


Hibernatebase1.java

package cn.zjy.test;

import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import org.junit.Test;

import cn.zjy.domain.Person;
import cn.zjy.utils.HiberanteUtils;

public class Hibernatebase1 {
	@Test
	public void test1()
	{
	
		
		Session session =  HiberanteUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		
		Person person = new Person();
		person.setPname("lisi");
		person.setPsex("nan");
		
		session.save(person);
		transaction.commit();
		session.close();
	}
	
	@Test
	public void test2()
	{
	
		
		Session session =  HiberanteUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Person person = (Person)session.get(Person.class, 1L);//这里要注意pid类型一定要匹配
		session.delete(person);
		transaction.commit();
		session.close();
	}
	
	
	@Test
	public void test3()
	{
	
		
		Session session =  HiberanteUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		//同样也可以新建一个person类,但是pid一定要一样
		Person person = (Person)session.get(Person.class, 2L);
		person.setPname("zhangsan");
		session.update(person);
		transaction.commit();
		session.close();
	}
	
	@Test
	public void test4()
	{
	
		
		Session session =  HiberanteUtils.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();
		
		List<Person> list = session.createQuery("from Person").list();
		
		for(Person p:list)
		{
			System.out.println(p.getPname());
		}
		transaction.commit();
		session.close();
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值