前言
本章讲解注解方式配置Hibernate
方法
1.概念
我们知道,目前的趋势是注解式开发,所以我们之后的重心将全部投入到注解之中,映射配置文件(XXX.hbm.xml)就不多说了!
2.使用注解代替映射配置文件
我们之前都是使用XXX.hbm.xml配置实体类与数据库表之间的映射关系,那么对于之后的如关联关系来讲,配置起来还是不太舒服的,所以从今天起,我们一律采用注解的方式进行配置!
实际上非常简单,只是普通的注解
我们将User.hbm.xml删除,修改User.java如下:
package cn.edu.ccut.bo;
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GenericGenerator(name = "uuid", strategy = "uuid")
@GeneratedValue(generator = "uuid")
private String id;
private String username;
private String password;
public User() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
这样同样可以达到我们之前的效果,是不是简单一些呢?
运行测试类如下:
import cn.edu.ccut.bo.User;
import cn.edu.ccut.util.DBUtil;
import org.hibernate.Session;
import org.junit.Test;
/**
* @Auther:jwang
* @Date:2019/1/20
* @Description:PACKAGE_NAME
* @Version 1.0
**/
public class HibernateTest {
@Test
public void testHibernateConfig() throws Exception{
//创建Session对象
Session session = DBUtil.getSession();
//开启事务
session.beginTransaction();
User user = new User();
user.setUsername("sa");
user.setPassword("sa");
session.save(user);
session.getTransaction().commit();
DBUtil.close();
}
}
运行结果如下:
注解解释:
1)@Entity:该注解声明此类是实体类,并交由Hibernate管理
2)@Table:该注解指示实体类映射的表名,使用其name属性指明表名即可。若相同可以省略
3)@Id:该注解指明实体类哪个属性映射为表的ID
4)@Column:该注解指明实体类属性映射的数据库字段的名称,若相同可以省略
5)@GeneratedValue:该注解用于指定主键的生成策略(JPA),属性strategy一般有以下取值:
- GenerationType.TABLE:使用一个特定的数据库表格来保存主键
- GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
- GenerationType.IDENTITY:主键由数据库自动生成(主要是自动增长型)
- GenerationType.AUTO:主键由程序控制。
特别的:uuid等主键生成策略,JPA是不支持的,所以需要通过hibernate来进行实现
6)@GenericGenerator:hibernate主键策略生成器
特别的:@GenericGenerator注解配合@
GeneratedValue一起使用,@GeneratedValue注解中的"generator"属性要与@GenericGenerator注解中name属性一致,strategy属性表示hibernate的主键生成策略
7)@Transient:该注解表示声明的属性不会和数据库所关联
特别的:
使用注解的方式配置Hibernate的实体类映射的时候,在hibernate.cfg.xml要换成如下的配置方式:
这和之前的resource是有一定区别的!
大致hibernate一般性的配置就是如上面所示的一些注解,之后我们讲到关联映射的时候还将接触更多的注解!