关于 高分 !Java j2EE Web技术
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 高分 !Java j2EE Web技术相关的知识,希望对你有一定的参考价值。
小弟有以下问题不明白?在EJB或者Hibernate与关系数据库映射时,为什么它没有将实体Bean,或者Hibernate类对象属性与关系数据库字段一一显式地映射?它只将一个实体Bean与关系数据库建立关联,万一字段与属性对应不上?
问题来了,假设一个表有15个字段,如果不显式映射(就是每个字段与实体Bean,或者Hibernate类对象的每个属性在XML中显式地赋值一下),万一实体Bean类的属性与表字段对应错位了,我就不明白了,在XML中我并没有看到这样的配置,请问这是怎么回事?它是怎样做的?(最多我只看到了主键在XML中)??
也就是说假设有一个15字段的表,同时构造了一个实体Bean有十五个属性?为什么在配置文件中只看到表与实体类的配置?没有看到表的字段与实体类的属性的关联配置?这是系统自动的吗?假设有几个同类型的字段?系统又怎么只奥哪个字段映射哪个属性呢?我不明白?
1.利用Hibernate反转机制
利用这种方式生成的话一般如果你操作没问题是不会出现任务问题的。
2.在有.hbm文件的情况下
首先根据你的XML中的配置文件描述,也就是你说的XML中的主键配置先来匹配你的实体类(也就是你所说的Bean)和表中的数据表,在这里,你的XML配置文件中的表一定要是数据库中存在的数据表才行。
其次,再把你实体类中的各项属性值与数据库表中的各个字段一一显示的配置出对应映射关系来即可。
但是这中配置方式显然不是楼主所要问的那种方式。
3.使用Annotation注解的方式来代替.hbm配置文件完成实体类与数据库表中字段的映射
这种方式来映射两者关系的话,就会像楼主说的那样,只在XML文件中配置实体类与数据库表中的关系,其它的像实体类与数据库表中的字段映射方法会一一使用注解来完成,从而代替了在.hbm文件中的繁琐的属性配置。但是这里要说明的是,现实情况中如果使用注解的话,就会连实体类与数据库表的主键那一项也用注解来完成,不会出现像你说的那样,一半用这个,一半用那个的。当然不是说不可以,但是这种情况不多见。
楼主可以看看是否在你的项目中使用了注解来映射关系,你的问题就会找到答案了。
楼主明白了吧? 参考技术A 第1步先得给student类与数据库bianji表建立对应关系,在你的student类所在包下创建student.hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="你的包名.Student" table="bianji">
<id name="xuehao" column="xuehao">
<generator class="increment"/>
</id>
<property name="xingming" column="xingming"></property>
<property name="chengji" column="chengji"/>
<property name="xingbie" column="xingbie"/>
</class>
</hibernate-mapping>
我就不一一配了。有多少字段就得在这文件中配多少这样的property,这里的name表示你student类里的属性名,column表示你要对应的bianji表里的列名。
然后第2步打开hibernate.cfg.xml文件,将<mapping resource="entity/Account.hbm.xml" />这句话加在<session-factory>和</session-factory>之间。这样你的表和你的student类就关联起来了。
增删改查的话先写一个类来做吧:
public class HiberDAO
private SessionFactory sf=HibernateUtil.getSessionFactory();//得到会话工厂
public void save(Student student) //先写一个增student的方法
Session session=sf.openSession();//开启会话
Transaction ts=null;
try
ts=session.beginTransaction();//开始事务
session.save(student);
//这个save是保存传进来的student实例,因为bianji表和student关联起来了可以直接这样保存。
ts.commit();//提交事务
catch(Exception e)
if(ts!=null)
ts.rollback();//有异常则回滚
throw new HibernateException(e);
finally
session.close();//关闭会话
篇幅有限,删改查的方法你不会的话消息我吧。
还有,你的hibernate.cfg.xml文件里是配置和你mysql建立连接用的。不知道你这里配置了没。如果你这里没配置hibernate和你的mysql的连接那你就消息我吧。因为之前教你的这几步生效的前提是你的hibernate和你的数据库能建立起连接。。本回答被提问者采纳 参考技术B 我们都是用hibernate生成实体类,这样完全可以解决你说的对应问题;
置于显示映射,其实就连实体类的创建者都不确定该实体类,何时被引用,所以,hibernate无法提前给属性负值,因为对数据库的操作,是你自己的事;
还有,hibernate是可以而且必须给主键和其他字段添加配置的,否则,不会建立实体映射关系。
我觉得你说的,大部分应该是EJB的问题。我想,只要你的字段与属性同名,就不会出现混乱的问题,跟属性的类型,是没有关系的,因为名字只有一个。 参考技术C 没太看明白你问的什么
不管是strut,spring,hibernate,jsf,ejb标准也好,第三方支持也好
都是一些框架。
从另外的角度讲,他们也是容器.
最明显的一点是,你做这些东西的时候,没有说是你可以直接去new自己建的类的.
用的时候都是通过一个工厂方法来获取
底层呢,他们会使用Java的“反射机制”,(这是所有框架的基础)。
现在转到问题上来,你就算是写一个干净的类,如果你告诉他这个类是干嘛的,然后不用你说类里面有什么,容器可以通过反射机制探测到类里面的一切内容
根据你实体类的属性类型去对应一个数据库类型还不容易么
如果类型出错了,我相信你也遇到过报的错吧,
如果类型相近,你应该也看到过里面的一些类型转换机制。
希望你学习愉快O(∩_∩)O~ 参考技术D 用表的字段名和属性名匹配,只处理能够匹配的字段和属性。
Configure Java 运行不了,弄了两天了,高分求救!!
公司的 win7 系统 。那IT的人态度差,技术更烂。
你是jdk几啊,先把之前的jdk相关的环境变量清除,然后卸载jdk;重装最新的。 参考技术A 你把JDK卸载了再装一遍。以上是关于关于 高分 !Java j2EE Web技术的主要内容,如果未能解决你的问题,请参考以下文章