[Mapping]2 Hibernate下组件映射Component
- 格式:docx
- 大小:16.15 KB
- 文档页数:2
Hibernate笔记2关于配置⽂件和表映射使⽤hibernate的准备⼯作。
⼀导⼊Hibernate 相关jar包和数据库驱动。
⼆新建项⽬,在src⽂件中导⼊hibernate.cfg.xml 总配置⽂件log4j.properties ⽇志⽂件Hibernate⽀持两种配置⽂件格式:hibernate.properties和hibernate.cfg.xml,⼤概xml形式⽤的⽐较多。
现在以 xml形式为例。
1 配置⽂件配置相关信息1<hibernate-configuration>2<session-factory>3<property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate</property> //连接路径4<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> //mysql驱动5<property name="ername">root</property> //数据库⽤户名 root6<property name="hibernate.connection.password">123</property> //数据库密码 1237<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> //⽅⾔8<property name="hibernate.show_sql">true</property> //显⽰sql语句9 <property name="format_sql">true</proterty> //sql语句⾃动换⾏10<mapping resource="com/Test/po/User.hbm.xml"/>11</session-factory>12</hibernate-configuration>2 测试是否配置成功public class Test extends TestCase {public void Test1() throws Exception{Configuration config= new Configuration().configure(); //加载xml格式配置⽂件,如果加载properties格式配置⽂件,将.configure()去掉既可。
Java的Hibernate关系映射第一章:介绍HibernateHibernate是一个Java持久化框架,它提供了对象-关系映射(ORM)功能,使Java开发人员能够以面向对象的方式操作关系型数据库。
通过Hibernate,开发人员可以通过简单的配置,将Java对象映射到数据库表,从而实现数据的持久化和操作。
1.1 Hibernate的优势Hibernate具有以下几个优势:1)简化数据库操作:Hibernate隐藏了关系型数据库的复杂性,开发人员只需要关注Java对象的操作,而不需要编写复杂的SQL语句。
2)提高开发效率:Hibernate提供了各种高级查询功能,例如动态查询、原生SQL查询等,开发人员能够更加便捷地进行数据查询和操作。
3)跨数据库兼容性:Hibernate支持跨多种关系型数据库,例如MySQL、Oracle、SQL Server等,开发人员可以方便地切换数据库,而不需要修改大量的代码。
4)提供缓存机制:Hibernate提供了缓存机制,可以大大提高应用程序的性能。
通过缓存,Hibernate可以避免频繁的数据库访问,提高数据的读取速度。
5)支持事务管理:Hibernate支持事务管理,开发人员可以通过事务控制数据的一致性和完整性,确保数据的正确性。
1.2 Hibernate的核心组件Hibernate由以下几个核心组件组成:1)SessionFactory:SessionFactory是Hibernate的核心组件,它负责创建和管理Hibernate的Session对象。
SessionFactory是线程安全的,应该在应用程序启动时创建,并且在整个应用程序的生命周期内重复使用。
2)Session:Session是Hibernate与数据库交互的一个单线程对象,它代表了一个持久化的会话。
通过Session,开发人员可以执行各种数据库操作,例如保存、更新、删除、查询等。
3)Configuration:Configuration是Hibernate的配置对象,它负责读取Hibernate的配置文件,并且构建SessionFactory。
ACCP7.0内部测试学期: Y2 模块:Java考试时间: 50分钟总分数:100分注意:1、请勿在试卷上留下笔迹2、交卷时试题和答案均要上交《使用Hibernate开发租房系统》内部测试笔试题一、选择题(共25题,每题2.5分,选择一项或多项,漏选错选不得分)1.在Hibernate中,以下关于主键生成器说法错误的是()。
A.increment可以用于类型为long、short或byte的主键B.identity用于如SQL Server、DB2、MySQL等支持标识列的数据库C.sequence用于如Oracle、SQL Server等支持序列的数据库D.native由Hibernate根据底层数据库自行判断采用何种主键生成策略,是由使用的数据库生成主键的值2.在Hibernate中,关于脏检查和刷新缓存说法正确的是()。
A.当事务提交时,会发生脏检查B.Session的flush( )方法是刷新缓存的方法C.在执行Session的commit( )方法之前不会调用Session的flush( )方法D.编写代码时,调用commit( )方法之前要调用flush( )方法3.使用HQL查询所有部门信息,以下正确的是()。
A.from DeptB.select * from cn.jbit.demo.entity.DeptC.select Dept from cn.jbit.demo.entity.Dept dD.select d from Dept d4.关于Query接口的list( )和iterate( )方法,说法正确的是()。
A.执行list( )方法,查询所有符合条件的记录B.执行iterate( )方法,查询所有符合条件的记录C.执行list( )方法,查询出所有符合条件的主键值D.执行iterate ( )方法,查询出所有符合条件的主键值5.在HQL中,关于Query接口绑定参数的方法,说法正确的是()。
所有的实体类全都省略了get和set方法一对一主键关联,单向public class Person {private int id;private String name;private int age;private String address;private IdCard idCard;}public class IdCard {private int id;private String cardNo;private Date createTime;private char sts;}Person.hbm.xml<hibernate-mapping package="com.xunpoit.entity"><class name="Person" table="t_person"><id name="id"><generator class="foreign"><param name="property">idCard</param></generator></id><property name="name" not-null="true" length="30"/><property name="age"/><property name="address" /><one-to-one name="idCard" constrained="true"/> </class> </hibernate-mapping><hibernate-mapping package="com.xunpoit.entity"><class name="IdCard" table="t_idCard"><id name="id"><generator class="native"/></id><property name="cardNo" not-null="true" length="20"/><property name="createTime" column="create_time"/><property name="sts" /></class></hibernate-mapping>constrained=“true“属性会在t_person表生成外键的语句,也就是主键ID是引用自t_idcard表的主键的,如果没有外键关联,那么加载Person类的时候会直接加载IdCard类,延迟加载将失效。
NHibernate之映射文件配置说明1. hibernate-mapping这个元素包括以下可选的属性。
schema属性,指明了这个映射所引用的表所在的schema名称。
假若指定了这个属性,表名会加上所指定的schema的名字扩展为全限定名。
假若没有指定,表名就不会使用全限定名。
default-cascade 指定了未明确注明cascade属性的.Net属性和集合类.Net 会采取什么样的默认级联风格。
auto-import属性默认让我们在查询语言中可以使用非全限定名的类名。
assembly和namespace指定了持久化类的应用程序集名称和其所在的名称空间名。
<hibernate-mappingschema="schemaName" (1)default-cascade="none|save-update" (2)auto-import="true|false" (3)assembly="Eg" (4)namespace="Eg" (5)/>如果没有设置assembly何namespace标签,我们不得不使用类的非全限定名(namespace.类名,assembly).假若你有两个持久化类,它们的非全限定名是一样的,你应该设置auto-import="false"。
假若说你把一个“import过”的名字同时对应两个类,NHibernate会抛出一个异常。
二. class你可以使用class元素来定义一个持久化类:<classname="ClassName" (1)table="tableName" (2)discriminator-value="discriminator_value" (3)mutable="true|false" (4)schema="owner" (5)proxy="ProxyInterface" (6)dynamic-update="true|false" (7)dynamic-insert="true|false" (8)select-before-update="true|false" (9)polymorphism="implicit|explicit" (10)where="arbitrary sql where condition" (11)persister="PersisterClass" (12)batch-size="N" (13)optimistic-lock="none|version|dirty|all" (14)lazy="true|false" (15)abstract="true|false"(16)/>任何static(静态的)内部类。
Hibernate配置文件中映射元素详解[达内科技java培训]对象关系的映射是用一个XML文档来说明的。
映射文档可以使用工具来生成,如XDoclet,Middlegen 和AndroMDA等。
下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。
组件应用的方法组件有两种类型,即组件(component)和动态组件(dynamic-component)。
在配置文件中,component元素为子对象的元素与父类对应表的字段建立起映射关系。
然后组件可以声明它们自己的属性、组件或者集合。
component元素的定义如下所示:........在这段代码中,name是指属性名,class是类的名字,insert指的是被映射的字段是否出现在SQL的INSERT语句中,upate指出被映射的字段是否出现在SQL的UPDA TE语句中,access指出访问属性的策略。
Hiebernate的基本配置Hibernate的数据库连接信息是从配置文件中加载的。
Hibernate的配置文件有两种形式:一种是XML 格式的文件,一种是properties属性文件。
properties形式的配置文件默认文件名是hibernate.properties,一个properties形式的配置文件内容如下所示:#指定数据库使用的驱动类hibernate.connection.driver_class = com.mysql.jdbc.Driver r#指定数据库连接串hibernate.connection.url = jdbc:mysql://localhost:3306/db#指定数据库连接的用户名ername = user#指定数据库连接的密码hibernate.connection.password = password#指定数据库使用的方言hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect#指定是否打印SQL语句hibernate.show_sql=true在配置文件中包含了一系列属性的配置,Hibernate将根据这些属性来连接数据库。
hibernate映射原理Hibernate是一个开源的ORM(对象关系映射)框架,它可以将Java对象映射到关系型数据库中的表结构。
其映射原理是通过使用注解或XML配置文件来描述Java对象与数据库表之间的映射关系。
Hibernate的映射原理涉及到以下几个重要概念:1. 实体对象(Entity):在Hibernate中,映射关系是建立在实体对象之上的。
实体对象代表了数据库表中的一条记录。
2. 类与表的映射:Hibernate通过注解或XML配置文件将Java类与数据库表进行映射。
例如,可以使用@Entity注解来将一个Java类声明为实体类,再使用@Table注解来指定该类对应的数据库表名。
3. 属性与字段的映射:Hibernate通过注解或XML配置文件将Java类的属性与数据库表的字段进行映射。
例如,可以使用@Column注解来指定属性对应的数据库字段。
4. 主键映射:Hibernate支持多种主键生成策略,可以通过注解或XML配置文件指定主键的生成方式。
例如,可以使用@Id注解来指定一个属性作为实体的主键,再使用@GeneratedValue注解来指定主键的生成策略。
5. 关联关系的映射:Hibernate支持一对一、一对多、多对一、多对多等多种关联关系的映射。
可以使用注解或XML配置文件来描述关联关系。
例如,可以使用@OneToMany注解来表示一对多的关联关系。
6. 查询语言(HQL):Hibernate提供了自己的查询语言HQL (Hibernate Query Language),它类似于SQL语言,但是操作的是实体对象而不是数据库表。
通过HQL可以进行复杂的查询操作。
通过以上几个基本概念,Hibernate能够实现Java对象与数据库表的映射关系,从而实现基于对象的数据库操作。
这样可以使开发人员更加关注业务处理逻辑,而不需要过多关注数据库底层细节。
Hibernate中组件(Component)这个概念在面向对象中是组合(Compose)概念。
举个例子我们对用户(User)这个概念建模。
一个用户一般都有名字(Name)和地址(Address),而名字有会有姓(first)和名(last)或者地址有分为门牌号和邮编等。
这样我们在对象领域就抽象出3个类他们分别是用户(User),名字(Name)和地址(Address)。
其中用户和名字之间的关系是组合(Compose)关系,也就是说名字是用户的一部分,名字一旦脱离用户就失去它的意义了。
关于地址和用户的关系就要看如何理解了,他们之间可以是关联关系(associate)也可以是组合关系(Compose)。
在持久化过程中我们对于名字这个概念不会需要用一个实体来建模(就是建一个名字的表),我们对用户进行实体建模,名字是作为用户的字段存在的。
范例1:
1.Pojo类
public class Name {
private String first;
private String last;
}
public class MailUser {
private int userID;
private Name name;
}
2.数据库
CREATE TABLE users (
user_id int4 NOT NULL DEFAULT nextval('users_user_id_seq'::regclass),
firstname varchar(128),
lastname varchar(128),
CONSTRAINT users_pkey PRIMARY KEY (user_id)
)
3.配置文件
<hibernate-mapping>
<class dynamic-update="true"name="com.email.pojo.MailUser"
optimistic-lock="all"schema="public"table="users">
<id name="userID"type="ng.Integer">
<column name="user_id"/>
<generator class="sequence">
<param name="sequence">users_user_id_seq</param>
</generator>
</id>
<component class=""name="name">
<property column="firstname"name="first"/>
<property column="lastname"name="last"/>
</component>
</class>
</hibernate-mapping>
tx = session.beginTransaction(); Name name=new Name();
name.setFirst("ji");
name.setLast("zhou");
MailUser mailUser=new MailUser(); mailUser.setName(name);
session.save(mailUser);
mit();。