注解
同样的,Hibernate也是支持使用注解方式的。创建hibernate应用程序时有许多注解可用,如@Entity,@Id,@Table
Hibernate注释基于JPA 2规范,并支持所有功能。
所有JPA注释都在javax.persistence.*
包中定义。
Hibernate EntityManager实现由JPA规范定义的接口和生命周期。
使用hibernate注释的核心优点是不再需要创建映射(*.hbm.xml
)文件直接创建对象关联。
创建项目
- 表
创建一个表
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`first_name` varchar(50) NOT NULL,
`last_name` varchar(50) NOT NULL
);
- 创建实体类
创建实体类并与表相映射关联。
@Entity注解将此类标记为实体。
@Table注解指定要保留此实体的数据的表名。
如果不使用@Table注解,hibernate默认会将使用类名作为表名称。
@Id注解标记此实体的标识符,一般对应的是表的主键。
@Column注解指定此属性或字段的列的详细信息。如果未指定@Column注解,则属性名称默认将用作列名称。
@Entity
@Table(name = "employee")
public class Employee {
@Id
private int id;
private String last_Name;
private String first_Name;
//此处省略get和set方法
}
- 修改hibernate配置文件
因为采用了注解的方式,所以不需要再创建实体类映射文件,只用在hibernate配置文件中映射实体类即可。
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库连接参数-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/test?serverTimezone=GMT%2B8</property>
<property name="connection.username">root</property>
<property name="connection.password">abcd</property>
<!--声明数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
<!--是否显示HQL-->
<property name="show_sql">true</property>
<!--映射实体类-->
<mapping class="mypackage.Employee"/>
</session-factory>
</hibernate-configuration>
- 创建测试类
public class Test {
public static void main(String[] args) {
// 读取配置文件,构建注册
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
// 构建会话工厂
SessionFactory sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
/*数据库操作*/
Session session = sessionFactory.openSession();// 从会话工厂获取一个session
Transaction t = session.beginTransaction();
Employee e1 = new Employee();
e1.setId(1001);
e1.setFirst_Name("M");
e1.setLast_Name("Su");
Employee e2 = new Employee();
e2.setId(1002);
e2.setFirst_Name("Su");
e2.setLast_Name("Ning");
session.persist(e1);
session.persist(e2);
t.commit();
session.close();
System.out.println("successfully saved");
}
}
-
运行结果
运行结果 数据库查询结果
网友评论