对于现在使用注解的方式更流行起来,感觉使用这个挺不错的学习这些属性还是有帮助,我们理解很多东西。

我们可以先创建数据库之后再进行,利用MyEclipse进行反向操作,产生javaBean实体,可以是注解的,可以是xml的。自己喜欢,但是自己还是要看的懂
前面的文章讲解过了注解到底是怎么回事

  • 不想再JavaBean中不想持久的保存属性
    @Transient adj.短暂的;转瞬即逝的;临时的;这个很正常但是还是一般情况下用的比较少,稍微了解就行了
@Entity
@Table(name="news_inf")
public class News
{// 消息类的标识属性@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Integer id;// 消息标题// @Column指定该属性映射的列信息,此处指定了列名、长度@Column(name="news_title" , length=50)private String title;// 消息内容 不保存这个属性@Transientprivate String content;// id的setter和getter方法public void setId(Integer id){this.id = id;}public Integer getId(){return this.id;}// title的setter和getter方法public void setTitle(String title){this.title = title;}public String getTitle(){return this.title;}// content的setter和getter方法public void setContent(String content){this.content = content;}public String getContent(){return this.content;}
}
  • @Enumerated 列举,枚举
    我们保存的属性不是普通的java类型,而是个枚举,可以使用这个去修饰实体的属性
    除此之外我们的保存到数据库实体的时候,可能有两种情况,保存的是标号,或者为真正的字符串。我们定义枚举这个注解的时候,有个value的值,有两个属性 EnumType.String EnumType,ORDINAL 数字
    如下:
public enum Season
{春季,夏季,秋季,冬季
}
@Enumerated(EnumType.ORDINAL) 保存在数据库实体的时候就是个数字
@Column(name="season")
private Season happenSeason;
  • 保存图片我们怎么处理呢?方式!
    一种是将图片转化成二进制数据流存入数据库中。
    一种是保存图片的路径,然后前台读取路径去调用图片。
    第二种方法实现上比较简单,就是存储路径,然后根据路径读取对应的图片显示出来。
    第一种就比较麻烦,要先把图片转化成二进制数据,读取时就是从数据库读取对应数据再转化成图片显示出来。
    使用@Lob @ Basic修饰大型的数据的属性
    数据库的底层从通常使用Blob和Clob类型的数据列来保存数据,Hibernate也为了这种大型数据的值提供了支持,使用@Lob修饰这种大数据,当持久化数据为Byte[]类型的,底层为BLob
    当持久化数据为Char[]或者他的包装类时候,底层采用Clob列进行修饰
    对于使用这种大数据类型,数据库的花销比较的大,我们可以让属性延迟加载,等到真的需要使用这个属性的时候,我们在采取加载,在实体中增加@Basic:
    有两个属性,Fecth:指定是否延迟加载 FetchType.EAGER FetchType.LAYZE
    option:是否允许数据 为空

下面演示个@Lob保存图片的例子

@Lob
@Basic(fetch=FetchType.LAZY)
@Column(nullable=true)
private byte[] pic;保存数据流对象啊!是不是很简单!
Person person = new Person();
person.setName("JetWang");
File file = new File("logo.jpg");
byte[] content = new byte[(int)file.length()];
new FileInputStream(file).read(content);
person.setPic(content);
// 保存Person对象
sess.save(person);
  • 使用@Temporal adj.时间的;世俗的;暂存的;<语>表示时间的;
    对于java数据而言,时间类型就两种,Date,Calendar。但是对于数据库而言,表示时间的类型很多 date time datetime timestamp这样的背景下,我们如何映射就成了个问题啦。所有这个属性给了个value属性,到底映射为什么样子的属性呢?TemporalType.DATE….

  • 映射属性集合
    集合属性很常见,比如我们的考试成绩就是个map,每个科目对应一个成绩。
    不管使用哪种集合都统一使用@ElemntCollection 元素集合!翻译到位涩
    有属性,一个是Fetch.抓取策略,一个是targetClass。指定集合中元素的类型。可以不指定的,Hibernate会帮我们寻找。
    对于集合的属性,总需要保持到一个数据表中,所以保存数据表必须包含一个外键的列,用于参看主键的列.
    外键的列使用@JoinColumn 加入行,差不多外键的感觉,进行映射
    Hibernate使用标准的@CollecttionTable注解保存集合属性的表,好像啊,对不对。
    这里面有属性:name表示数据表的名称,JoinCloumns表示外键的可能是联合主键嘛。其他的用的少

Java的集合中,有序集合和无序集合

Set无序集合,没得索引的
List,Map有序的集合,需要索引值得,所以需要映射索引列的

  • @OrderColumn 是用来我们的list集合和数组
  • @MapkeyColumn 用于映射我们的Map索引,如果需要知道我们的Key的类型,可以使用@MapKeyClass
    @Id @Column(name="perosn_id")@GeneratedValue(strategy=GenerationType.IDENTITY)// 标识属性private Integer id;private String name;private int age;// 集合属性,保留该对象关联的学校@ElementCollection(targetClass=String.class)// 映射保存集合属性的表@CollectionTable(name="school_inf", // 指定表名为school_infjoinColumns=@JoinColumn(name="person_id" , nullable=false))//指明该表的外键到底是目前这个表的哪个,也可以使用不一样的名字,加一个referencedColumnName属性,指定依赖当前的哪个一个列名// 指定保存集合元素的列为 school_name,list中值保存的值@Column(name="school_name")// 映射集合元素索引的列@OrderColumn(name="list_order")private List<String> schools= new ArrayList<>();这个集合表中就会有三个属性
person_id  list_order school_name
集合的索引不能重复,所以前面两个都是主键来着。
乐观和悲观的外键。我记得我问过数据库的老师,外键的乐观和悲观之说,我们认为他们是外键就行了,也没必要直接的写成外键

其他的数组,set都差不多,我就跟着书上贴个代码吧

    @Id @Column(name="person_id")@GeneratedValue(strategy=GenerationType.IDENTITY)// 标识属性private Integer id;private String name;private int age;// 集合属性,保留该对象关联的学校@ElementCollection(targetClass=String.class)// 映射保存集合属性的表@CollectionTable(name="school_inf", // 指定表名为school_infjoinColumns=@JoinColumn(name="person_id" , nullable=false))// 指定保存集合元素的列为 school_name@Column(name="school_name")// 映射集合元素索引的列@OrderColumn(name="array_order")private String[] schools;

Map比较特殊一点

    @ElementCollection(targetClass=Float.class)// 映射保存集合属性的表@CollectionTable(name="score_inf", // 指定表名为score_infjoinColumns=@JoinColumn(name="person_id" , nullable=false))@MapKeyColumn(name="subject_name")// 指定Map key的类型为String类型@MapKeyClass(String.class)// 映射保存Map value的数据列@Column(name="mark")private Map<String , Float> scores= new HashMap<>();

码农小汪-Hibernate学习6-hibernate中Annocation修饰属性相关推荐

  1. 码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable...

    近期我也是有点郁闷,究竟是程序中处理关联关系.还是直接使用外键处理关联关系呢?这个的说法不一致!程序中处理这样的关联关系的话.自己去维护这样的约束.这样的非常乐观的一种做法!或者是直接在数据库中处理这 ...

  2. 码农小汪-设计模式之-Builder模式

    建造者模式 将一个复杂的对象的构建与它的表示分离,使得同样构建的过程中可以创建不同的表示.这个话语看起来,好累啊!真心很难理解. 下面是它的UML图: 抽象建造者角色(Builder):为创建一个Pr ...

  3. 码农小汪-Volatile和Transient

    Volatile: Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总是看 ...

  4. 码农小汪-设计模式之-命令模式

    大话设计模式的例子讲的非常的好,理解起来也方便!有时候忘了.想到这些特殊的例子感觉就是特别爽. 烤羊肉串带来的思考! 路边摊羊肉串: 老板,我这里排的比较先啊,我最先给钱.老板这个没有熟啊.我的是 辣 ...

  5. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  6. Hibernate学习5—Hibernate操作对象

    第一节:Hibernate 中四种对象状态 删除状态:处于删除状态的Java 对象被称为删除对象.比如说session delete一个对象,这个对象就不处于session缓存中了, 已经从sessi ...

  7. Hibernate学习之hibernate状态

    hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),瞬时状态就是刚new出来一个对象,还没有被保存到数据库中,持久化状态就 ...

  8. Hibernate学习之hibernate.cfg.xml

    <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hib ...

  9. hibernate学习五 Hibernate补充

    1  MiddleGenIDE可以生成映射类和映射文件. 2 转载于:https://www.cnblogs.com/liufei1983/p/8635468.html

  10. 码农在使用人脸识别开发套件中的硬件主板如何调用底层接口步骤

    DLT-RK3288C人脸识别开发套件 是由深圳市宁远电子科技有限公司 自主研发推出,基于行业最小最薄的DLT-RK3288C 高性能人脸识别专用主板,融合百度AI 精准的离线人脸识别技术,集算法与软 ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状、颜色)实战
  2. mysql死锁检测算法_MySQL 8 死锁检测脚本
  3. cmd 查看本地ip_西门子WinCCV7.4使用普通网卡通过TCP/IP连接PLC步骤
  4. stocker模块量化交易分析
  5. 牛客练习赛44 A 小y的序列 (模拟,细节)
  6. WPF开源项目:WPF-ControlBase
  7. 机器人与目标匹配问题及解决 虚拟动力学 纳什平衡 Q-Learning
  8. 执​行​o​r​a​c​l​e​函​数​的​四​种​方​法
  9. FPGA状态机一段式
  10. Kossel 升级记 - 速度、速度还是速度
  11. 图片轮播器(swift)
  12. 阿里架构师手写Tomcat——Session源码解析
  13. python画棒棒糖程序_python之turtle简单绘制学习
  14. 【javascript】手写一个webpack plugin
  15. 利用DELL的OMSA监控服务器的温度
  16. 一个C#控制台小游戏(源码解析)
  17. supergo任我行纵行指南针TT硕点YY考勤打卡定位下载及安装教程
  18. 高中生计算机会考word题,高中信息技术会考操作题解析
  19. STM32 光敏电阻传感器两路AD采集
  20. 信息学奥赛一本通1142:单词的长度

热门文章

  1. w ndows7旗舰版网卡驱动,Win7网卡驱动64位离线安装包 免费版
  2. 打印机加粉出现的问题:打印机m7206清零
  3. 计算机辅助设计课程设计评分标准,CAD考试规则评分标准.doc
  4. matlab二阶系统设置参数,一阶和二阶系统响应的matlab制作
  5. MQTT测试工具MQTT.FX
  6. 方志朋-2018年文章汇总
  7. vs code 代码格式化整理
  8. 手动解析App dSYM示例
  9. qrc路径_c – 在Qt中获取qrc文件的路径
  10. MATLAB信号与系统实验(一)