[Java web]-- hibernate3(4)

1.【*:*】 关联关系映射
   *搭建关联关系
create table t_student35(
 id  number(5) primary key,
 name  varchar2(20),
 age number(3)
);
create table t_course35(
id number(5) primary key,
name varchar2(20),
ctime number(1)
);
#关系表:描述t_student35 和 t_course35的关系
create table relation_s_c(
course_id number(5) references t_course35(id),
student_id number(5) references t_student35(id),
primary key(course_id,student_id)
);
   *映射关联关系
<!-- Student -->
<class name="Student" table="t_student35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一 
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age" type="java.lang.Integer"></property>
<!-- 关系属性:courses 
1.关系属性名
2.关系对方
3.关系中的外键
4.级联
* table="relation_s_c"  关系表
*column="course_id" 对方的外键
-->
<set name="courses" cascade="save-update" table="relation_s_c">
<!-- 指向自己的外键 -->
<key column="student_id"></key>
<!-- 关系对方及对方的外键 -->
<many-to-many class="Course" column="course_id"></many-to-many>
</set>
</class>
<!-- Course -->
<class name="Course" table="t_course35">
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一 
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="ctime" type="java.lang.Integer"></property>
<!-- 关系属性:students
1.关系属性名
2.关系对方
3.关系中的外键
4.级联
* table="relation_s_c"  关系表
*column="" 对方的外键
*inverse="true" 设置当前方不参与维护外键
-->
<set name="students" cascade="save-update" table="relation_s_c" inverse="true">
<!-- 指向自己的外键 -->
<key column="course_id"></key>
<!-- 关系对方及对方的外键 -->
<many-to-many class="Student" column="student_id"></many-to-many>
</set>
</class>
   *使用
   
=============================================================================================
2.ID维护策略:
  2.1 increment 递增
      *仅适用于学习测试阶段
 *无法适应并发环境
<id name="id" column="id" type="java.lang.Integer">
<generator class="increment"></generator>
</id>
  2.2 sequence 序列  oracle  db2
        <id name="id" column="id" type="java.lang.Integer">
<generator class="sequence">
<param name="sequence">序列名</param>
</generator>
</id>
  2.3 identity  mysql  sqlsever
<id name="id" column="id" type="java.lang.Integer">
<generator class="identity"></generator>
</id>
  2.4 uuid :生成一个32位长度的16进制字符的字符串
           :此字符串是全球唯一
  :适用于分布式开发环境中
<id name="id" column="id" type="java.lang.Integer">
<generator class="uuid"></generator>
</id>
  2.5 assigned :手动指定ID
<id name="id" column="id" type="java.lang.Integer">
<generator class="assigned"></generator>
</id>
  2.6 foreign:主键来源是外键
        <id name="id" column="id" type="java.lang.Integer">
<generator class="foreign">
<param name="property">xxx</param>
</generator>
</id>
=============================================================================================
3.HQL 映射查询:select u.id,u.name,u.age from User u
  *from User;  select * from t_user;
   :查询所有字段
  *select u.id,u.name,u.age from User u; <==> selct id,name,age from t_user;
  *映射查询的返回值规格:
*映射查询查询多个字段:
String hql="select c.id,c.brand from Computer c where c.id>0";
      t_computer35
 id   brand    price 
 1    lenovo    20   ---> Object[]{1,"lenovo"}
 2    lenovo    20   ---> Object[]{2,"lenovo"}
 3    lenovo    20   ---> Object[]{3,"lenovo"}
 4    lenovo    20   ---> Object[]{4,"lenovo"}
                     ---> List<Object[]>
      
     *映射查询只查询1个字段:
String hql="select c.id from Computer c where c.id>0";
      t_computer35
 id   brand    price 
 1    lenovo    20   ---> Integer  1
 2    lenovo    20   ---> Integer  2
 3    lenovo    20   ---> Integer  3
 4    lenovo    20   ---> Integer  4
                     ---> List<Integer>
String hql="select c.brand from Computer c where c.id>0";
      t_computer35
 id   brand    price 
 1    lenovo1    20   ---> String  lenovo1
 2    lenovo2    20   ---> String  lenovo2
 3    lenovo3    20   ---> String  lenovo3
 4    lenovo4    20   ---> String  lenovo4
                     ---> List<String>
  *分组:group by  having
    select c.brand,max(c.price),min(c.price),avg(c.price) from Computer c group by c.brand;
select c.brand,max(c.price) from Computer c where c.id>? group by c.brand having min(c.price)>34
=============================================================================================
4.子查询:
   select * from (select * from t_user);
   select * from t_user where id>(select id from t_user2 where name='xx');
   在hibernate中子查询仅用在where中:
    from Computer c where c.id=(select c.id from Computer where c.name='xx');
=============================================================================================
   










 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事随风ing

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值