NHibernate初学实例
- 格式:doc
- 大小:153.00 KB
- 文档页数:8
Hibernate 学习-----创建第一个简单的hibernate程序应用数据库:MySQL工具Myeclipse1数据库中创建数据库bookstore,建立一个表books2 建立一个java projectSrc里面创建一个包com.dao,创建一个类Book (与数据库中表的字段相匹配的类)代码:Book.javapackage com.daoimport java.sql.Timestamp;public class Book{private Integer id;private String name;private String author ;private Timestamp;//声明私有变量与数据库中字段一致,对于主键变量类型尽量使用包装类。
//使用包装类原因:对于id,假如使用int类型,当输入Id为空时,java默认初始化id值为//0,而integer则默认初始化为null。
public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Timestamp getCreat_time() {return creat_time;}public void setCreat_time(Timestamp creat_time) {this.creat_time = creat_time;//使用工具自动生成各个变量的set和get方法}}3 com.dao包下创建一个配置文件,告诉hibernate类对应的表即创建类与表之间的映射关系文件创建Book.hbm.xml (注hbm hibernate mapping)内容:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"> //前面是固定,不需要改变<!----><hibernate-mapping ><class name="com.dao.Book" table="books" lazy="false">//class name指出类的路径,table数据库表的位置<id name="id" type="int" column="id" ><generator class="increment"/></id>//主关键字字段必须用id表示//name 类中的变量名称,type 类型,colum 表中字段名//Generator主关键字产生器 class=”increment”自增长类型<property name="name" not-null="true" column="name"/> //其他字段用property声明其他一致<property name="author" not-null="true"column="author"></property><property name="price" not-null="false"column="price"></property><property name="creat_time" not-null="true"column="creat_time"></property></class></hibernate-mapping>4 创建hibernate配置文件hibernate.cfg.xml在classpath中,即在src根目录下创建hibernate.cfg.xml告诉hibernate要连接的数据库具体信息代码:<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- Database connection settings --><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property>//数据库驱动<propertyname="connection.url">jdbc:mysql://localhost:3306/bookstore</property> //操作url<property name="ername">root</property>//数据库用户名<property name="connection.password">158655</property>//数据库用户密码<property name="show_sql">true</property>//是否把执行信息打印在控制台<propertyname="dialect">org.hibernate.dialect.MySQLDialect</property> <mapping resource="com/dao/Book.hbm.xml"/>//指向路径。
一个hibernate的小例子。
最近在学习Hibernate,从网上找了些文章,很难找到图文版单独讲解的,所以自己写了个小例子,希望能给初学者带来点帮助!使用工具为:MyEclipse 6.5 、Tomcat 6.x、,SQL Server20001.先建立一个web project项目:test点击finish,完成web project项目创建。
2.建立数据库的连接windows——> show view——> other——>DB Browser打开后DB Browser后,new一个新的Database Driver,数据库连接驱动对象其中:Driver template是使用的哪种数据库Driver name 是连接对象名,随便起Connection URL数据库连接字符串User name 、password数据库的账号、密码Driver JARs sqlserver2000的连接jar包加上连接jar包后,Driver classname 就会自动显示选择Save password ,然后点击Test Driver,测试下驱动,出现如下图则成功。
点击NextDisplay all schemas 显示所有数据库图形界面Dislpay default …….. 显示默认的数据库的界面,即你在驱动对象中连接的数据库:DatabaseName=ddsql,也就是ddsql。
Display the selected schemas 手动选择数据库,点击Add选择,最好使用这个选择数据库。
选择好后,点击Finish。
3.在项目中加载Hibernate点击Next继续,点击Next,在出来的界面中DB Driver中选择我们使用的数据库,如图点击Next点击new一个新的包com.jnycsl.hibernate,然后Finish。
这样,出现hibernate.cfg.xml的图形显示,点击source<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration><session-factory><property name="ername">sa</property><propertyname="connection.url">jdbc:microsoft:sqlserver://localhost:1433;Datab aseName=ddsql</property><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property> <property name="myeclipse.connection.profile">test</property><property name="connection.password">sa</property><propertyname="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServer Driver</property></session-factory></hibernate-configuration>4,使用hibernate,打开DB Browser,从test中选择一个表usersUsers表字段如下:字段名类型约束备注id int 主键自增长,标识列loginid varchar 非空password varchar 非空name varchar 非空点击,下面界面如下选择Java src folder 选择的当然是本项目的文件夹了Java package 使用的包修改为上图所示点击Next在出现的界面中只是把Id generator 选择为identity就可以了,在点击next,在出现的界面中直接选择Finish结束。
hibernate官方入门教程第一部分-第一个Hibernate程序首先我们将创建一个简单的控制台(console-based)hibernate程序。
我们使用内置数据库(in-memory database) (HSQL DB),所以我们不必安装任何数据库服务器。
让我们假设我们希望有一个小程序可以保存我们希望关注的事件(Event)和这些事件的信息。
(译者注:在本教程的后面部分,我们将直接使用Event而不是它的中文翻译“事件”,以免混淆。
)我们做的第一件事是建立我们的开发目录,并把所有需要用到的Java库文件放进去。
从Hibernate网站的下载页面下载Hibernate分发版本。
解压缩包并把/lib下面的所有库文件放到我们新的开发目录下面的/lib目录下面。
看起来就像这样:.+libantlr.jarcglib-full.jarasm.jarasm-attrs.jarscommons-collections.jarcommons-logging.jarehcache.jarhibernate3.jarjta.jardom4j.jarlog4j.jarThis is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate. See the README.txt file in the lib/ directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually,Log4j is not required but preferred by many developers.) 这个是Hibernate运行所需要的最小库文件集合(注意我们也拷贝了Hibernate3.jar,这个是最重要的库)。
简单的hibernate数据库插入例子刚刚开始学习,希望和大家一起进步吧。
请大家不要笑我。
这是一个最简单的例子,该例子基本上是按照hibernate reference来做的。
做这个例子我选用的应用服务器是山东中创软件商用中间件有限公司的InforWeb(这个应用服务器是商用的,如果你无法获得它,那么可以用tomcat代替),数据库我选用的是Oracle,你可以选用小巧的MySql。
首先你需要Hibernate2.0 相关运行环境,可以从 /下载;第一步:下载hibernate.第二步:在InforWeb的deploy(tomcat中是webapps)目录下先新建一个应用,目录如下:%InforWebHome%/deploy/cat。
第二步:将数据库的驱动程序加入到CLASSPATH中,或者将驱动拷贝到%InforWebHome%/lib下(tamcat下是%tomcatHome%/common/lib);第三步:把Hibernate提供的hibernate2.jar(根目录下)和一些第三方的运行库拷贝到hibernate\WEB\INF\lib目录下。
(这些第三方的运行库包含在下载的Hibernate lib目录下)。
下面对几个必须的包做一下解释:dom4j:hibernate解析xml配置和映射元文件时需要使用。
Cglib:hibernate运行时使用这个代码生成库强化类。
Collections,Commons Logging:ODMG4:Hibernate 提供了一个可选的ODMG 兼容持久化管理界面。
如果你需要映射集合,你就需要这个类库,就算你不是为了使用ODMG API。
我们在这个教程中没有使用集合映射,但不管怎样把这个JAR 拷贝过去总是不错的。
虽然这几个文件是必须的,但是还是把所有的包都拷贝过去吧,这样比较保险啊,:)。
第四步:你可以通过InforWeb管理工具配置应用、给应用添加数据源,如果你对部署描述符比较熟悉的话就直接修改server.xml吧。
•NHibernate(1)-試驗 試驗版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 /logs/75393398.html一、試驗架構圖如右 1 添加引用:NHibernate.dll、Iesi.Collections.dll, 編譯後,會自動生成 Castle.Core.dll、Castle.DynamicProxy2.dll、log4net.dll 2 使用 NHibernateProfier 探查 HQL 語句: 執行 NHibernateProfier 的探查功能,需要在應用程序裡面配置相關信息。
首先,我們需要添加 HiberHibernatingRhinos.Profiler.Appender.dll 的引用。
該文件在 NHibernateProfier 安裝目錄下可找到。
接著,我們配置 log4net:於 web 層目錄下創建 log4net.config 文件: <?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="NHProfAppender" type="HibernatingRhinos.Profiler.Appender.NHibernate.NHProfAppender, HibernatingRhinos.Profiler.Appender"> <sink value="http://localhost"/><!--注意,這裡應用程序 web 地址--> </appender> <logger name="HibernatingRhinos.Profiler.Appender.NHibernate.NHProfAppender.Setup"> <appender-ref ref="NHProfAppender"/> </logger> </log4net> 最後,在 Global.asax 全局文件中添加語句: void Application_Start(object sender, EventArgs e) { //在应用程序启动时运行的代 码 } 3 DAL 層 SessionManager.cs using NHibernate; using NHibernate.Cfg; namespace Siuben.NH.DAL { public class SessionManager { private ISessionFactory _sessionFactory; public SessionManager() { _sessionFactory = GetSessionFactory(); } private ISessionFactory GetSessionFactory() { return (new Configuration()).Configure().BuildSessionFactory(); } public ISession GetSession() { return _sessionFactory.OpenSession(); } } } 4 Model 層說明: HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();Entities: namespace Siuben.NH.Model { public class Customer { public virtual int ID { get; set; }//Virtual 必須 public virtual string FirstName { get; set; } public virtual string LastName { get; set; } } } Mappings: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Siuben.NH.Model" namespace="Siuben.NH.Model"> <class name ="Siuben.NH.Model.Customer,Siuben.NH.Model" table="Customer"> <id name="ID" column="ID" type="Int32" unsaved-value="0"> <generator class ="native"></generator> </id> <property name="FirstName" column ="FirstName" type="string" length="50" not-null="false"/> <property name ="LastName" column="LastName" type="string" length="50" not-null="false"/> </class> </hibernate-mapping>•NHibernate(2)-HQL版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 /logs/75408876.html1.from 子句顾名思义,同 SQL 语句类似:(注意有不同的地方:HQL 和 SQL 的關鍵字不區分大小寫,而 HQL 中 c.CustomerId 和 c.customerid 是不同的 正確的寫法是 CustomerId 要與 Model 層 Customer 對象的 CustomerId 屬性大小寫相同,原因很簡單,HQL 就是面向對象的查詢) 1.简单用法:返回表中所有数据。
1. <?xml version="1.0" encoding='utf-8'?>2. <!DOCTYPE hibernate-mapping PUBLIC3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"4. "/hibernate-mapping-3.0.dtd">5.6. <hibernate-mapping>7. <class name="er" table="users">8. <id name="id">9. <generator class="identity"/>10. </id>11. <property name="name"/>12. <property name="password"/>13. <property name="email"/>14. </class>15. </hibernate-mapping>在数据库中建立一个myproject(按你的意思定名)数据库,在其中建立一个users表(向RoR学习):1. CREATE TABLE `users` (2. `id` int(11) NOT NULL auto_increment,3. `name` varchar(255) default NULL,4. `password` varchar(255) default NULL,5. `email` varchar(255) default NULL,6. PRIMARY KEY (`id`)7. )注:我是用phpmyadmin对mysql数据库进行管理的,在建立的时候我特意为其选择了utf-8编码。
Hibernate简单示例Hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的。
这篇博文,我们主要以实例的形式学习Hibernate,不深究Hibernate的思想和原理,否则,一味追求,苦学思想和原理,到最后可能什么也学不会,从实践入手,熟能生巧,思想和原理自然而然领悟。
一、开发环境Win8 + jdk1.7 + MyEclipse + Tomcat5.0 + MySQL说明:其实Hibernate是非常独立的框架,根本不需要MyEclipse,Eclipse,Tomcat,Log4J等,他们只不过是能满足我们其他的需求,才把他们引进来的。
二、下载文件你需要Java SDK、Hibernate包、和JDBC Driver。
1、Hibernate包下载地址:/hibernate/?sort_by=date&sort=desc2、JDBC Driver根据你的数据库来定,一般database官网都有。
Hibernate支持常用的数据库,比如MySQL,Oracle 等等。
这两个数据库是现在比较常用的,都有JDBC Driver:Oracle JDBC Driver下载地址(下载前必须同意Oracle协议书)/software/htdocs/distlic.html?/software/tech/java/sqlj_jdbc/htdocs/jdbc9201.htmlMySQL JDBC Driver下载地址/downloads/connector/j/3.0.html三、所需jar包hibernate3.jar Hibernate的核心包dom4j-1.6.1.jar dom4j读取xml文件包mysql-connector-java-3.1.13-bin.jar MySQL的jdbc驱动包Hibernate的作用:让我们以面向对象的方式或思维来考虑怎么向关系型数据库存取数据。
这篇文章本来是要在昨天睡觉之前发上来,但是家里的网速实在是让我郁闷,刚忙完工作偷空上来赶紧发了,还有一点让我郁闷的就是JavaEye的这个编辑器不是太好用,在word里面写好的内容不能全部粘贴过来,文档中有很多图片,需要一张张上传,然后在加上来!痛苦。
以后还是少截图。
不说了,还是赶紧发文章吧!1、数据库设计建立crud.student数据库表:图1 数据库表你可以使用如下语句创建该库表:Sql代码1.create database if not exists `crud`;E `crud`;3.DROP TABLE IF EXISTS `student`;4.CREATE TABLE `student` (5. `id` int(4) NOT NULL auto_increment,6. `name` varchar(20) default NULL,7. `age` int(4) default NULL,8. `score` int(4) default NULL,9. PRIMARY KEY (`id`)10.) ENGINE=InnoDB DEFAULT CHARSET=utf8;在这里我使用的是SQL Server2000数据库,当然你也可以选择别的数据库,只是在选择之前请准备好相应的jar包即可。
2、程序编写:第一步:配置数据源1、打开MyEclipse,新建一个web工程,这里命名为hibernate_demo2、打开数据库设置器:依次单击【window】-->【Show View】-->【Other…】如下图所示:3、在弹出的窗口ShowView中选择DB Browser,如下图所示:4、在DB Browser窗口中,选择显示的图标,单击右键执行新建命令,如下图示5、弹出Database Driver对话框,在此会要求我们配置数据库的相关信息,具体设置如下图所示,设置完成,单击Finish.(Connection URL填写:jdbc:microsoft:sqlserver://localhost:1433 Driver IARS:加入SQL Server 的那三个jar包)【第二步】引入hibernate配置文件1、添加hibernate包:选中我们的Web工程,依次单击鼠标右键-->MyEclipse-->Add Hibernate Capabilities… 如下图所示:2、在弹出的窗口中做如下设置:【Next】【Next】单击Next,把要创建的SessionFactory放置于相应的包中,如果前面没有设置包名,这里要先单击New创建新的包。
NHibernate相信大家都已非常熟悉,园子里有很多高手写了相关的系列文章,不过我还是NHibernate的一名初学者,在此将一个晚上学习成果分享一下,一个很简单的利用NHibernate实现增删改的例子。
本例中使用的NHibernate版本为版本为官方2008年9月29日最新发布的NHibernate-2.0.1.GA 版本,点击下载1 首先创建一个数据库NHibernateSample,使用的数据库版本为sqlserver2005。
在该数据库中创建表UserInfo。
CREATE TABLE[dbo].[UserInfo]([UserInfoID][int]IDENTITY(1,1) NOT NULL,[UserName][varchar](20) COLLATE Chinese_PRC_CI_AS NULL,[Email][varchar](100) COLLATE Chinese_PRC_CI_AS NULL)2 打开vs2008,创建web application 命名为Web,解决方案的名称设为NHibernateDemo,然后在此解决方案下添加两个类库项目BLL和Model。
3 解压下载的NHibernate包,将NHibernate-2.0.1.GA-bin\bin\net-2.0目录下的dll文件复制到web项目中的DLL文件夹中。
DLL文件夹用来存放一些公用的dll文件。
4 在Model项目中创建两个目录:Entities和Mappings。
分别存放实体类和映射文件。
在Entities目录下创建类UserInfo.cspublic class UserInfo{public virtual int UserInfoID { get; set; }public virtual string UserName { get; set; }public virtual string Email { get; set; }}需要注意到是实体类中的属性必须加virtual修饰符。
在Mappings目录下创建映射文件UserInfo.hbm.xml<?xml version="1.0" encoding="utf-8" ?><hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"assembly="Model" namespace="Model"><class name ="erInfo,Model" table="UserInfo"> <id name="UserInfoID" column="UserInfoID" type="Int32" unsave d-value="0"><generator class ="native"></generator></id><property name="UserName" column ="UserName" type="string" le ngth="20" not-null="false"/><property name="Email" column="Email" type="string" length="1 00" not-null="false"></property></class></hibernate-mapping>映射文件创建好后,要修改该文件的输入操作为“嵌入式资源”,默认情况下为内容,在映射文件上右击属性,修改如下:5 在BLL项目中创建类UserInfoBLL.cs 用来实现对UserInfo表的增删改操作。
在BLL项目中添加对Model和NHibernate的引用UserInfoBLL.csl类的代码如下:public class UserInfoBLL{private string path = HttpContext.Current.Server.MapPath("~/hibernate.cfg.xml");public bool Insert(UserInfo userInfo){Configuration cfg = new Configuration().Configure(path);ISession session = cfg.BuildSessionFactory().OpenSession();ITransaction transaction = session.BeginTransaction();try{session.Save(userInfo);mit();return true;}catch (Exception e){transaction.Rollback();return false;}finally{session.Close();}}public IList<UserInfo> GetUsers(){Configuration cfg = new Configuration().Configure(path);ISession session = cfg.BuildSessionFactory().OpenSession();//使用HQLIList<UserInfo> list = session.CreateQuery(" from UserI nfo").List<UserInfo>();return list;}public bool Update(UserInfo userInfo){Configuration cfg = new Configuration().Configure(path);ISession session = cfg.BuildSessionFactory().OpenSession();ITransaction transaction = session.BeginTransaction();try{session.Update(userInfo);mit();return true;}catch (Exception e){transaction.Rollback();return false;}finally{session.Close();}}public bool Delete(UserInfo userInfo){Configuration cfg = new Configuration().Configure(path);ISession session = cfg.BuildSessionFactory().OpenSession();ITransaction transaction = session.BeginTransaction();try{session.Delete(userInfo);mit();return true;}catch (Exception e){transaction.Rollback();return false;}finally{session.Close();}}public UserInfo GetUserInfoById(int userId){Configuration cfg = new Configuration().Configure(path);ISession session = cfg.BuildSessionFactory().OpenSession();return session.Get<UserInfo>(userId);}}上面的GetUsers方法中用的是HQL查询的数据,NHibernate查询数据的方式有三种,具体参见NHibernate文档。
5 在web项目的根目录下添加hibernate.cfg.xml文件,该文件用于配置一些数据库连接方面的信息。
<?xml version="1.0" encoding="utf-8"?><hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory name="NHibernateDemo"><property name="connection.driver_class">NHibernate.Driver.Sq lClientDriver</property><property name="connection.connection_string">Data Source=.\SQLEXPRESS;Initial Catalog=NHibernateSample; Integrated Security=True;Pooling=False;uid=sa;pwd=sa123 </property><property name="adonet.batch_size">10</property><property name="show_sql">false</property><property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property><property name="use_outer_join">true</property><property name="command_timeout">10</property><property name="query.substitutions">true 1, false 0, yes 'Y ', no 'N'</property><mapping assembly="Model"/></session-factory></hibernate-configuration>6 在web项目中添加Model和BLL的引用。