`

菜鸟级Hibernate入门心得

阅读更多
我之前没有学过Hibernate,甚至都没有用过JSP,Servlet做一些东西,一直学的是C#,asp.net,但是在看.net项目源码的时候发现,作者使用ORM技术,当时看得一头雾水,在网上搜了一下,原来是是与Hibernate相关的一门构架思想,所以就去图书馆借了一本书《深入浅出Hibernate》,看完第一张,觉得基本上都明白,因为之前了解过一些设计模式的知识。第二章讲解入门级Hibernate配置,以下是我遇到的困难和解决方案,写出来与大家共勉,如果不对之处,欢迎指正。
准备工作:
1.软件:
IDE:eclipse-jee-galileo-win32.zip
DataBase:mysql5.1.30win32.zip
DataBase View:MySQLFront-v5.1.357.zip
2.源文件:
hibernate-2.1.8.zip
hibernate-extensions-2.1.3.zip
Middlegen-Hibernate-r5.zip
mysql-connector-java-5.0.3-bin.jar
1. 哪里下载Hibernate
这个问题我困惑了很久,在sourceforge上不知道怎么下载。不过还是会了,这个比较简单,就不多说,自己去找!
2. 有数据库产生基础代码
use hibsql;
CREATE TABLE `t_user1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM;

新建了一个java项目,把hibernate等一下文件拷到了lib文件下。
3. 如何产生MiddleGen画面和生成*.hbm.xml文件
a) 首先配置MiddleGen所需要的目标数据库参数:
进入Middlegen-Hibernate-r5\config\database\mysql.xml,修改数据库配置文件,包括数据库名称,数据库用户名和密码。
   <!-- =================================================================== -->
   <!-- ant properties/targets for mysql                                    -->
   <!-- note: this is not a proper xml file (there is no root element)      -->
   <!--       it is intended to be imported from a *real* xml file          -->
   <!-- =================================================================== -->

   <property name="database.script.file"           value="${src.dir}/sql/${name}-mysql.sql"/>
   <property name="database.driver.file"           value="${lib.dir}/mysql-connector-java-5.0.3-bin.jar"/>
   <property name="database.driver.classpath"      value="${database.driver.file}"/>
   <property name="database.driver"                value="org.gjt.mm.mysql.Driver"/>
   <property name="database.url"                   value="jdbc:mysql://localhost/hibsql"/>
   <property name="database.userid"                value="root"/>
   <property name="database.password"              value="sunbin123"/>
   <property name="database.schema"                value=""/>
   <property name="database.catalog"               value=""/>

   <property name="jboss.datasource.mapping"       value="mySQL"/>


b) 修改MiddleGen的build.xml构建文件
修改Middlegen-Hibernate-r5根目录下的build.xml文件,此文件是Middlegen的Ant构建配置。Middlegen将根据build.xml文件中的具体参数生成数据库映射文件。
修改配置文件,改为上面修改的mysql数据库
<!DOCTYPE project [
    <!ENTITY database SYSTEM "file:./config/database/mysql.xml">
]>


<path id="lib.class.path">
      <pathelement path="${database.driver.classpath}"/>
      <fileset dir="${lib.dir}">
         <include name="*.jar"/>
      </fileset>
      <!-- The middlegen jars -->
      <!--fileset dir="${basedir}/.."-->
      <fileset dir="${basedir}/middlegen-lib">
         <include name="*.jar"/>
      </fileset>
	  <pathelement path="../hibernate-2.1/hibernate2.jar"/>
	  <fileset dir="../hibernate-2.1/lib">
		<include name="*.jar"/>
	  </fileset>
	  <pathelement path="../hibernate-extensions-2.1.3/tools/hibernate-tools.jar"/>
	  <fileset dir="../hibernate-extensions-2.1.3/tools/lib">
		<include name="*.jar"/>
	  </fileset>
   </path>

如何运行Ant任务相信网上很多教程,这里就不多说了。
结果是:

点击表出现Table Mapping Attribute,点击表中的列出现Column Mapping Attribute,最后点击上方的Genetate按钮会自动生成*.hbm.xml的映射文件。
4. Hibernate配置
Hibernate配置是需要配置hibernate.cfg.xml的配置文件,配置完成放在src目录下,在文件中配置数据库url,数据库JDBC驱动,数据库用户名….

Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- 各属性的配置-->

<!-- 数据库URL -->
<property name="hibernate.connection.url">
	jdbc:mysql://localhost/hibsql
</property>

<!-- 数据库JDBC驱动 -->
<property name="hibernate.connection.driver_class">
	org.gjt.mm.mysql.Driver
</property>

<!-- 数据库用户名 -->
<property name="hibernate.connection.username">
	root
</property>

<!-- 数据库密码 -->
<property name="hibernate.connection.password">
	sunbin123
</property>

<!-- dialect,每个数据库都有其对应的dialect以匹配其平台特性-->
<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>

<!-- 是否将运行期生成的SQL输出到日志以供调试 -->
<property name="show_sql">true</property>

<!-- 是否使用数据库外连接 -->
<property name="hibernate.use_outer_join">
	True
</property>

<!-- 事务管理类型,这里我们使用JDBC Transaction -->
<property name="hibernate.transaction.factory_class">
	net.sf.hibernate.transaction.JDBCTransactionFactory
</property>

<!-- 映射文件 -->
<mapping resource="org/redsaga/quickstart/Tuser.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

5. 日志配置
Hibernate采用Apache Common logging,并结合Apache log4j作为日志输出组件。
Hibernate开发包的etc目录下附带了一个示例配置log4j.properties,将这个文件复制到src目录下。
6. eclipse如何创建JUnit项目
eclipse如何构建JUint项目比较简单,很多教程,不赘述,但是我想讲一下我遇到的问题,首先是导入包,没学过java的我都会了导入jar文件,相信大家都会,接着就是JUint的一个规定,JUnit中,以“test”作为前缀的方法为测试方法,将被JUnit自动添加到测试计划中运行,还有就是方法必须是public的。
7. 测试的java文件HibernateTest.java
import java.util.List;
import org.redsaga.quickstart.TUser;
import junit.framework.Assert;
import junit.framework.TestCase;


import net.sf.hibernate.HibernateException;  
import net.sf.hibernate.Session;  
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.cfg.Configuration; 
import net.sf.hibernate.cfg.Environment;
public class HibernateTest extends TestCase{
	Session session = null;
	protected void setUp()
	{
		try
		{
			//Configuration config = new Configuration();
			//config.addClass(Tuser.class);
			Configuration config = new Configuration().configure();
			SessionFactory sessionFactory = config.buildSessionFactory();
			session = sessionFactory.openSession();
		}
		catch(HibernateException e)
		{
			e.printStackTrace();
		}
	}
	protected void tearDown()
	{
		try
		{
			session.close();
		}
		catch(HibernateException e)
		{
			e.printStackTrace();
		}
	}
	public void testInsert()
	{
		Transaction tran = null;
		try
		{
			tran = session.beginTransaction();
			TUser user = new TUser();
			user.setName("sunbin");
			session.save(user);
			session.flush();
			tran.commit();
			Assert.assertEquals(user.getId().intValue()>0, true);
		}
		catch(HibernateException e)
		{
			e.printStackTrace();
			Assert.fail(e.getMessage());
			if(tran!=null)
			{
				try
				{
					tran.rollback();
				}
				catch(HibernateException e1)
				{
					e1.printStackTrace();
				}
			}
			
		}
		
	}
	
	public void testSelect()
	{
		String hql = " from TUser where name='sunbin'";
		try
		{
			List userlist = session.createQuery(hql).list();
			TUser user = (TUser)userlist.get(0);
			System.out.print("共有"+userlist.size()+"条记录");
			System.out.print(user.getName());
			Assert.assertEquals(user.getName(), "sunbin");
		}
		catch(HibernateException e)
		{
			e.printStackTrace();
			Assert.fail(e.getMessage());
		}
	}
}

8. 总结一下
以上基本是运行成功的过程,刚开始写的时候是想详细的把不会的写一下,到现在写的差不多了,发现做的还是不够好,这也是我第一次写总结,我想以后我应该是遇到一个问题,就把这个问题的题目和对应的答案记下来,虽然会耽误一点时间,这样就不会有遗漏了,还有一个菜鸟级的问题,我把所有要用的如Hibernate组建放到lib文件下,但是在.java文件中想引用时,却无法直接引用,需要右键项目,点击properties把jar文件引入才能用?能不能自动引用呢?哪位明白告知小弟,提前谢谢了。
分享到:
评论

相关推荐

    ### 2024年第一季度青岛房地产市场季度简报总结、市场综述

    2024年第一季度,青岛房地产市场经历了显著变化,总体呈现供需双降的趋势。一季度全市商品房新增10,721套,面积约152.04万平方米,同比下降29%;销量为14,936套,面积约200.85万平方米,同比下降38%,成交均价为14,204元/平方米,同比下降2%。土地市场方面,供应总量为39万平方米,同比减少7%,但成交面积为27万平方米,同比增长31%,楼面地价为6,625元/平方米,同比增长253%,土地出让金为17.61亿元,同比增长354%。二手房市场新增挂牌2.9万套,成交13,405套,132.21万平方米,累计挂牌51.70万套,挂牌均价17,800元/平方米。此外,青岛市出台多项政策支持房地产市场平稳健康发展,包括降低房贷利率、优化开发用地土地规划政策、支持房企融资等。这些政策旨在促进市场供需平衡,防止市场大起大落。

    Linux常用命令大全.markdown

    linux常用命令大全

    MATLAB代码,用于模拟具有无限半空间体积导体的电机单元电势(MUP),星号.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    空调销售网站策划案例.doc

    空调销售网站策划案例.doc

    全球6G技术大会2024年以用户为中心的6G接入网技术研究白皮书31页.pdf

    全球6G技术大会2024年以用户为中心的6G接入网技术研究白皮书31页.pdf

    简约专业风格毕业答辩模板47个

    简约专业风格毕业答辩模板是一系列专为追求简洁与高效表达的大学生设计的答辩文档模板,共47个。这些模板融合了经典的设计元素与现代审美,强调信息的清晰传递与视觉的整洁,旨在帮助学生在答辩中以最专业的面貌展示自己的研究成果。 每个模板都具备结构合理的布局,适用于各个学科和研究领域,从人文社科到自然科学,均能满足不同需求。简约风格的设计使得学生能够专注于内容本身,避免冗余信息的干扰,提升答辩的专业性和可信度。此外,模板中合理运用的色彩、字体和图表设计,不仅增强了视觉吸引力,也使信息更易于理解。 通过使用这些简约专业风格的毕业答辩模板,毕业生能够自信地呈现自己的学术成果,提升答辩的整体效果,为成功的学术交流打下坚实基础。这些模板是展示个人研究与风格的理想选择。

    【数据集和模型】ChatGPT文本二分类

    由 Epsilon Luoo 在 HC3-Chinese 的基础上进行了一些细微的修改和清洗

    数字人动作捕捉:MATLAB-Kinect骨骼数据实时插值算法.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

    HI3519DV500 配置无线网依赖库以及编译脚本

    HI3519DV500 配置无线网依赖库以及编译脚本

    定制小米8-lineage22.1安卓15-fast功能项目线刷双版root 解锁bl后fast线刷

    资源说明; 1-----刷写前提是手机必须解锁bl先。而且会在fast模式刷写固件 2-----刷写方法与官方刷写步骤一样 3-----此固件为定制初始固件。可以在fast模式刷写 4-----属于适配固件。也许有个别bug。不接受请勿下载 5-----需要一定的刷机常识与动手能力的友友刷写。 6-----资源有可复制性。下载后不支持退。请知悉 7-----定制其他需求可以在csdn私信博主 博文参阅:https://csdn9.blog.csdn.net/article/details/143058308

    【机械臂路径规划】基于matlab快速探索随机树RRT和概率路网PRM串联机械臂路径规划【含Matlab源码 13167期】.zip

    Matlab领域上传的视频是由对应的完整代码运行得来的,完整代码皆可运行,亲测可用,适合小白; 1、从视频里可见完整代码的内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    世邦魏理仕:2021年西安房地产市场回顾与2022年展望.pdf

    世邦魏理仕:2021年西安房地产市场回顾与2022年展望

    Android Studio 2022.1.1和java编程语言yinyuebofangqi.zip

    Android Studio 2022.1.1和java编程语言yinyuebofangqi

    C知道对话分享图片下载

    C知道对话分享图片

    png-jpg-gif-webp-tiff等图片压缩工具基于nodejs的实现

    png-jpg-gif-webp-tiff等图片压缩工具基于nodejs的实现,绿色本地免安装,解压后运行exe文件,将图片文件或者包含图片的文件夹拖拽到软件界面即可压缩

    派对屋A1效果器电脑调音软件

    我们要了解什么是DSP(Digital Signal Processing)。DSP即数字信号处理,是一种利用数字计算方法对信号进行分析、变换和操作的技术。在汽车音响领域,DSP被广泛应用于改善音质,通过调整频率响应、延时、相位和增益等参数,使声音更加均衡、立体。 惠威是一款数字信号处理器,适用于那些希望升级原车音响系统但预算有限的用户。它通常拥有多个输入和输出接口,可以连接到汽车的音频源和扬声器,通过软件进行调音,使得声音能够适应不同的驾驶环境和听音偏好。 ,集成了先进的噪声抑制技术和强大的功率放大器,旨在为发烧友级别的车载音响系统提供卓越的性能。用户可以通过软件对整个系统的每一个细节进行优化,包括主动分频、时间校正等,以达到Hi-Fi级别的音乐享受。

    通信工程分包合同.docx

    通信工程分包合同.docx

    demo1(1).py

    demo1(1).py

    金融量化交易:MATLAB_构建多因子选股模型的完整开发指南.pdf

    文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 你是否渴望高效解决复杂的数学计算、数据分析难题?MATLAB 就是你的得力助手!作为一款强大的技术计算软件,MATLAB 集数值分析、矩阵运算、信号处理等多功能于一身,广泛应用于工程、科学研究等众多领域。 其简洁直观的编程环境,让代码编写如同行云流水。丰富的函数库和工具箱,为你节省大量时间和精力。无论是新手入门,还是资深专家,都能借助 MATLAB 挖掘数据背后的价值,创新科技成果。别再犹豫,拥抱 MATLAB,开启你的科技探索之旅!

Global site tag (gtag.js) - Google Analytics