NHibernate初学实例
hibernate简单实例

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的小例子。
最近在学习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官方入门教程第一部分-第一个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 API简介
Hinernate的体系结构(运行时)
SessionFactory:它保存了对当前数据库配置的所有映射关系,它是将某 个数据库的映射关系经过编译之后全部保存在内存中的。 它还是生成 Session的工厂,它在进行实例化的过程中将会用到ConnectionProvider。 一个SessionFactory对应一个数据库连接,当数据库连接改变时需要修改 SessionFactory Sesion: 是进行持久化操作的基础,所有的持久化操作都是在Session的 基础上进行的。它相当与JDBC中的Connection。它是Hibernate的持 久化 管理器的核心,提供了一系列的持久化操作方法。另外,它还持有一个针 对持久化对象的一级缓存,在遍历持久化对象或者根据持久化标识查找对 象的时候会用 到。 Transation:功能上和数据库中的事务完全一样,通过它实现对数据库中 事务的控制。Transation对象是Session对象产生的,所以他的生命周期比 Session短。一个Session的生命周期中可以有多个Transaction对象。 ConnectonProvider:主要作用是生成与数据库建立了连接的JDBC对象 ,同时他还作为数据库连接的缓冲池。通过ConnectionProvider实现了应 用程序和底层的DataSource和DriverManager的隔离。 TransactionFactory:是生成Transaction对象的工厂,通过 TransactionFactory实现了事务的封装,使其具体的实现方法与应用程序无 关。
判断一个实体对象是否处于瞬态: 该实体对象的<id>属性(如果存在)的值为空 如果在映射文件中为<id>设置了unsaved-value属性,并且 实体对象的id属性的值与unsaved-value属性的值相同 如果这个实体对象配置version属性,并且version属性的 空 在映射文件中为version属性设置了unsaved-value属性,并且 version属性的值与unsaved-value属性的值相同。 如果设置了interceptor,并且interceptor的isUnsaved() 方法的返回值为true
hibernate 简单实例

简单的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吧。
1 Hibernate入门

加载并存储对象
public class EventManager { public static void main(String[] args) { EventManager mgr = new EventManager(); mgr.createAndStoreEvent("My Event", new Date()); HibernateUtil.getSessionFactory().close(); } private void createAndStoreEvent(String title, Date theDate) { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Event theEvent = new Event(); theEvent.setTitle(title); theEvent.setDate(theDate); session.save(theEvent); session.getTransaction().commit(); } }
– column属性则告诉Hibernate, 我们使用EVENTS表的 哪个字段作为主键。嵌套的generator元素指定了标识 符生成策略,在这里我们指定native,它根据已配置的 数据库(方言)自动选择最佳的标识符生成策略。
映射文件
• 和id元素一样,property元素的name属性告诉 Hibernate使用哪个getter和setter方法。在此例中, Hibernate会寻找getDate()/setDate(), 以及 getTitle()/setTitle()。 • 为什么date属性的映射含有column attribute,而 title却没有?当没有设定column attribute 的时候, Hibernate缺省地使用JavaBean的属性名作为字 段名。对于title,这样工作得很好。然而,date在 多数的数据库里,是一个保留关键字,所以我们 最好把它映射成一个不同的名字。
NHibernate基本教程

•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.简单用法:返回表中所有数据。
一个简单的hibernate实例(之一)

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编码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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的引用。