Hibernate注解开发、注解创建索引
Hibernate注解开发、注解创建索引1.注解的⽬的
  简化繁琐的ORM映射⽂件(*.hbm)的配置
2.JPA和hibernate的关系
  JPA:java persistence API,JPA注解是JavaEE的标准和规范。
  两者的关系可以简单理解为JPA是接⼝,Hibernate是实现,但是其功能是JPA的超集。
Hibernate如何实现与JPA的关系?
  通过hibernate-core,hibernate-entitymanager,hibernate-annotation三个组件实现。
程序开发中⼀般使⽤JPA注解,便于程序的扩展和移植。
3.Hibernate注解分类:
  类级别注解
    @Entity  表⽰实体类,对应DB中⼀张表
    @Table    表⽰DB中的表
    @Embeddable    嵌⼊类
  属性级别注解
  映射关系注解
4.Hibernate注解的使⽤
1.导包与准备⼯具类:
pom包依赖:
<dependencies>
<!-- slf4j 依赖包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>红颜乱之风雨三国
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-rc1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.7.Final</version>
</dependency>
<dependency>
5月1日怎么放假<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
</dependencies>
⼯具类:
package cn.qlq.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.istry.StandardServiceRegistryBuilder;
import org.hibernate.service.ServiceRegistry;
public class HibernateUtil {
private static SessionFactory sessionFactory;
// 创建⼀个对象,⼀个web项⽬只有⼀个SessionFactory
static {
// 3.3以及之前的版本构建会话⼯⼚对象
// SessionFactory sessionFactory = new
// Configuration().configure().buildSessionFactory();
// 5.0之后获取SessionFactory
// 创建服务注册对象
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
// 创建会话⼯⼚对象
sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();    }
// 获得session => 获得全新session
public static Session openSession() {
return sessionFactory.openSession();
}
// 获得session => 获得与线程绑定的session
public static Session getCurrentSession() {
CurrentSession();
}
}
5.类注解的使⽤
5.1@Entity注解的使⽤---属于javax包
  @Entity:映射实体类、
  @Entity(name = "tableName")
  name是可选属性,指定数据库的表名,如果不写的话默认与实体类名相同。
注意:使⽤@Entity必须指定实体的主键属性(可以在get⽅法上设置,也可以直接在属性设置)package cn.qlq.domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name = "t_student") // 注意包名是javax
public class Student {
//    @Id
private Integer id;
private String name;
private Integer age;
private Date birthDay;
private Character sex;
private String address;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
l配置注解实体类:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="tion.driver_class"&sql.jdbc.Driver</property>
<property name="tion.url">jdbc:mysql:///hibernate</property>
<property name="tion.username">sa</property>
<property name="tion.password">123456</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 使⽤⼆级缓存 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!--设置缓存的类型,设置缓存的提供商 -->
<property name="ion.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</property> <!-- #hibernate.show_sql true
#hibernate.format_sql true
-->
<!-- 将hibernate⽣成的sql语句打印到控制台 -->
<property name="hibernate.show_sql">true</property>
<!-- 将hibernate⽣成的sql语句格式化(语法缩进) -->
<property name="hibernate.format_sql">true</property>
<!--
## auto schema export  ⾃动导出表结构. ⾃动建表
#hibernate.hbm2ddl.auto create        ⾃动建表.每次框架运⾏都会创建新的表.以前表将会被覆盖,表数据会丢失.(开发环境中测试使⽤)        #hibernate.hbm2ddl.auto create-drop ⾃动建表.每次框架运⾏结束都会将所有表删除.(开发环境中测试使⽤)
#hibernate.hbm2ddl.auto update(推荐使⽤) ⾃动⽣成表.如果已经存在不会再⽣成.如果表有变动.⾃动更新表(不会删除任何数据).
#hibernate.hbm2ddl.auto validate    校验.不⾃动⽣成表.每次启动会校验数据库中表是否正确.校验失败.
-->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- 引⼊orm注解类        -->
<mapping class="cn.qlq.domain.Student"/>
</session-factory>
</hibernate-configuration>
车启动手刹是放下还是抬起来测试:
package st;
import org.junit.Test;
import cn.qlq.util.HibernateUtil;
public class TestEntityAnno {
@Test
public void test1() {
HibernateUtil.openSession();
}
}
⽇志:
Hibernate:
drop table if exists t_student
2018-08-2723:12:02[net.sf.ehcache.util.UpdateChecker]-[DEBUG] Checking Hibernate:
create table t_student (
id integer not null,
address varchar(255),
age integer,
birthDay datetime,
name varchar(255),
sex char(1),
primary key (id)
)
SQL表:(主键没有⾃增)
mysql>desc t_student;
+----------+--------------+------+-----+---------+-------+
| Field    | Type        |Null|Key|Default| Extra |
+----------+--------------+------+-----+---------+-------+
| id      |int(11)      | NO  | PRI |NULL||
| address  |varchar(255) | YES  ||NULL||
| age      |int(11)      | YES  ||NULL||
| birthDay |datetime| YES  ||NULL||
描写烟花的句子| name    |varchar(255) | YES  ||NULL||
| sex      |char(1)      | YES  ||NULL||
+----------+--------------+------+-----+---------+-------+
5.2@Table注解
@Table(name="xxx",catalog="xxx",schema="xxx")
@Entity配合使⽤,只能标注在实体的class处定义,表⽰实体对应的数据库表的信息name:可选映射表的名称,不写的话与类名称相同
catalog:可选(⽬录名称),表⽰Catalog名称,默认为Catalog("")
schema:可选的模式名称,表⽰Scheme名称,默认为Scheme("")
Catalog与Schema解释:
⾃⼰的测试:
package cn.qlq.domain;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
//@Entity(name = "t_student") // 注意包名是javax
@Entity
@Table(name = "t_stu", schema = "hibernate") // 注意包名是javax
public class Student {
// @Id
private Integer id;
private String name;
private Integer age;
private Date birthDay;
private Character sex;
private String address;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
我国面积最大的湖泊是哪个湖
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
SQL:
Hibernate:
drop table if exists t_stu
2018-09-0621:50:43[net.sf.ehcache.util.UpdateChecker]-[DEBUG] Checking
2018-09-0621:50:44[net.sf.ehcache.util.UpdateChecker]-[DEBUG]Update check failed: java.io.IOExc
新房怎么去除甲醛eption: Server returned HTTP response code: 403for URL: Hibernate:
create table t_stu (
id integer not null,
address varchar(255),
age integer,
birthDay datetime,
name varchar(255),
sex char(1),
primary key (id)
)
5.3@Embeddable表⽰此类⼀个嵌⼊类,经常作为另⼀个类的成员属性,在⽣成数据库表的时候该类的成员会作为其主类的属性
添加到数据库
例如如下Address是⼀个嵌⼊类:
package cn.qlq.domain;
import javax.persistence.Embeddable;
@Embeddable /** 表⽰此类是⼀个嵌⼊类,作为其他类的成员属性 **/
public class Address {
private int addreCode;
private String addressName;
public int getAddreCode() {
return addreCode;
}
public void setAddreCode(int addreCode) {

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。