Hibenrate_基于单实例配置及使用_初级小结_初级配置

Hibenrate之多对多关联 NULL 博文链接:https://javakeith.iteye.com/blog/857028 立即下载

 Hibernate是一个基于JDBC的主流持久化框架,是一个ORM的实现
ORM(对象-关系映射机制)
创建Hibernate步骤:
1:Hibernate配置文件:
 文件默认名为:"hibernate.cfg.xml",
                文件类型为"-//Hibernate-configuration DTD 3.0//EN"(注:不要搞错了!!!)
/..
<session-factory>
 
 <property name="dialect">                               <!-- 指定数据连接的语言 -->
      org.habernate.dialect.SqlServerDialect
 </property>
 
 <property name="connection.driver_class">     <!-- 指定数据连接的驱动 -->
      net.sourceforge.jtds.jdbc.Driver
 </property>
 
 <property name="connection.url">                    <!-- 指定数据连接的URL -->
      jdbc:jtds:sqlserver://127.0.0.1:1433/DB_Haber
 </property>
 
 <property name="connection.username">         <!-- 指定数据连接的用户名 -->
      sa
 </property>
 
 <property name="connection.password">         <!-- 指定数据连接的密码 -->
      sa     
 </property>

 <property name="show_sql">                            <!-- 指定在运行时输出执行的SQL语句 -->
      true
 </property>

 <!-- 这里指定了与之映射的实体类映射文件,完整路径,包名"/"到映射文件名 -->
 <mapping resource="com/sllereak/hab/entity/Member.hbm.xml"/>  
</session-factory>
/..

 

2:实体类和与之映射的文件
(这里举出一个简单的实体类Member.java)
import java.io.Serializable;
public class Member implements Serializable {
 private static final long serialVersionUID = 2861317560659750439L; 
 private Long memID;
 private String memName;
 private Integer memAge; 
 public Member(){}
 public Long getMemID() {
  return memID;
 }
 public void setMemID(Long memID) {
  this.memID = memID;
 }
 public String getMemName() {
  return memName;
 }
 public void setMemName(String memName) {
  this.memName = memName;
 }
 public Integer getMemAge() {
  return memAge;
 }
 public void setMemAge(Integer memAge) {
  this.memAge = memAge;
 } 
}

在实体类中,实现类的序列化是有必要的,类中的数据类型必须为包装类型。如:Long,Integer等
现在创建与Member.java映射的XML文件
映射文件名即为Member.hbm.xml
文件类型为"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
(也不要弄错了,在框架的搭建中,需要大量的配置文件,而配置文件的文件类型各有差异。
个人小技巧,因为这是一个表示映射关系的配置文件,而配置文件名为..Hibernate Mapping..
Mapping即为映射的意思,所以在选择配置文件的类型时也不易搞错)

映射文件需与实体类在同一包中。
若Member.java在com.sllereak.hab.orm下,那么Member.hbm.xml也应该在此目录下。
下面详细介绍Member.hbm.xml配置

/..
<hibernate-mapping>
 <!--
       class标签用于指定与之映射的类,
       name代表类名 而table代表数据库中的表名,
                      类名和表名无需一样也可
 -->
 <class name="Member" table="MEMBER">
  <!--
        id标签指定了表中的主键与类中与主键相对应的字段名称及类型
                       name为字段名,type为字段类型(这里字段类型也为包装类型)
       -->
  <id name="memID" type="long">
   <!--
        column标签指定了在数据库中与ID标签中name所赋予的字段对应的列名,
        这里name为数据库的字段名称,length为数据的大小,not-null="true"
        当然就是指定了该字段不能为空咯,在数据库中与实体类中对应的字段
        名也无需一样。
    -->
   <column name="memID" length="8" not-null="true" />
   <!-- generator标签用于指定主键的生成策略 class="identity"是指定生成策略为自增-->
   <generator class="identity" /> 
  </id>
  <!-- property标签则用于指定在实体类中与数据库中对应的非主键字段 -->
  <property name="memName" type="string" >
   <column name="memName" length="20" not-null="true" />
  </property>
  <porperty>
   <!-- default属性指定了该字段的默认值 -->
   <column name="memAge" length="4" not-null="true" default="20"/>
  </property>
 </class>
</hibernate-mapping>
/..


3:创建HibernateSessionFactory
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {
//设置hibernate配置文件路径,不为final是因为方便修改
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
//创建用于存放Session的泛型线程对象,为当前线程的分支。
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
//创建Configuration对象
private static Configuration configuration = new Configuration();
//定义用于创建Session的工厂
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
//在静态块中用Configuration对象的configure(configFile)方法加载配置文件
//接着用Configuration的buildSessionFactory()方法获得org.hibernate.SessionFactory类的实体
static {
   try {
  configuration.configure(configFile);
  sessionFactory = configuration.buildSessionFactory();
 } catch (Exception e) {
  System.err.println("%%%% Error Creating SessionFactory %%%%");
  e.printStackTrace();
 }
}
private HibernateSessionFactory() {}
//用于获取Session对象的方法
public static Session getSession() throws HibernateException {
//通过ThreadLocal对象的get()方法 返回一个ThreadLocal对象,再强转为Session对象,Session诞生了
Session session = (Session) threadLocal.get();
 //当session为空或者session状态为非开启并且org.hibernate.SessionFactory
 //为null时调用rebuildSessionFactory()方法 再次创建org.hibernate.SessionFactory对象
 //并且如果org.hibernate.SessionFactory对象不为空则返回由org.hibernate.SessionFactory对象的openSession()
 //方法获取的Session否则返回空,最后将session添加到ThreadLocal对象中
 if (session == null || !session.isOpen()) {
  if (sessionFactory == null) {
   rebuildSessionFactory();
  }
  session = (sessionFactory != null) ? sessionFactory.openSession(): null;
  threadLocal.set(session);
 }
                return session;
}
//当org.hibernate.SessionFactory对象为null时调用 用于创建org.hibernate.SessionFactory对象
public static void rebuildSessionFactory() {
 try {
  configuration.configure(configFile);
  sessionFactory = configuration.buildSessionFactory();
 } catch (Exception e) {
  System.err.println("%%%% Error Creating SessionFactory %%%%");
  e.printStackTrace();
 }
}
//在此方法中,首先获得当前session然后将ThreadLocal对象中的session设置为null
//如果session还不等于null 则讲其关闭
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
       
        if (session != null) {
            session.close();
        }
    }
     //获取org.hibernate.SessionFactory对象
 public static org.hibernate.SessionFactory getSessionFactory() {
  return sessionFactory;
 }
 //设置读取的配置文件
 public static void setConfigFile(String configFile) {
  HibernateSessionFactory.configFile = configFile;
  sessionFactory = null;
 }
 //获取Configuration对象
 public static Configuration getConfiguration() {
  return configuration;
 }

}

 

 

1788445834680.apk 立即下载

相关推荐

运动员运动表现纵向数据集

纵向运动员运动表现数据集包含250名运动员10000条训练会话重复观测记录,涵盖篮球、排球、足球、跑步、游泳和无损伤跑步者六个运动类别。包括速度、加速度、反应时间、准确性、耐力、力量、敏捷性等表现变量,以及训练负荷、疲劳、恢复和训练成效指标。用于研究和实验分析。

hibernate3.3.2学习笔记(四)

hibernate.cfg.xml文件中有hbm2ddl.auto其中有四个属性分别有validate,update,create,create-drop。在sessionFactory建立的时候自动检查数据库表结构,或者将数据库schema的DDL导到数据库中,使用create-drop时,在显示关闭sessionFactory时,将drop掉数据库的schema,create顾名思义,就是没...

fpjason的专栏 170

MATLAB中读写Zarr文件的接口。Zarr是一种用于科学数据的文件格式(类似于HDF5和netCDF),在云存储和并行计算环境中进行了优化.rar

MATLAB中读写Zarr文件的接口。Zarr是一种用于科学数据的文件格式(类似于HDF5和netCDF),在云存储和并行计算环境中进行了优化.rar

Spring下使用Hibenrate annotation

随着Hibernate3.2ga的推出,hibernate-annotation-3.2ga和hibernate-entitymanager也随之推出。EntityManager还没有用过,但是Annotation却彻底解决了hbm文件和domain类同步的问题。hibernate-annotation的中文文档也很详细,感谢翻译者的辛勤劳动。 于是将正在进行的hibernate项目进行了升级,...

风之力——Essential Java 176

Hibenate的单向关联映射(注解版)

一:单向1-1关联 以老夫老妻为例子来说明一下,在中国以前是以丈夫主导地位,所以我这里以t_husband作为主表,t_wife作为从表 1.1:无连接表的 (1)首先创建实体类,然后使用注解表示出来两者的关联关系 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence....

qq_38777614的博客 296

(1)hibenrate入门例子

1 结构图 2 代码 User.java package com.learning; import java.util.Date; public class User { private int id; private String name; private Date birthday; public int getId() { return id; }

jianfpeng241241的专栏 528

Hibenrate实体关联中遇到的问题

1.org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.shoponline.merchant.entity.TblCategoryThird#29] 解决办法:实体关联后,缺失了数据的完整性,把原有数据删除,再添加新的数据。 2.Caused by: java.sql.SQL

学而不思 1613

Hibernate 框架入门

一、Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有关Hibernate的介绍: Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。Hi...

热心网友 5万+

Hibenrate一对多和多对多

[img]http://dl.iteye.com/upload/attachment/557535/f2345ac9-0e33-3d3d-8715-2eff1c892a80.jpg[/img]

hi_beijing的专栏 164

Hibernate 核心技术(一)

Hibernate简介Hibernate是一个开源的对象关系映射(ORM)框架。对JDBC进行了非常轻量级的对象封装。 将对象和数据库表建立映射关系,Hibernate框架使用在数据持久化层(dao)。 ORM:对象关系映射(英语:Object Relational Mapping)采用映射元数据(配置文件)来描述对象-关系的映射细节。ORM框架通过配置文件将实体对象和数据库表对应起来。 第一个Hi

春水上行的博客 2万+

hibernate 单向关联&双向关联

多对一: 就是A表中的一个字段是B表的主键。多个A表中的数据可以对应一个B表中的数据,同理,一个B表中的数据可以同时对应多个A表中的数据。   单向关联与双向关联对数据表的要求其实是一致的。满足对应的关联要求即可,也就是A表中的一个字段是B表中的主键。 单向关联与双向关联的需求是不一样的。单向关联,只需要可以通过主表找到控表即可。这个很简单,通过简单的sql语句,select B from...

qq_23835497的博客 646

NHibernate报错:No row with the given identifier exists

这个和Hibernate错误差不多,原因是你的数据库里面有脏数据,即:外键关联的对应主键内容不存在,就像报的这个错误,查询出的User没有了引用。 产生此问题的原因: 1.有两张表,table1和table2.产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-one unique="true">(特殊的多对一映射,实际就是一对一)来关联table 2.当hibernate查找的时候,table2里的数据没有与table1相匹配的,这样.

qq_41617901的博客 448

hibenate配置文件异常

1. Caused by: org.hibernate.InvalidMappingException:   unable to xml:  hbm.xml映射文件  这个肯定是配置文件的xml节点错误,或者配置文件的的属性没对应类的,或者没对应表的,等原因- -!

菜鸟新博 709

双立柱油脂加注机.rar

双立柱油脂加注机.rar

食品包装礼品包装设备.rar

食品包装礼品包装设备.rar

全自动iphone贴膜机3.rar

全自动iphone贴膜机3.rar

曲轴箱加工专机.rar

曲轴箱加工专机.rar

上一篇: WebService小结
下一篇: Hibernate_基于单实例配置及使用_初级小结_2_数据库访问
Mr_Feeling
博客等级 码龄18年 2粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值