hibernate 入门

一. 什么是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&amp;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();
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值