加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Hibernate学习笔记2

发布时间:2020-12-14 06:33:00 所属栏目:Java 来源:网络整理
导读:Hibernate映射 一对多 ?多对一 ?一对一 ?多对多 一对多映射 set元素的常用属性 div class="cnblogs_code" onclick="cnblogs_code_show('e5fe68f0-0429-49e1-ba01-eb15b46a1b6e')" img id="code_img_closed_e5fe68f0-0429-49e1-ba01-eb15b46a1b6e" class="cod

Hibernate映射

一对多 ?多对一 ?一对一 ?多对多

一对多映射

set元素的常用属性

<div class="cnblogs_code" onclick="cnblogs_code_show('e5fe68f0-0429-49e1-ba01-eb15b46a1b6e')">
<img id="code_img_closed_e5fe68f0-0429-49e1-ba01-eb15b46a1b6e" class="code_img_closed" src="https://www.52php.cn/res/2019/02-05/22/1c53668bcee393edac0d7b3b3daff1ae.gif" alt=""><img id="code_img_opened_e5fe68f0-0429-49e1-ba01-eb15b46a1b6e" class="code_img_opened" style="display: none;" onclick="cnblogs_code_hide('e5fe68f0-0429-49e1-ba01-eb15b46a1b6e',event)" src="https://www.52php.cn/res/2019/02-05/22/405b18b4b6584ae338e0f6ecaf736533.gif" alt=""><div id="cnblogs_code_open_e5fe68f0-0429-49e1-ba01-eb15b46a1b6e" class="cnblogs_code_hide">

<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.Session;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.SessionFactory;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.boot.registry.StandardServiceRegistry;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.boot.registry.StandardServiceRegistryBuilder;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.cfg.Configuration;

<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> HibernateUtil {
<span style="color: #0000ff;">private <span style="color: #0000ff;">static<span style="color: #000000;"> SessionFactory sessionFactory;
<span style="color: #0000ff;">private <span style="color: #0000ff;">static<span style="color: #000000;"> Session session;

</span><span style="color: #0000ff;"&gt;static</span><span style="color: #000000;"&gt; {
    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 创建Configuration对象  读取hibernate.cfg.cml文件。完成初始化</span>
    Configuration config = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; Configuration().configure();
    StandardServiceRegistryBuilder ssrb </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; StandardServiceRegistryBuilder().
            applySettings(config.getProperties());
    StandardServiceRegistry ssr </span>=<span style="color: #000000;"&gt; ssrb.build();
    sessionFactory </span>=<span style="color: #000000;"&gt; config.buildSessionFactory(ssr);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 获取SessionFactory对象</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span><span style="color: #000000;"&gt; SessionFactory getSessionFactory() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; sessionFactory;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 获取Session</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span><span style="color: #000000;"&gt; Session getSession() {
    session </span>=<span style="color: #000000;"&gt; sessionFactory.openSession();
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; session;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; 关闭Session</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; closeSession(Session session) {
    </span><span style="color: #0000ff;"&gt;if</span> (session != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) {
        session.close();
    }
}

}

单向一对多:

班级(Grade)——>学生(Student)

班级类中有属性 set

在班级中配置

<span style="color: #0000ff;">import<span style="color: #000000;"> java.util.Set;

<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.Session;
<span style="color: #0000ff;">import<span style="color: #000000;"> org.hibernate.Transaction;

<span style="color: #0000ff;">import<span style="color: #000000;"> com.imooc.util.HibernateUtil;

<span style="color: #008000;">/**<span style="color: #008000;">

  • 单向的一对多关系

  • <span style="color: #808080;">@author<span style="color: #008000;"> Administrator

  • <span style="color: #008000;">*/
    <span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> Test {
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
    <span style="color: #008000;">//<span style="color: #008000;">add();
    <span style="color: #008000;">//<span style="color: #008000;">findStudentByGrade();
    <span style="color: #008000;">//<span style="color: #008000;">update();
    <span style="color: #000000;"> delete();
    }
    <span style="color: #008000;">//<span style="color: #008000;"> 将学生添加到班级
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> add() {
    Grade g = <span style="color: #0000ff;">new Grade("一班","Java软件开发一班"<span style="color: #000000;">);
    Student s1 = <span style="color: #0000ff;">new Student("张三","男"<span style="color: #000000;">);
    Student s2 = <span style="color: #0000ff;">new Student("李四","女"<span style="color: #000000;">);

     g.getStudents().add(s1);
     g.getStudents().add(s2);
    
     Session session </span>=<span style="color: #000000;"&gt; HibernateUtil.getSession();
     Transaction tx </span>=<span style="color: #000000;"&gt; session.beginTransaction();
     session.save(g);
     session.save(s1);
     session.save(s2);
     tx.commit();
     HibernateUtil.closeSession(session);

    }

    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> findStudentByGrade() {
    Session session =<span style="color: #000000;"> HibernateUtil.getSession();
    Grade grade = (Grade) session.get(Grade.<span style="color: #0000ff;">class,1<span style="color: #000000;">);
    Set students =<span style="color: #000000;"> grade.getStudents();
    <span style="color: #0000ff;">for<span style="color: #000000;"> (Student s: students) {
    System.out.println(s);
    }
    }
    <span style="color: #008000;">//<span style="color: #008000;"> 修改学生信息
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> update() {
    Session session =<span style="color: #000000;"> HibernateUtil.getSession();
    Transaction tx =<span style="color: #000000;"> session.beginTransaction();
    Grade g = <span style="color: #0000ff;">new Grade("二班","Java软件开发二班"<span style="color: #000000;">);
    Student student = (Student) session.get(Student.<span style="color: #0000ff;">class,1<span style="color: #000000;">);
    g.getStudents().add(student);
    session.save(g);
    tx.commit();
    HibernateUtil.closeSession(session);
    }
    <span style="color: #008000;">//<span style="color: #008000;"> 删除学生信息
    <span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> delete() {
    Session session =<span style="color: #000000;"> HibernateUtil.getSession();
    Transaction tx =<span style="color: #000000;"> session.beginTransaction();
    Student student = (Student) session.get(Student.<span style="color: #0000ff;">class,2<span style="color: #000000;">);
    session.delete(student);
    tx.commit();
    HibernateUtil.closeSession(session);
    }

}

单向多对一关联:

1、多对一的关系和关系数据库中的外键参照关系最匹配,即在己方(多方)的表中的一个外键参照另一个表的主键;

2、通过在多方持有一方的引用实现,需要在“多”的一端使用配置

= Grade("一班","Java软件开发一班"= Student("张三","男"= Student("李四","女"s1.setGrade(g); s2.setGrade(g); Session session </span>=<span style="color: #000000;"&gt; HibernateUtil.getSession(); Transaction tx </span>=<span style="color: #000000;"&gt; session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); tx.commit(); HibernateUtil.closeSession(session);

}

对于inverse属性的说明:

1、一方的hbm.xml文件的节点的inverse属性指定了关联关系的控制方向,默认由one方来维护;

2、关联关系中,inverse="false"则为主动方,由主动方负责维护关联关系;

3、在一对多关联中,设置one方的inverse为true,这将有助于性能的改善。

?cascade属性

《》

HQL (Hibernate Query Lanaguage) Hibernate查询语言

HQL是面向对象的查询语言

HQL语句形式:select...from...where...group by...having...order by...

HQL 对Java类的属性大小写敏感,对关键字大小写不敏感

1.from查询一个对象的所有字段(Seller是一个实体类)

String hql = "from Seller"= sellers =

2.查询指定多个字段,返回的是Object[]

String hql = "select id,name from Seller"= result ="id:" + objs[0] + ",name:" + objs[1

3.只查询一个字段,返回的是Object

String hql = "select name from Seller"= result ="name:" +

4.查询时可以使用别名,这样查询多个表的时候,可以防止属性名冲突,这里s作为Seller的别名

String hql = "select s.name from Seller s"= result ="name:" +

5.list返回查询结果 通过new list()

String hql = "select new list(id,name) from Seller"= result ="id:" + list.get(0) + ",name:" + list.get(1

6.以map形式返回查询结果

String hql = "select new map(id,name) from Seller"= maps ="id:" + map.get("0") + ",name:" + map.get("1"

通过属性的别名获取,注意,如果使用别名就不可以使用下标获取了

String hql = "select new map(id as id_,name as name_) from Seller"= maps ="id:" + map.get("id_") + ",name:" + map.get("name_"

7.以自定义类型返回查询结果

String hql = "select new Seller(id,name) from Seller"= result ="id:" + seller.getId() + ",name:" +
Seller Long id; String name; String tel; ...
<span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Seller(){

}
</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Seller(Long id,String name) {
    </span><span style="color: #0000ff;"&gt;this</span>.id =<span style="color: #000000;"&gt; id;
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
}

...  </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; getter &amp; setter</span>

}

8.返回不重复的查询结果 通过distinct关键字

String hql = "select distinct sex from Customer";

条件查询

9.通过比较运算符 =,<,>,<=,>=,<>

??

10.判断是否为null

is null 或者 =null 判断为空

is not null 或者 <>null 判断不为空

??

11.范围查询

in(a,b,...) 查询值为括号中的某个值的元素 ()中可以是子查询

between a and b 查询值在[a,b]之间的元素

String hql = "from Customer where age in (20,40)"= "from Customer where age not in (20,40)"= "from Customer where age between 30 and 40"= "from Customer where age not between 30 and 40";

12.字符串模式匹配

通过like 关键字

通配符:% 匹配任意个字符,_ 匹配一个字符

例:查询名字两个字且姓李的人

String hql = "from Customer where name like '李_' ";

13.逻辑运算 and or

同sql……

14.集合运算

is [not] empty,集合【不】为空,不包含任何元素;对应SQL的exists运算

member of 元素属于集合 ;对应SQL的in运算。

15.四则运算

可以做select子句或者where子句中使用

例:? 3000?

16.单个查询

??如果返回多个查询结果则报错

17.order by子句

对查询结果进行排序

select ... from ... where ... order by ... asc(desc) 默认asc

按多个属性排序,用逗号隔开

总结:和sql好像哦~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读