Hibernate注解式开发:

  (1)注解式开发的注意点:

    Hibernate中使用注解,主要是为了替代映射文件,完成“类到表,属性到字段”的映射。 
    JPA提供了一套功能强大的注解。Hibernate直接使用了JPA的这套注解。当然,对于JPA中的一些不足,Hibernate又开发了一些自己的注解。这些注解要么继承自JPA,要么是独立的注解,作为JPA的补充。 
    故,我们使用的注解,基本是javax.persistence.Transient包中的。 使用注解时需注意以下几点: 
      (1)使用的均为javax.persistence.Transient包中的注解

      (2)不再需要映射文件了

      (3)在Hibernate主配置文件中无需指定映射文件了,但需要指定注解的实体类。

  (2)示例一(基本注解):

 @Entity   //表明当前类为实体类
@Table(name="t_student") //可以省略
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY) //表明主键值由数据库自己来维护
private Integer id;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解,可以省略
@Column(name="tname")
private String name;
@Basic //表明当前属性将被持久化导数据库中,该注解为属性的默认注解
@Column(name="tage")
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;

   示例二(使用Hibernate内置主键生成策略):

 @Entity
public class Student {
@Id
@GeneratedValue(generator="xxx") //使用自己定义的主键生成器
@GenericGenerator(name="xxx", strategy="native") //生成一个主键生成器,目的是为了使用Hibernate自带的主键生成策略
private Integer id;
private String name;
private int age;
@Transient //表明当前属性将不写到数据库中
private double score;

   示例三(一对多双向关联,并且一方放弃关联关系维护权):

 @Entity
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //mappedBy="country" 表示一方放弃维护权,并将维护权交给了对方的关联属性country
@OneToMany(targetEntity=Minister.class, cascade=CascadeType.ALL, mappedBy="country") //targetEntity可以省略
//一旦一方放弃了维护权,则@JoinColumn注解将不能使用
//@JoinColumn(name="countryId")
private Set<Minister> ministers;
 @Entity
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(targetEntity=Country.class, cascade=CascadeType.ALL) //注意:这里只能使用ALL,因为注解是JPA的注解,如果不用ALL,就对Hibernate的代码不起作用
@JoinColumn(name="countryId")
private Country country; //关联属性

   示例四(自关联):

 @Entity
//新闻栏目
public class NewsLabel {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name; //栏目名称
private String content; //栏目内容 @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private NewsLabel parentNewsLabel; //父栏目 @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="pid")
private Set<NewsLabel> childNewsLabels; //子栏目

   示例五(多对多双向关联,代码更简单,无需指定中间表,因为底层实现了很多):

 @Entity
public class Course {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; //多对多双向关联的注解,要求有一方要放弃维护权。否则,将要生成两张中间表,当然只有一张中间表起作用
@ManyToMany(cascade=CascadeType.ALL, mappedBy="courses")
private Set<Student> students;
 @Entity
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer sid;
private String sname; @ManyToMany(cascade=CascadeType.ALL)
private Set<Course> courses;

   示例六(二级缓存,Query缓存不能使用注解):

 @Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Country {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer cid;
private String cname; @OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
private Set<Minister> ministers;
 @Entity
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
public class Minister {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer mid;
private String mname; @ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="countryId")
private Country country; //关联属性

Hibernate5笔记9--Hibernate注解式开发的更多相关文章

  1. SpringMVC笔记:annotation注解式开发

    一.配置式开发 在我们之前的学习中,springmvc使用配置式开发模式,需要在核心配置文件中springmvc.xml注册大量的bean来注入controller控制器,工作繁琐容易出错,下面我们学 ...

  2. 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

    原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...

  3. 总结切面编程AOP的注解式开发和XML式开发

    有段日子没有总结东西了,因为最近确实有点忙,一直在忙于hadoop集群的搭建,磕磕碰碰现在勉强算是能呼吸了,因为这都是在自己的PC上,资源确实有点紧张(搭建过程后期奉上),今天难得大家都有空(哈哈哈~ ...

  4. SpringMVC 注解式开发

    SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...

  5. Spring MVC注解式开发

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...

  6. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

  7. 《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)

    上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来.今天我们来学习注解开发的参数接收.处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用.具体 ...

  8. 《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

    上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...

  9. 3.2.3 SpringMVC注解式开发

    SpringMVC注解式开发 1. 搭建环境 (1) 后端控制器无需实现接口 , 添加相应注解 Controller类添加注解 @Controller //该注解表将当前类交给spring容器管理 @ ...

随机推荐

  1. UVA11624_Fire!

    在一个矩形方阵里面,一个人要从一个位置走向另一个位置,其中某些地方有火源,每过一分钟,火源就会点燃相邻的点,同时相邻的点也变成了火源.人不能通过有火的点.问一个人能够安全地走到目的地去?最短时间多少? ...

  2. 字符串(string)与整型(int)、浮点型(float)等之间的转换

    #include <stdlib.h> 1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下 ...

  3. iOS 字符串NSString 的一些常用方法

    一.字符串创建 1. NSString *str1 = [NSString new]; 2. NSString *str2 = @"字符串内容"; 二.字符串拼接 1. NSStr ...

  4. BZOJ3243 NOI2013向量内积(随机化)

    考虑奇技淫巧. 首先是k=2.对向量维护一个前缀和,每次将当前向量与前缀和点乘.如果点乘结果不等于i-1&1,说明当前向量至少和之前的某个向量的数量积是2的倍数,暴力找就可以了.当然等于i-1 ...

  5. c++11 标准库函数 std::move 和 完美转发 std::forward

    c++11 标准库函数 std::move 和 完美转发 std::forward #define _CRT_SECURE_NO_WARNINGS #include <iostream> ...

  6. oracle exp导出加上过滤条件

    exp username/password@dbname   file='d:\hehe.dmp' tables=(%) query="""where UPDATE_DT ...

  7. 【刷题】洛谷 P4234 最小差值生成树

    题目描述 给定一个标号为从 \(1\) 到 \(n\) 的.有 \(m\) 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式: 第一行两个数 \(n, m\) ,表示图的 ...

  8. Atcoder Yahoo Programming Contest 2019 简要题解

    A-C 直接放代码吧. A int n,k; int main() { n=read();k=read(); puts(k<=(n+1)/2?"YES":"NO&q ...

  9. bzoj : 4504: K个串 区间修改主席树

    4504: K个串 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 268  Solved: 110[Submit][Status][Discuss] ...

  10. 【agc019D】Shift and Flip

    Portal --> agc019D Description 给你一个\(A\)串一个\(B\)串(长度相等的两个\(01\)串),一次操作可以选择将\(A\)向左循环移动一位,将\(A\)向右 ...