关于Hibernate的入门

1.什么是Hibernate?

Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心

所欲的使用对象编程思维来操纵数据库。 

      Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用。

      Hibernate是轻量级JavaEE应用的持久层解决方案,是一个关系数据库ORM框架。

注意:Hibernate是一个持久层的ORM框架。

2.什么是ORM?

 ORM映射:Object Relational Mapping。
    * O:面向对象领域的Object(JavaBean对象)。
    * R:关系数据库领域的Relational(表的结构)。
    * M:映射Mapping(XML的配置文件)。

简单一句话:Hibernate使程序员通过操作对象的方式来操作数据库表记录。

3.Hibernate优点:

      Hibernate对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
      Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作。
      Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持很多关系型数据库,从一对一到多对多的各种复杂关系。

4.利用Hibernate添加用户操作

(1)建立数据库建表 

CREATE DATABASE test;
USE test;
CREATE TABLE t_user(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
username VARCHAR(20),
PASSWORD VARCHAR(25),
sex VARCHAR(15),
age INT 
);

(2)搭建hibernate开发环境

建立web项目,导入jar包


(3)编写实体类:

package hibernate.domain;

public class User {
	private int id;
	private String username;
	private String password;
	private String sex;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int 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 pasword) {
		this.password = password;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	

}

(4)创建类与表结构的映射

    在实体类所在的包下创建映射的配置文件
    * 默认的命名规则为:实体类名.hbm.xml。

<?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>

	<!-- 配置类和表结构的映射 -->
	<class name="hibernate.domain.User" table="t_user"><!-- 包名 数据库表名 -->
		<!-- 配置id 
			见到name属性,JavaBean的属性  (domain的属性)
			见到column属性,是表结构的字段
		-->
		<id name="id" column="id"> <!-- 只有主键是 id 剩下的写property -->
			<!-- 主键的生成策略 -->
			<generator class="native"/>
		</id>
		
		<!-- 配置其他的属性 -->
		<property name="username" column="username"/>
		<property name="password" column="password"/>
		<property name="sex" column="sex"/>
		<property name="age" column="age"/>
		
	</class>
	
</hibernate-mapping>    

(5)编写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>
	
	<!-- 记住:先配置SessionFactory标签,一个数据库对应一个SessionFactory标签 -->
	<session-factory>
		
		<!-- 必须要配置的参数有5个,4大参数,数据库的方言 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql:///test</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">123</property>
		
		<!-- 数据库的方言 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		
		<!-- 可选配置 -->
		<!-- 显示SQL语句,在控制台显示 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式化SQL语句 -->
		<property name="hibernate.format_sql">true</property>
		<!-- 生成数据库的表结构 
			update:如果没有表结构,创建表结构。如果存在,不会创建,添加数据
		-->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 映射配置文件,需要引入映射的配置文件 -->
		<mapping resource="hibernate/domain/User.hbm.xml"/>
		
	</session-factory>
	
</hibernate-configuration>	

(6)编写Hibernate入门代码,引用HibernateUtils类

package hibernate.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * Hibernate框架的工具类
 * @author Administrator
 */
public class HibernateUtils {
	
	// ctrl + shift + x
	private static final Configuration CONFIG;
	private static final SessionFactory FACTORY;
	
	// 编写静态代码块
	static{
		// 加载XML的配置文件
		CONFIG = new Configuration().configure();
		// 构造工厂
		FACTORY = CONFIG.buildSessionFactory();
	}
	
	/**
	 * 从工厂中获取Session对象
	 * @return
	 */
	public static Session getSession(){
		return FACTORY.openSession();
	}
	
}

UserDao类

package hibernate.dao;


import org.hibernate.Session;
import org.hibernate.Transaction;

import hibernate.domain.User;
import hibernate.utils.HibernateUtils;
//添加用户
public class UserDao {
	public void addUser(User user){
		Session session = HibernateUtils.getSession();
		Transaction trans = session.beginTransaction();
		session.save(user);
		System.out.println("添加成功!");
		trans.commit();
		session.close();
	}

}

(7)编写测试类

package hibernate.demo;

import org.junit.Test;

import hibernate.dao.UserDao;
import hibernate.domain.User;

public class TestAdd {
	@Test
	public void add(){
		User user = new User();
		user.setUsername("小牧");
		user.setAge(12);
		user.setPassword("111");
		user.setSex("男");
		new UserDao().addUser(user);
	}

}

(8)数据库运行结果


总结:

在用Junit做单元测试运行的时候,报错,原因是无法连接到数据库,我重新检查了Hibernate核心配置文件里面数据库名是否写错,以及User实体类的映射里表的名字。发现都没有问题,最后,突然发现,我没有导入数据库驱动的jar包。

一定要导对包!!!


猜你喜欢

转载自blog.csdn.net/cherish_lucky/article/details/80233539
今日推荐