Hibernate 注解和配置文件由ORM框架连接库

本文对比了Hibernate注解和配置文件的优缺点,并详细介绍了如何使用两种方式配置数据库连接,以及它们在使用上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[align=center][size=xx-large][color=red][b]Hibernate 注解和配置文件由ORM框架连接库[/b][/color][/size][/align]


[size=medium][b][color=darkred]xml优点 [/color][/b][/size]
 不需要改变和重新编译代码,就可以灵活配置
[b][size=medium][color=darkred]xml缺点: [/color][/size][/b]
◆ 描述符多,不容易记忆,掌握。要深入了解还得看DTD文件
◆ 无法做自动校验,需要人工查找
◆ 读取和解析xml配置要消耗一定时间,导致应用启动慢,不便于测试和维护
◆ 当系统很大时,大量的xml文件难以管理
◆ 运行中保存xml配置需要消耗额外的内存
◆ 在O/R Mapping的时候需要在java文件和xml配置文件之间交替,增大了工作量
◆ 标签语义不清,需要大量试验才能掌握。
◆ 细节太多。有时没规律可循,需要大量试验才能掌握。

[size=medium][b][color=darkred]annotation优点[/color][/b][/size]
◆ 描述符减少。以前在xml配置中往往需要描述java属性的类型,关系等等。而元数
据本身就是java语言,从而省略了大量的描述符
◆ 编译期校验。错误的批注在编译期间就会报错。
◆ 元数据批注在java代码中,避免了额外的文件维护工作
◆ 元数据被编译成java bytecode,消耗的内存少,读取也很快,利于测试和维护
[size=medium][color=darkred][b]Annotation缺点[/b][/color][/size]
没法灵活部署
语义有的不是很清楚

[size=medium][color=darkred][b]Annotation放在field上,还是放在还是放在method上?[/b][/color][/size]
推荐放在method上,这样更灵活
也有可能没有成员变量,但是有getter/setter,
比如一个订单求总价
Getter/setter和成员变量的名字最好一致;
Annotation要么全加在field上,要么全加在method上


[size=large][color=red][b]1.通过配置 bean.hbm.xml[/b][/color][/size]
[size=medium][color=green][b]a.hibernate.cfg.xml文件里面[/b][/color][/size]

<?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/beichuang</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.autocommit">true</property>
<property name="show_sql">true</property>

<mapping resource="com/chuanxi/training/bean/Team.hbm.xml"></mapping>
<mapping resource="com/chuanxi/training/bean/Student.hbm.xml"></mapping>
<mapping resource="com/chuanxi/training/bean/Admin.hbm.xml"></mapping>
<mapping resource="com/chuanxi/training/bean/Log.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>

[size=medium][color=green][b]b.team.hbm.xml[/b][/color][/size]
<?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 package="com.chuanxi.training.bean">
<class name="Team" table="team">
<id name="id" column="team_id">
<generator class="identity"/>
</id>
<property name="name" column="name"></property>
<property name="leader" column="leader"></property>
<property name="slogan" column="slogan"></property>
<set name="members" inverse="true" lazy="false">
<key>
<column name="team_id"/>
</key>
<one-to-many class="com.chuanxi.training.bean.Student"/>
</set>
</class>
</hibernate-mapping>



[size=large][color=red][b]2.Hibernate的注解[/b][/color][/size]

[size=medium][color=green][b]a.hibernate.cfg.xml[/b][/color][/size]
<?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/beichuang</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.autocommit">true</property>
<property name="show_sql">true</property>

<mapping class="com.org.momo.bean.Team"></mapping>
<mapping class="com.org.momo.bean.Student"></mapping>
<mapping class="com.org.momo.bean.Log"></mapping>
<mapping class="com.org.momo.bean.Admin"></mapping>
</session-factory>
</hibernate-configuration>


[size=medium][color=green][b]b.team.java[/b][/color][/size]
package com.org.momo.bean;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;


@Entity
@Table(name="team")
public class Team {

@Id
@Column(name="team_id")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column(name="name")
private String name;
@Column(name="leader")
private String leader;
@Column(name="slogan")
private String slogan;

@OneToMany(mappedBy="team",fetch=FetchType.EAGER)
private Set<Student> members;

public Team() {

}

public Team(String name, String leader, String slogan) {
this.name = name;
this.leader = leader;
this.slogan = slogan;
}

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLeader() {
return leader;
}
public void setLeader(String leader) {
this.leader = leader;
}
public String getSlogan() {
return slogan;
}
public void setSlogan(String slogan) {
this.slogan = slogan;
}
public Set<Student> getMembers() {
return members;
}
public void setMembers(Set<Student> members) {
this.members = members;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值