- 浏览: 55914 次
- 性别:
- 来自: 广州
文章分类
最新评论
关于使用Hibernate annotation注解映射和命名策略的方式及相关问题解决
一、首先引出以下几个观点:
1).开发项目时,不管是否使用Hibernate,都应该为项目所涉及到的表名取个前缀(如果还有特别需要也可以再加个后缀[通常在处理大数量需要动态建表的时候有加后缀的必要]),这样也能保证与他人共享数据库时不至于发生表名冲突的问题,同时方便自己维护所有相关的表。
2).在每个表中为每个字段都加个前缀也是挺有好处的:比如能避免和SQL语句关键字发生冲突的问题;在连接查询时也能方便地判断某某字段是属于某个表的。
3).使用Hibernate annotation注解映射可以减少实体类相对应的.hbm.xml文件的维护(纯粹一体力活,能省则省),只需要针对实体类进行Annotation的方式配置即可。
二、程序实验环境说明
1.导入相关jar包
1).hibernate必须用到的包(其实是3.2版本)
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate3.jar
jta.jar
log4j-1.2.11.jar
2).hibernate annotations相关包:
ejb3-persistence-1.0.2.GA.jar (用以持久化映射)
hibernate-annotations.jar
hibernate-commons-annotations-3.1.0.GA.jar
slf4j-api-1.5.8.jar, slf4j-log4j12-1.5.8.jar(此两个jar是写相关日志需要用到的)
3).Oracle驱动包
classes12.jar
2.开发环境
Eclipse3.5
3.数据库环境: Oracle9i
三、相关文件
1).实体类:
package com.temp.domain;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table
public class BasicCar implements Serializable{
//Table注释标识和各个成员变量的Column注释标识都未指定name属性,是为了使命名策略中相关方法生效
private static final long serialVersionUID = 6961767068555866935L;
@Id
@Column(nullable=false,length=32)
@GeneratedValue(generator="hibernate-uuid")
@GenericGenerator(name="hibernate-uuid",strategy="uuid")
private String id;
@Column(nullable=false,length=30,unique=false)
private String name;
@Column (nullable=true,length=50)
private String factory;
@Column(nullable=false)
private Date date;
/**
* 默认构造函数(做映射的必须)
*/
public BasicCar() {
}
public BasicCar(String name, String factory, Date date){
this.name=name;
this.factory=factory;
this.date=date;
}
public BasicCar(String id, String name, String factory, Date date){
this(name,factory,date);
this.id=id;
}
public String toString(){
return "id="+id+
",name="+name+
",factory="+factory+
",date="+date;
}
}
2).命名策略类
package com.temp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.cfg.NamingStrategy;
import org.hibernate.util.StringHelper;
public class MyNamingStrategy implements NamingStrategy {
private static MyNamingStrategy namingStrategy;
private String currentClassName="";
private String currentColumnName="";
private String needDatePostfixTables[]={"ServiceVisitLog","BasicCar"}; //需要添加时间后缀的实体类名
private MyNamingStrategy() {
}
public static MyNamingStrategy getInstance(){
if(namingStrategy==null){
namingStrategy = new MyNamingStrategy();
}
return namingStrategy;
}
//实现NamingStrategy接口方法(为每个实体映射成数据库表名时添加一个前缀)
public String classToTableName(String className) {
className = StringHelper.unqualifyEntityName(className); // 先去包名(如果有的话),取类名
this.currentClassName=className;
String tablePrefix="Test_"; //表名前缀
String tableName=tablePrefix+className;
int dptLength=needDatePostfixTables.length;
for(int i=0;i<dptLength;i++){
//根据需要进行表名后缀的添加
if(needDatePostfixTables[i].equals(className)){
tableName=tableName + getPostfixCurrentyyyyMMdd();
}
}
return tableName;
}
public String tableName(String tableName) {
return tableName;
}
//实现NamingStrategy接口方法(为每个属性映射成数据库表字段时添加一个前缀,提取每个类各单词首字母并加一个下划线做为前缀)
public String propertyToColumnName(String propertyName) {
char[] chars = this.currentClassName.toCharArray();
String columnPrefix = ""; //字段名前缀
for (int i = 0; i < chars.length; i++) {
if (Character.isUpperCase(chars[i])) {
columnPrefix=columnPrefix+chars[i];
}
}
String columnName=propertyName;
if(columnPrefix.length()>0){
columnName=columnPrefix+"_"+columnName;
}
this.currentColumnName=columnName;
return columnName;
}
public String columnName(String columnName) {
//System.out.println("columnName="+columnName);
return columnName;
}
public String logicalColumnName(String columnName, String propertyName) {
if (this.currentColumnName != null) {
return this.currentColumnName;
} else {
return propertyName;
}
}
public String collectionTableName(String string, String string1,
String string2, String string3, String string4) {
return "";
}
public String foreignKeyColumnName(String string, String string1,
String string2, String string3) {
return "";
}
public String joinKeyColumnName(String string, String string1) {
return "";
}
public String logicalCollectionColumnName(String string, String string1,
String string2) {
return "";
}
public String logicalCollectionTableName(String string, String string1,
String string2, String string3) {
return "";
}
//得到一个形如"_20100331"之类的字符串
private String getPostfixCurrentyyyyMMdd(){
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyyMMdd");
String yyyyMMdd=df.format(date);
return "_" +yyyyMMdd;
}
}
3).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>
<!-- OracleDriver Database connection settings-->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.10.116:1521:test</property>
<property name="connection.username">temp</property>
<property name="connection.password">temp</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping class="com.temp.domain.BasicCar"/>
</session-factory>
</hibernate-configuration>
4).测试类Test.java
package com.temp.test;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import com.temp.MyNamingStrategy;
import com.temp.domain.BasicCar;
public class Test {
AnnotationConfiguration cfg;
SessionFactory sf;
Session session;
void doConfiguration(){
cfg = new AnnotationConfiguration(); //使用了注释的方式则创建此类
//必须放在configure语句之前命名策略才有效(同时需要注意在实体类配置时不能显示指定Table的名称和Column的名称)
cfg.setNamingStrategy(MyNamingStrategy.getInstance());
cfg.configure("/hibernate.cfg.xml");
sf=cfg.buildSessionFactory();
}
public static void main(String[] args) {
Test t=new Test();
t.doConfiguration();
t.insert();
t.query();
}
public void insert(){
session=sf.openSession();
BasicCar bc=new BasicCar("paul", "easymap", new Date());
Transaction tx=session.beginTransaction();
session.save(bc);
tx.commit();
session.close();
}
@SuppressWarnings(value = { "unchecked" })
public void query(){
session=sf.openSession();
Query query=session.createQuery("from BasicCar");
List list=query.list();
int cnt=list.size();
System.out.println("当前共有"+cnt+"条记录,最后一条记录是:"+list.get(cnt-1));
session.close();
}
}
四、相关问题说明及解决方法
如果明明在hibernate.cfg.xml文件中配置了<property name="hbm2ddl.auto">update</property>却仍然不能自动建表,则有可能是当前连接至数据库中的用户(如本例中的temp)的配额(此处的配额不是指表空间的配额)不足所造成的(这种问题本人也是在使用plsql进行create table时发现说"Ora-01536:超出了表空间users的空间限量"时才发现的),因此特别建议当使用了Hibernate或其它ORM框架之后出现了一些诡异的问题时,建议直接到数据库的控制台或plsql进行相关操作或SQL语句的执行,以找到真正的问题!
Ora-01536 是指的你建表的那个user所能使用的空间没有了,不是那个表所在的tablespace没有free space 了。你需要做的是给那个user对那个tablespace 有更多的space可以使用。
解决方法:在plsql中执行 "ALTER USER temp QUOTA UNLIMITED ON users;" 语句使得temp用户对于表空间Users无限制配额存取.
一、首先引出以下几个观点:
1).开发项目时,不管是否使用Hibernate,都应该为项目所涉及到的表名取个前缀(如果还有特别需要也可以再加个后缀[通常在处理大数量需要动态建表的时候有加后缀的必要]),这样也能保证与他人共享数据库时不至于发生表名冲突的问题,同时方便自己维护所有相关的表。
2).在每个表中为每个字段都加个前缀也是挺有好处的:比如能避免和SQL语句关键字发生冲突的问题;在连接查询时也能方便地判断某某字段是属于某个表的。
3).使用Hibernate annotation注解映射可以减少实体类相对应的.hbm.xml文件的维护(纯粹一体力活,能省则省),只需要针对实体类进行Annotation的方式配置即可。
二、程序实验环境说明
1.导入相关jar包
1).hibernate必须用到的包(其实是3.2版本)
antlr-2.7.6.jar
asm-attrs.jar
asm.jar
cglib-2.1.3.jar
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
dom4j-1.6.1.jar
ehcache-1.2.3.jar
hibernate3.jar
jta.jar
log4j-1.2.11.jar
2).hibernate annotations相关包:
ejb3-persistence-1.0.2.GA.jar (用以持久化映射)
hibernate-annotations.jar
hibernate-commons-annotations-3.1.0.GA.jar
slf4j-api-1.5.8.jar, slf4j-log4j12-1.5.8.jar(此两个jar是写相关日志需要用到的)
3).Oracle驱动包
classes12.jar
2.开发环境
Eclipse3.5
3.数据库环境: Oracle9i
三、相关文件
1).实体类:
package com.temp.domain;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table
public class BasicCar implements Serializable{
//Table注释标识和各个成员变量的Column注释标识都未指定name属性,是为了使命名策略中相关方法生效
private static final long serialVersionUID = 6961767068555866935L;
@Id
@Column(nullable=false,length=32)
@GeneratedValue(generator="hibernate-uuid")
@GenericGenerator(name="hibernate-uuid",strategy="uuid")
private String id;
@Column(nullable=false,length=30,unique=false)
private String name;
@Column (nullable=true,length=50)
private String factory;
@Column(nullable=false)
private Date date;
/**
* 默认构造函数(做映射的必须)
*/
public BasicCar() {
}
public BasicCar(String name, String factory, Date date){
this.name=name;
this.factory=factory;
this.date=date;
}
public BasicCar(String id, String name, String factory, Date date){
this(name,factory,date);
this.id=id;
}
public String toString(){
return "id="+id+
",name="+name+
",factory="+factory+
",date="+date;
}
}
2).命名策略类
package com.temp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.hibernate.cfg.NamingStrategy;
import org.hibernate.util.StringHelper;
public class MyNamingStrategy implements NamingStrategy {
private static MyNamingStrategy namingStrategy;
private String currentClassName="";
private String currentColumnName="";
private String needDatePostfixTables[]={"ServiceVisitLog","BasicCar"}; //需要添加时间后缀的实体类名
private MyNamingStrategy() {
}
public static MyNamingStrategy getInstance(){
if(namingStrategy==null){
namingStrategy = new MyNamingStrategy();
}
return namingStrategy;
}
//实现NamingStrategy接口方法(为每个实体映射成数据库表名时添加一个前缀)
public String classToTableName(String className) {
className = StringHelper.unqualifyEntityName(className); // 先去包名(如果有的话),取类名
this.currentClassName=className;
String tablePrefix="Test_"; //表名前缀
String tableName=tablePrefix+className;
int dptLength=needDatePostfixTables.length;
for(int i=0;i<dptLength;i++){
//根据需要进行表名后缀的添加
if(needDatePostfixTables[i].equals(className)){
tableName=tableName + getPostfixCurrentyyyyMMdd();
}
}
return tableName;
}
public String tableName(String tableName) {
return tableName;
}
//实现NamingStrategy接口方法(为每个属性映射成数据库表字段时添加一个前缀,提取每个类各单词首字母并加一个下划线做为前缀)
public String propertyToColumnName(String propertyName) {
char[] chars = this.currentClassName.toCharArray();
String columnPrefix = ""; //字段名前缀
for (int i = 0; i < chars.length; i++) {
if (Character.isUpperCase(chars[i])) {
columnPrefix=columnPrefix+chars[i];
}
}
String columnName=propertyName;
if(columnPrefix.length()>0){
columnName=columnPrefix+"_"+columnName;
}
this.currentColumnName=columnName;
return columnName;
}
public String columnName(String columnName) {
//System.out.println("columnName="+columnName);
return columnName;
}
public String logicalColumnName(String columnName, String propertyName) {
if (this.currentColumnName != null) {
return this.currentColumnName;
} else {
return propertyName;
}
}
public String collectionTableName(String string, String string1,
String string2, String string3, String string4) {
return "";
}
public String foreignKeyColumnName(String string, String string1,
String string2, String string3) {
return "";
}
public String joinKeyColumnName(String string, String string1) {
return "";
}
public String logicalCollectionColumnName(String string, String string1,
String string2) {
return "";
}
public String logicalCollectionTableName(String string, String string1,
String string2, String string3) {
return "";
}
//得到一个形如"_20100331"之类的字符串
private String getPostfixCurrentyyyyMMdd(){
Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyyMMdd");
String yyyyMMdd=df.format(date);
return "_" +yyyyMMdd;
}
}
3).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>
<!-- OracleDriver Database connection settings-->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@192.168.10.116:1521:test</property>
<property name="connection.username">temp</property>
<property name="connection.password">temp</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping class="com.temp.domain.BasicCar"/>
</session-factory>
</hibernate-configuration>
4).测试类Test.java
package com.temp.test;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import com.temp.MyNamingStrategy;
import com.temp.domain.BasicCar;
public class Test {
AnnotationConfiguration cfg;
SessionFactory sf;
Session session;
void doConfiguration(){
cfg = new AnnotationConfiguration(); //使用了注释的方式则创建此类
//必须放在configure语句之前命名策略才有效(同时需要注意在实体类配置时不能显示指定Table的名称和Column的名称)
cfg.setNamingStrategy(MyNamingStrategy.getInstance());
cfg.configure("/hibernate.cfg.xml");
sf=cfg.buildSessionFactory();
}
public static void main(String[] args) {
Test t=new Test();
t.doConfiguration();
t.insert();
t.query();
}
public void insert(){
session=sf.openSession();
BasicCar bc=new BasicCar("paul", "easymap", new Date());
Transaction tx=session.beginTransaction();
session.save(bc);
tx.commit();
session.close();
}
@SuppressWarnings(value = { "unchecked" })
public void query(){
session=sf.openSession();
Query query=session.createQuery("from BasicCar");
List list=query.list();
int cnt=list.size();
System.out.println("当前共有"+cnt+"条记录,最后一条记录是:"+list.get(cnt-1));
session.close();
}
}
四、相关问题说明及解决方法
如果明明在hibernate.cfg.xml文件中配置了<property name="hbm2ddl.auto">update</property>却仍然不能自动建表,则有可能是当前连接至数据库中的用户(如本例中的temp)的配额(此处的配额不是指表空间的配额)不足所造成的(这种问题本人也是在使用plsql进行create table时发现说"Ora-01536:超出了表空间users的空间限量"时才发现的),因此特别建议当使用了Hibernate或其它ORM框架之后出现了一些诡异的问题时,建议直接到数据库的控制台或plsql进行相关操作或SQL语句的执行,以找到真正的问题!
Ora-01536 是指的你建表的那个user所能使用的空间没有了,不是那个表所在的tablespace没有free space 了。你需要做的是给那个user对那个tablespace 有更多的space可以使用。
解决方法:在plsql中执行 "ALTER USER temp QUOTA UNLIMITED ON users;" 语句使得temp用户对于表空间Users无限制配额存取.
发表评论
-
java
2015-09-10 23:21 349log4j-1.2.16 mybatis-3.2.3 myba ... -
多线程之同步
2015-09-06 18:12 449publci class Singleton{ p ... -
git http.sslVerify=false
2015-08-23 22:00 2067打开eclipse中的windows-->Prefere ... -
jaas介绍
2015-08-23 15:13 786http://lyb520320.iteye.com/blog ... -
mybatis 和 hibernate 之我见
2014-10-26 00:26 883在中国的很多软件企业中,每天仍然在重复的制造轮子,耗时耗力还看 ... -
maven pom1
2014-10-21 21:43 654<project xmlns="http:// ... -
phonetic symbol
2011-03-28 11:16 909学了这么多年的英语,英标还是没搞懂。今天来补课啦! 闭音节 开 ... -
ant脚本的使用
2011-03-21 14:23 837http://xiaoyongxin.iteye.com/bl ... -
正则表达式,抓取功能
2011-03-18 16:42 776这里就是一个抓取功能的实现,正则分组 public stati ... -
很高兴进入新的领域websphere portal
2011-01-21 10:48 865先收集一个大牛的资料吧 http://www.ibm.com/ ... -
java @inheritDoc
2010-11-02 10:08 1005类的 注释 http://forfuture1978.itey ... -
FLEX4学习
2010-10-05 19:06 636http://www.riameeting.com/flex4 ... -
jar命令
2010-08-02 09:03 720:\aabbcc>jar cvf javacommon. ... -
hibernate jdbpTemplate 转型的好东东
2010-06-24 13:34 853List<?> list = daoUtil.ge ... -
双色球红球号码正则
2010-06-01 10:41 10148210#1#1#181119232527*01 8210#1 ... -
初次接触GOOGLE APP GAE
2010-05-27 08:31 1352昨天和一同事聊天,心血来潮就下载了GAE 1、myeclips ... -
java json
2010-04-28 16:31 1113json是一种很好的文本化结构语言,现在已经有很多服务端开发语 ... -
log4j实用配置
2010-04-20 10:29 873log4j是一个很好的日志记录工具,其灵活的配置赢得了很多开源 ... -
最通用的jstl
2010-03-26 17:33 794不管你使用MVC里面哪个C,(struts1.3 strut ...
相关推荐
这个压缩包“Struts2.5+Spring5+Hibernage5框架样例以及lib包.rar”提供了这三个框架的最新版本示例和库文件,对学习和理解SSH框架的集成有着重要的参考价值。 1. **Struts2.5**: Struts2 是一个基于MVC设计模式...
在**hibernage文档3.2**中,我们可以学习到以下关键知识点: 1. **ORM基础**:ORM是Object-Relational Mapping的缩写,它将数据库的表结构映射为Java类,使得数据库操作可以通过对象进行。Hibernate是ORM框架的一种...
首先,`hibernage 需要package`这个表述可能是指运行Hibernate应用程序时,需要导入相关的Java包。Hibernate的核心依赖包括但不限于以下这些: 1. **Hibernate核心库**:这是Hibernate的基础,包含了ORM的主要功能...
Spring MVC、Hibernate 和 Spring 是Java开发中非常重要的三个框架,它们在企业级应用开发中扮演着核心角色。这里我们主要探讨基于Spring 2.5和Hibernate 3.0的集成应用。 Spring MVC 是Spring框架的一个模块,专注...
- Hibernate 的配置文件(通常为`hibernate.cfg.xml`)是设置数据库连接、方言、缓存策略等核心参数的地方。在高级使用中,我们可能会涉及动态加载配置、多数据源配置以及自定义属性设置。 - SessionFactory 的...
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1.第3部分。三部分全下完再解压第一部分!
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1.第二部分。三部分全下完再解压第一部分!
精通JSF-基于EJB Hibernage Spring整合开发与项目实践代码.part1,第一部分,。将三部分一起下载完后再解压第一部分!
Hibernate提供了第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),通过缓存策略提高了数据访问效率。同时,还支持第三方缓存服务,如Ehcache。 4. **查询语言HQL** Hibernate Query ...
本系统采用struts+spring+hibernate架构,重在讲述三者结合在一起的应用开发,所有源程序都 有详细的注释,供入门者学生参考,未经作者允许不得用于商业用途,只能用于教学或个人学习。 程序只是整个系统中的...
此外,还会讲解实体间的一对一、一对多、多对一、多对多的关系映射,以及继承映射策略。 数据持久化是Hibernate的核心功能,书中会展示如何使用Hibernate进行CRUD操作(创建、读取、更新和删除)。这涉及到使用...
在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它允许开发者通过Java对象来操作数据库,而无需直接编写SQL语句。在这个"hibernate的xml配置关系例子"中,我们将探讨如何使用XML配置文件来定义...
【hibernate5最新版jar包下载(全)】 Hibernate是一个强大的对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方案。在Java应用开发中,特别是企业级应用,Hibernate作为数据库访问层,能够极大地简化...
在IT行业中,尤其是在Java企业级应用开发领域,WebLogic服务器是一个广泛应用的中间件,用于部署和管理Java EE应用程序。在本问题中,我们遇到了一个特定的错误,即“weblogic10.3 org.hibernate.hql.ast.HqlToken...
标题“Hibernage_Session_Manager_ThreadLocal”涉及到的是Hibernate框架中的一种优化策略——使用ThreadLocal管理Session。在Java Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它帮助开发者将...
3. 使用命名参数,而不是直接将值拼接到HQL中,这样可以避免特殊字符的问题,同时提高可读性。 4. 如果Map中的条件数量非常多,可以考虑使用动态SQL库如MyBatis,它在处理复杂的动态查询条件方面更为便捷。 总的来...
该博客系统基于struts2+hibernage+mysql,十分实用,其中数据库和说明文档一应具备,内附数据库和工程文件,下载后将数据库导入和用Myeclipse重新发布一下工程即可使用,功能十分强大。
Hibernate示例该项目展示了Hibernate的... 包含必要的Maven依赖项( pom.xml ),Hibernate配置( src/main/resources/hibernage.cfg.xml )和SessionFactory准备( src/main/java/hibernate/HibernateHelper.java )分
在实际项目中,`pom.xml`可能会有Spring Boot Starter Data JPA依赖,以引入JPA和Hibernage的相关库。同时,项目可能包含多个配置类,如`DataSourceConfiguration.java`和`JpaConfig.java`,用于配置不同的数据源和...
3. **自动配置**:Spring Boot根据项目中引入的依赖自动配置相应的Bean,例如引入了JPA,就会自动配置数据源、JPA、Hibernage等。 4. **命令行接口(CLI)**:提供了命令行工具,方便进行快速原型开发。 5. **...