任務分兩天完成:(一人對多本書)
第一天:
hbm:這種配置方法是以前用到的配置方法,比較熟悉。
問題---mysql的序列生成的各種方法還待明天查
Annotation:第一次用到注釋去寫hibernate的映射,做了一下午
由于jar包不齊,弄了很久
--->核心jar包:ejb3-persistence.jar
hibernate-annotations.jar
hibernate-commons-annotations.jar
hibernate.cfg.xml:
加載映射時不是加載映射文件而是映射到實體類
<mapping class="com.yeepay.entity.Person"/>
工具類得到SessionFactory:
seesionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
標簽:1).寫在類定義上
@Entity //表明是實體類
@Table(name="person_db") //映射到的表名
2).主鍵修飾
@Id @GeneratedValue(strategy = GenerationType.AUTO)-----表中 auto_increment
@Column(name = "id") // 數據庫id
表示是主鍵,并且對應增長形勢,對應表列
1) IDENTITY:表自增鍵字段,Oracle不支持這種方式;
2) AUTO: JPA自動選擇合適的策略,是默認選項; ===auto_increment
3) SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator注解指定序列名,MySql不支持這種方式;
4) TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易于數據庫移植
3).普通屬性
@Column(name = "name") // 名字
直接在某一屬性上寫,表示此屬性對應表的列
4).關系屬性
@OneToMany(cascade = CascadeType.ALL, mappedBy = "person", fetch = FetchType.EAGER)
mappedBy="school"就相當于inverse=true,(mappedBy指定的是不需要維護關系的一端)
關系屬性上,表示是OneToMany
cascade級聯關系 mappedBy對應類中的自己的應用屬性名 fetch懶加載(eager lazy)
@ManyToOne (optional=true, fetch = FetchType.EAGER)
@JoinColumn(name="person_id", nullable=true, insertable = false, updatable = false)
關系屬性上,表示是ManyToOne
name表示對應表內字段
注:必須是所謂的雙向關系,不然報 沒有序列化異常
第二天:
1.mysql的序列生成
auto_increment 自動增長
uuid()函數 適用于并發,但是效率不高,且占磁盤。(UUID的內容是字符串的)
2.@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid") -----表中id沒有主鍵生成
3.特殊@Formula("select COUNT(*) from school_info")
private int count;
第一天:
Annotation:第一次用到注釋去寫hibernate的映射,做了一下午
@Table(name="person_db")
2).主鍵修飾
@Id @GeneratedValue(strategy = GenerationType.AUTO)-----表中
1) IDENTITY:表自增鍵字段,Oracle不支持這種方式;
2) AUTO: JPA自動選擇合適的策略,是默認選項; ===auto_increment
3) SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator注解指定序列名,MySql不支持這種方式;
4) TABLE:通過表產生主鍵,框架借由表模擬序列產生主鍵,使用該策略可以使應用更易于數據庫移植
@JoinColumn(name="person_id", nullable=true, insertable = false, updatable = false)
關系屬性上,表示是ManyToOne
name表示對應表內字段
注:必須是所謂的雙向關系,不然報 沒有序列化異常
第二天: