这里所说的1对1 其实就是表和表的之间的关系! 其实1对1是1对多的特例,1对多是多对多的特例。
在hibernate里实现1对1 其实就把把表用对象来表示!让2个表产生一对一的关系!例如 一个人有一个身份
证。是先有人,后才有的身份证的!所以 可以看做人的身份号ID是自己的主键,省份证的ID是自己的主键。而证表的ID引用人表的ID来当自己的外键! 当我们想添加一个人的 时候!可以自动添加一个 身份出来!
现在具体来说明下!
步骤:
1 新建设一个j2ee的web project
2 添加hibernate包,user libraries不选 白色框里2个都选 单选框选下面一个。
2.1需要配置个数据连接 操作:new的下一步,复选框的沟去掉-》下一部门-》
2.2建立一个存放sessionFoctory工厂的包如 org.hibernate--》完成
3 这时候hibernate.cfg.xml产生 还产生了一个HibernateSessionFactory的session的工厂类
4 需要给hibernate.cfg.xml里写数据库的连接:下面以sql数据库的连接来讲解:
4.1 在hibernate.cfg.xml的设计器里点:new
4.2 .Profile name:随便写 只要不重复
4.3如果没有你需要的Driver 就自己新建一个 点超级连接configure那个
4.4在下拉框里选你要连的数据库。如过你选sql server
4.5在url里 填jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs
4.6倒入sqlserver连java的3个jar包 点add jars选择你要的jars包 点确定
4.7填 name和pwd下一部——>完成
至此数据库 hibernate.cfg.xml已经配置完毕。
5下面需要把数据表 转成 类
讲解
1切换到数据库的模式下,选到你要转成类的表!
2右键,倒数第2个选
3选择一个包。一般我们起的名字叫bean
4第一个复选框 是说是否产生这个类的hbm.xml文件
5第2个复选框就是问 需要产生一个抽象的 类不
6 我们选择一个包,把前2个复选的点上 就ok了下一部
7给我们的主键 选择适合的增长方式!一般选native如果是外键就是foreign--->完成
6--另外一个类 雷同 我就不讲了只是 增长方式 用foreign表示 表示根据别的表来设置自己
下面讲怎么把2个表的一对一关系 搞出来!
增长一个人的时候 就会增长一个证 ! 所以证 应该成为 人 类的一个属性,同时我们给他get,set 方法
而且证里 id是通过人里id在设置的,所以 证里 也应该 包含人 这个类的对象作为属性!用老师的话说
就是你中有我,我中有你!testTable类 相当与人 car类相当与证
alt+shift+s可以倒到属性的get 和set方法
7配置他们各自的***.hbm.xml文件
作为主表的 人类(textTable)中 应该加如下代码:(代码应写在<class></class>里)
<one-to-one name="car" class="org.bean.Car" cascade="all"></one-to-one>
解释一下:one-to-one表示现在2个表的关系是一对一 name里的car就是 textTable 里一个属性 的对象名
这个对象就是 我要关联那个表的类的对象名! cascade=''all" 表示现在这个表是主动表
作为从表的 证类(Car)中加入如下代码:
<one-to-one name="testTable" class="org.bean.TestTable"></one-to-one>
补充说明下:虽然这个类和 这个xml在一个文件夹里,但是并不表示一个包里,所以我们写class的值的时候要写全称的路径。
重点:因为 这个表是从表,他的id要跟随的主表的变化而变化 所以 因该在id里加 如:
<param name="property">testTable</param>
解释:name="property"表示引用的是属性 testTable表示引用的值 这个值就是另一个类 ,他现在作为一个属性放在了当前类里。这样:我们就把主表的主键和从表的主键关联起来了!并且从表的主键引用主表的主键当自己的外键。
8以上完成了 2个表的连接,关系操作!了 下面 我们就要进行一个插入操作 ,看我们插入一个人的时候,是否也能插入一个证!
9新建设servlet其中 注意他在web-xml中是如何配置的!到时候jsp里访问就容易了!
新建2个表的类的对象! 给其中不是相关的属性 通过set方法 给值。
如:Car car=new Car();
TestTable testTable=new TestTable();
testTable.setUsername("wudi");
testTable.setCar(car);
car.setTestTable(testTable);
car.setCarMoney(new Integer(123));
需要调用 主表的 dao类中的save方法 进行插入 同时把主表的对象 作为参数传过去
9建立一个存放Dao的包dao 和一个我们要在TestTable这个表上进行一系列操作的类 TestTableDao
public void save(TestTable table)
{
Session session=HibernateSessionFactory.getSession();
Transaction tx=session.beginTransaction();
session.save(table);
tx.commit();
}
说明 先产生hibernateSessionFactory工厂子类的对象!然后 用他产生事物的对象!
在用他调用save ()方法 其实这就是hql语言 就是insert方法!最后提交事物