一. 什么是hibernate
ORM框架/持久层框架( object reference mapping)
ORM(Object-Relationship-Mapping):是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。
JPA(Java-Persistence-API):是Java持久化接口的意思,它是JavaEE关于ORM思想的一套标准接口,仅仅是一套接口,不是具体的实现。
通过管理对象来改变数据库中的数据, 通过管理对象来操作数据库,Hibernate是一个完完全全的ORM组件,它是完全基于对象来操作数据库中的记录 , 与hibernate类似的框架:mybatis
优势:跨数据库的无缝移植
二. 在项目中添加hibernate支持(手动添加)
1、添加hibernate相关依赖
2、在resource目录下添加hibernate.conf.xml(核心配置文件)
①添加dtd 约束
展开hibernate的jar,找到下面画红线的文件,点开


打开圆圈中的那个文件,将上面画红线的代码块的约束粘贴到 hibernate.conf.xml中
注:我们还可以通过联网的方式获得约束里头的编写提示

②添加Hibernate的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 1. 数据库相关 -->
<!-- 方言(dialect) 一方的语言,这里代表MySql一方 -->
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<property name="connection.url">jdbc:mysql://localhost:3306/article?useUnicode=true&characterEncoding=UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 配置本地事务(No CurrentSessionContext configured!) -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- 2. 调试相关 -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 3. 添加实体映射文件 -->
<mapping resource="com/practice/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3、 在开发阶段再创建实体类和实体映射文件(*.hbm.xml)
实体类(POJO)
package com.practice.entity;
import java.sql.Timestamp;
import java.sql.Date;
public class User {
private Integer id;
private String userName;
private String userPwd;
private String realName;
private String sex;
private Date birthday;
private Timestamp createDateTime;
private String remark;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Timestamp getCreateDateTime() {
return createDateTime;
}
public void setCreateDateTime(Timestamp createDateTime) {
this.createDateTime = createDateTime;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", userPwd=" + userPwd + ", realName=" + realName
+ ", sex=" + sex + ", birthday=" + birthday + ", createDateTime=" + createDateTime + ", remark="
+ remark + "]";
}
}
实体映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name:类的全限定名 table:指的是类所对应的表 -->
<class name="com.practice.entity.User" table="t_hibernate_user">
<!-- name:类属性 type:类属性类型 column:对应的表列字段 -->
<id name="id" type="java.lang.Integer" column="id">
<!-- 配置数据库表的主键生成策略 -->
<generator class="increment"></generator>
</id>
<property name="userName" type="java.lang.String" column="user_name"></property>
<property name="userPwd" type="java.lang.String" column="user_pwd"></property>
<property name="realName" type="java.lang.String" column="real_name"></property>
<property name="sex" type="java.lang.String" column="sex"></property>
<property name="birthday" type="java.sql.Date" column="birthday"></property>
<property name="createDateTime" type="java.sql.Timestamp" column="create_datetime" insert="false" update="false"></property>
<property name="remark" type="java.lang.String" column="remark"></property>
</class>
</hibernate-mapping>
hibernate的核心配置文件中需要配置实体的映射文件

三.用法
在这里只写一个main方法进行测试了,在开发中以实际情况为准:
package com.practice.entity;
import java.sql.Date;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
@SuppressWarnings("unused")
public class TestDemo {
/** 测试hibernate- User的增删改查
* 对hibernate.conf.xml进行建模
* 通过建模所得到的conf文件类,获取所配置的session-factory
* 获取session会话
* 开启事务
* 操作数据库
* 提交事务
* 关闭session会话
*
* Hibernate在对实体进行修改时,相对应 建模文件映射的实体xml文件,会对数据库表字段进行自动的修改
*/
public static void main(String[] args) {
//建模
Configuration conf = new Configuration().configure("hibernate.conf.xml");
//所配置的session-factory
SessionFactory sf = conf.buildSessionFactory();
//获取session会话
Session session = sf.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//模拟数据
// User user = new User();
// user.setUserName("嘿嘿1");
// user.setUserPwd("123");
// user.setRealName("倩猪");
// user.setSex("女");
// user.setBirthday(new Date(new java.util.Date().getTime()));
// user.setRemark("漂漂亮亮可可爱爱倩猪");
// user.setId(2);
// User user = session.get(User.class, 1);
User user = session.get(User.class, 2);
user.setUserName("咔擦");
/**
* 查所有
*/
// List<User> list = session.createQuery("from User").list();
// for (User user : list) {
// System.out.println(user.getRemark());
// }
//操作数据库
// session.save(user);//增加
// session.delete(user);//删除
// System.out.println(user);//查一个
session.update(user);//修改
//提交事务
transaction.commit();
//关闭会话
session.close();
}
}
2118

被折叠的 条评论
为什么被折叠?



