初识Hibernate

ORM原理

ORM(对象到关系的映射),ORM的作用是在关系数据库和对象之间做一个自动映射,将数据库中的数据表映射成为对象,即持久化类。以对象的形式操作数据库,可以减少应用开发过程中数据持久化的编程任务。我们可以把ORM理解为关系型数据库和对象的一条纽带,开发人员只需关注纽带一端映射的对象即可。而Hibernate是ORM的佼佼者。

Hibernate三个重要类

1)配置类(Configuration):负责Hibernate的配置信息及启动,该类会读取底层一些实现的基本信息,包括数据库的URL,数据库用户名、密码以及数据库驱动类和数据库适配器类。
2)会话工厂类(Session Factory):生成Session的工厂,保存当前数据库中所有的映射关系。
3)会话类(Session):负责Hibernate所有持久化的操作,通过它可以实现数据库的基本增删改查操作。该类不安全,应该注意不要多个线程共享一个Session。

Hibernate配置文件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>
    <property name="connection.driver_class"> com.mysql.jdbc.Driver </property>
    <property name="connection.url"> jdbc:mysql://localhost:3306/db_database </property>
    <property name="connection.username">root</property> 
    <property name="connection.password">root</property>
    <!-- Hibernate方言 -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="myeclipse.connection.profile">MySQL5.0</property>
    <!-- Hibernate sql语句是否展示-->
    <property name="show_sql">true</property> 
    <property name="hbm2ddl.auto">create</property>  <!-- create作用为每执行一次先删除表再新建表  update为不改变原来的表,在原表上操作 -->
    <!-- Hibernate 映射文件-->
    <mapping resource="com.cqut.user.hbm.xml" />
</session-factory>
</hibernate-configuration>

Hibernate映射文件*.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">
<!-- 
    Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
    <class name="com.cqut.user " table="tb_table">
        <id name="id" column="id" type="int">
            <generator class="nactive"> <!-- id标签设置表的主键 nactive设置的是表主键自动递增(但主键类型必须为int型) class为assigned设置id由程序生成 -->
        </id>
        <property name="name" type="String"><!-- 持久化类的属性名  -->
            <column name="name" length="50" /><!-- 数据库表中的字段名 -->
        </property>
        <property name="age" type="int">
            <column name="age" />
        </property>
    </class>
</hibernate-mapping>

持久化类

public class User {

	private int id;
	private String name;
	private int age;
	
	public User() {   //必须存在一个空构造方法
	}
	
	public User(int id,String name,int age){
		this.id = id;
		this.name = name;
		this.age = age;
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

hibernate数据操作

1)Configuration对象会加载Hibernate的基本配置信息,如果没有在configure()方法中指定加载配置XML文档的路径信息,Configuration对象会默认加载项目classpath根目录下的hibernate.cfg.xml文件。
2)SessionFactory是线程安全的,但Session不是,为了保证Session的线程安全,可以引人ThreadLocal对象避免多线程之间的数据共享。
3)事务回滚:transction.rollback();或者session.getTransction().rollback();

public class TestHibertnate {

	private static SessionFactory sessionFactory;
	private static Session session;
	private static Transaction transction;
	
	public static void main(String[] args) {
		//创建配置对象、创建服务注册对象、创建会话工厂、实例会话、开启事务
		Configuration cfg = new Configuration().configure();
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
		sessionFactory = cfg.buildSessionFactory(serviceRegistry);
		session = sessionFactory.openSession();
		transction = session.beginTransaction();
		
		//保存用户
		User user = new User(1,"林柏云", 22);
		session.save(user);
		
		//事务提交、资源释放
		transction.commit();
		session.close();
		sessionFactory.close();
	}
}

session操作数据的方法

1)增:save(obj)
2)删:delete(obj)
3)改:update(obj)或者
User user = (User) session.get(User.class, 1);
user.setName("linboyun");
		
//事务提交、资源释放
transction.commit();
4)查:get(User.class,1)或者load(User.class,1)    (1为id)
get():直接发送sql语句查找。
load():返回代理对象,只有真正使用的时候才发送sql语句。

Hibernate的缓存

1)缓存是是数据库在内存中的临时容器,可以使用它更高效的执行数据库的持久性操作。
2)使用一级缓存:针对session层,不同session之间不能共享一级缓存。
3)二级缓存:针对SessionFactory层。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值