• 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>循环出来

  • 相关阅读:
    iMac中的GoLand中报错: Unresolved reference 错误解决方法
    设置初次ssh登录linux的时候无需yes确认登陆
    docker命令常用总结
    阿里巴巴-菜鸟网络高级java开发工程师/技术专家招聘
    mysql8.0.22 设置sql_mode后不能启动解决
    《事实》读后感
    VPS是什么?
    做了一个小程序,欢迎关注
    [Linux] Tomcat java.lang.OutOfMemoryError: Java heap space
    [Linux] Nginx 反向代理配置 http headers 带下划线fields转发
  • 原文地址:https://www.cnblogs.com/ZSK991656110/p/4475499.html
Copyright © 2020-2023  润新知