引言
上文,介绍了Hibernate的基础并未牵扯到实战,通过上文的引子!我们做一个小案例!
向数据库test中的table1插入一条记录!
一,创建数据库,并创建表table1
二,通过idea创建Hibernate工程
完成以上操作,点击下一步
目录结构如图所示
添加Mysql驱动
三,创建PO
PO=POJO+持久化注解
import javax.persistence.*;
@Entity//注释声明该类为Hibernate持久化类
@Table(name="table1")//指定映射的表
public class News {
@Id//用于指定该类的标识属性
@GeneratedValue(strategy = GenerationType.IDENTITY)//用于指定主键的生成策略,其中strategy属性指定了主键生成策略为IDENTITY策略,也是采用自动增长
private Integer id;
private String title;
private String content;
public Integer getId() {
return id;
}
public String getTitlel() {
return title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public void setTitle(String title) {
this.title = title;
}
public void setId(Integer id) {
this.id = id;
}
}
代码中注解含义
@Entity//注释声明该类为Hibernate持久化类
@Table(name=“table1”)//指定映射的表
@Id//用于指定该类的标识属性
@GeneratedValue(strategy = GenerationType.IDENTITY)//用于指定主键的生成策略,其中strategy属性指定了主键生成策略为IDENTITY策略,也是采用自动增长
编辑hibernate.cfg.xml文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--加载数据库驱动-->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2b8</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<!--指定数据库方言-->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- DB schema will be updated if needed -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--在控制台显示SQL语句-->
<property name="show_sql">true</property>
<!--将SQL脚本中语句格式化在输出-->
<property name="hibernate.format_sql">true</property>
<!--罗列所有的持久化类-->
<mapping class="News"/>
</session-factory>
</hibernate-configuration>
运行结果
代码解读
首先开发持久化类,由POJO+持久化注解组成,然后获取Copnfiguration对象,获取SeeionFactory,在获取Session打开事务。用面向对象的方式操作数据库。接着关闭数据库,关闭Session.
PO的三种状态
瞬态:如果PO 实例从未与Session 关联过,该PO 实例处于瞬态状态。
持久化:如果PO 实例与Session关联起来,且该实例对应到数据库记录, 则该实例处于持久化状态。
脱管:如果PO 实例曾经与Session 关联过,但因为Session 的关闭等原因, PO 实例脱离了Session的管理,这种状态被称为脱管状态。
使用ORM框架操作数据库的优点
不再需要编写SQL 语句,而是允许采用00 方式来访问数据库。
在JDBC 访问过程中大量的checked 异常被包装成H ibernate 的Runtime 异常,从而不再要求程
序必须处理所有异常。
参考链接:
Exception in thread “main” org.hibernate.exception.GenericJDBCException: Field ‘bookname’ doesn’t ha遇到这个问题不可按此操作,直接在数据库中添加自增。
Exception in thread “main” org.hibernate.MappingException: Unknown entity: XXX
hibernate5.2+ 时区少8小时问题
点击链接加入群聊【程序员技术交流群】:添加链接描述