Hibernate的XML和annotation两种方式简单例子
来源:互联网 发布:excel如何制作数据库 编辑:程序博客网 时间:2024/06/05 05:36
Hibernate概述:
ORM的全称Object/Relation Mapping ,对象/关系数据库映射。可以理解是一种规范,基本特征是完成面向对象的编程语言到关系数据库的映射。
Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于Sql的关系模型数据库结构中去。
Hibernate中的底层依然是基于JDBC的,因此在应用程序中使用Hibernate执行持久化时一定少不了JDBC的驱动
下面小例子XML方式:
1.建立类Student,就是相当于一个POJO类。这个类主要的作用就是一个简单类,用于数据库表的字段的映射。
package com.hibernate.model;
public class Student {
private int id;
private String name;
private int 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;
}
}
2.这个普通的类还不具有持久化操作的能力,为了使其具备持久化操作的能力,这个方式采用的是XML的方式Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hibernate.model">
<class name="Student">
<!--主键 -->
<id name="id" > </id>
<!--其他属性 -->
<property name="name"/>
<property name="age"/>
</class>
</hibernate-mapping>
3.以上的XML文件持久化类和数据表之间的对应关系,也可以理解持久化类属性与数据表列之间的对应关系。对于连接数据库的类型等通用的信息需要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>
<!-- Database connection settings 数据库配置文件-->
<!-- 指定数据库所用的驱动-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 指定数据库的url,hibernate连接的数据库名-->
<property name="connection.url">jdbc:mysql://localhost/hibernate?useUnicode=true&characterEncoding=UTF-8</property>
<!--指定数据库连接的用户名 -->
<property name="connection.username">root</property>
<!--数据库连接用的密码 -->
<property name="connection.password">123</property>
<!-- JDBC connection pool (use the built-in) 实际开发中不用hibernate的连接池-->
<property name="connection.pool_size">1</property>
<!-- SQL dialect 数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<!-- <property name="current_session_context_class">thread</property> -->
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout 显示sql语句-->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup 自动创建表的-->
<property name="hbm2ddl.auto">create </property>
<!-- 罗列所有的映射文件-->
<mapping resource="com/hibernate/model/Student.hbm.xml"/>
<!--这种方式是利用注解的方式 -->
<mapping class="com.hibernate.model.Teacher"/>
</session-factory>
</hibernate-configuration>
4.进行测试
package com.hibernate.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.hibernate.model.Student;
public class StudentTest {
public static void main(String[] args) {
Student s=new Student();
s.setId(1);
s.setAge(1);
s.setName("tom");
//实例化Configuration
Configuration cfg=new Configuration();
//以Configuration默认加载Hibernate创建SessionFactory
SessionFactory sf=cfg.configure().buildSessionFactory();
//创建Session
Session session=sf.openSession();
//开始事务
session.beginTransaction();
//保存信息
session.save(s);
//获得事务并且提交
session.getTransaction().commit();
//关闭Session
session.close();
sf.close();
}
}
SessionFactory:这是Hibernate关键的对象,它是单个数据库映射关系经过编译后的内存镜像,它也是线程安全。它是生成Session的工厂,本身依赖ConnectionProvider。该对象可以在进程或集群的级别上,为那些事务之间可以重用的数据库可以提供可选的二级缓存。
Session:它是应用程序与持久化之间的操作的单线程对象。它也是Hibernate持久化操作的关键对象,所有的持久化对象必须在Session管理下才可以进行持久化操作。此对象的生存期很短。底层封装了JDBC的连接 ,也是Transaction的工厂。Session对象持有一个必选的一级缓存。
持久化对象:系统创建的POJO实例,一旦与特定的Session关联,并对应数据表的指定记录,该对象就处于持久化状态。
事务:代表一个原子操作,它具有数据库事务的概念,虽然事务操作是可选的,但是所有的持久化操作都应该在事务管理中。
接下来运用注解的方式进行。建立Teacher类。
package com.hibernate.model;
import javax.persistence.Entity;
import javax.persistence.Id;
//表示实体类
@Entity
public class Teacher {
private int id;
private String name;
private String title;
//一般都放在get 方法这边·@Id表示主键
@Id
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 String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
这里就可以舍弃掉Teacher.hbm.xml.利用两个注解就可以搞定,但是在Hibernate.cfg.xml中要加入
<!--这种方式是利用注解的方式 -->
<mapping class="com.hibernate.model.Teacher"/>
0 0
- Hibernate的XML和annotation两种方式简单例子
- Hibernate之关系映射的两种方式(xml映射、annotation注解映射)
- hibernate 支持配置文件和annotation两种方式
- struts2利用annotation和xml两种方式验证
- Spring声明式事务管理的两种方式(XML和Annotation)
- hibernate翻转的两种方式不同(hibernate.cfg.xml)
- hibernate many-to-many(单向和双向)--->(annotation和xml文件两种形式)
- Annotation的简单例子
- hibernate annotation和xml两个方式由orm连接数据库
- Spring3与Hibernate4整合,Spring中配置Hibernate基于XML和annotation的sessionFactory方式。
- Hibernate 简单的annotation
- 关于spring注解启用的两种方式<context:component-scan>和<context:annotation-config/>
- Hibernate的两种事务管理jdbc 和jta方式
- Hibernate的两种事务管理jdbc 和jta方式
- hibernate的两种事务管理jdbc 和jta方式
- Hibernate两种加载数据的方式get()和load()
- hibernate的两种加载方式get和load
- JQuery解析xml的两种方式$.get和$.ajax
- 移动网页端滑动到底部加载数据
- html复习回顾之div用法
- linux下如何用c语言调用shell命令
- Git 常见命令
- 如何配置https站点
- Hibernate的XML和annotation两种方式简单例子
- http
- QTabWidget设置为垂直方向时 实现文本内容为水平方向
- 什么是构造函数注入(Constructor Injection)——一个具体的依赖注入例子
- JAVA反射详解
- IOS开发之—绘图
- js监听window的刷新和关闭
- 设计模式之装饰者(java)
- 编程之路 一