MyEclipse从数据库逆向生成Hibernate实体类

   计应134 郑寿奎

这个分为二个操作:数据库操作和MyEclipse操作

关系映射有:单双向1-n、n-1、n-n。

映射关系多由数据库里的表关系决定

当然也可以只对一个表进行操作

单双向1-n、n-1由二个表

单双向n-n由三个表,其中第三个表连接另外二个表

以下是创建n-n    MyEclipse从数据库逆向生成Hibernate实体类:

数据库操作:

     创建表:Person_inf

address_inf

person_address

其中的关系是:person_address创建外键

需要注意的是person_inf和address_inf这二个表的主键都要标识为自增

MyEclipse操作:

1.新建一个 Web Project项目

2.新建一个DB数据库连接:

Window->Show View->Other->搜索DB

右击空白处 New新建一个DB数据库连接:

Finish完成

3.右击项目名->MyEclipse->add Hibernate Capab.......

Next

Next

next

Finish完成

4.自动生成实体类:

Open打开DB数据库连接

找到数据库名字点开->找到dbo点开->找到TABLE点开->选择表右击->Hibernate Reverse Engineering..

单击Browse

勾选

Next下一步

Next下一步

分别单击Person_inf和address_inf二个表把Id Generator:里的值选择为:native


单击Finish完成

生成如下:

5.修改部分代码

(1).在hibernate.cfg.xml里的Mappings   Add添加上AddressInf.hbm.xml和PersonInf.hbm.xml

(2).分别在AddressInf.hbm.xml和PersonInf.hbm.xml二个配置里的set标签里添加 cascade="all"级联

(3).把PersonInf.java里的代码:

save()方法里的代码

改为:

 1     public void save(PersonInf transientInstance) {
 2         log.debug("saving PersonInf instance");
 3         try {
 4             Transaction t=getSession().beginTransaction();
 5             getSession().save(transientInstance);
 6             t.commit();
 7             log.debug("save successful");
 8         } catch (RuntimeException re) {
 9             log.error("save failed", re);
10             throw re;
11         }
12     }

然后就可以再index.jsp调用使用了。

6.index.jsp调用使用

单击->单击Add  添加Tomcat服务器

OK

运行Tomcat服务器->运行项目 

最后得到:

需要注意:

1.多对多的时候<set>标签里要添加cascade="all"属性

2.在DAO操作类里SAVE方法添加事务:Transaction t=getSession().beginTransaction();

getSession().save(transientInstance);
t.commit();

3.自己编写的查询、删除、修改方法都要加上事务。

4.修改的方法:

public void gengxing(Students a){

Transaction t=getSession().beginTransaction();
getSession().update(a);
t.commit();
}


这里传过来的参数是一个Students类。

所以在传过来之前:

Public Students a;实体类引用过来。

StudentsDAO bb= new StudentsDAO();//操作类引用过来

a=bb.findById(xuehao);//根据ID把所有的信息查询出来

a.setStuName(mingzi);//需要改的信息写入
a.setAge(nianling);//需要改的信息写入

bb.gengxing(a);//直接更改

5.插入:

提交过来的数据:

Classes a=new Classes();//引实体类
a.setClsId(bjh);//写入主键的ID
Students stu = new Students();//引用实体类
stu.setStuId(bh);//写入数据
stu.setStuName(xm);//写入数据
stu.setAge(nl);//写入数据
stu.setClasses(a);//写入数据
StudentsDAO sdao=new StudentsDAO();
sdao.save(stu);//写入数据

6.删除:

public void shanchu(Students a){
Transaction t=getSession().beginTransaction();
getSession().delete(a);
t.commit();
}

这里传过来的参数也是 Students这个类,

public Students a;//定义

StudentsDAO aa=new StudentsDAO();//调用操作类

a= aa.findById(id);//根据ID查出需要删除的数据   a的类型是Studeng   findById这个方法是自带的根据ID查询方法
aa.shanchu(a);//
调用方法

7.查询:

public List findByClsName(String clsName)
{

Transaction t=getSession().beginTransaction();
String hql="from Students s where s.classes.clsName=?";
Query query=getSession().createQuery(hql);
query.setString(0, clsName);

t.commit();

return query.list();}

这里返回的是一个List集合

所以在接收的时候

定义一个:

public List<Students> a;

StudentsDAO stu=new StudentsDAO();//调用操作类
mz=new String(mz.getBytes("ISO-8859-1"),"UTF-8");//如果是汉字就要进行转换
a=stu.findByClsName(mz);//调用方法

这样查询出来的结果

<s:iterator value="a">

.

.

</s:iterator>循环出来

原文地址:https://www.cnblogs.com/ZSK991656110/p/4475499.html