Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

使用myeclipse编写Hibernate小栗子

$
0
0

Hibernate是java领域的一款开源的ORM框架技术

Hibernate对JDBC进行了非常轻量级的对象封装

准备前的工作

导入Hibernate必须的jar包 hibernate-core.zip

导入MySQL的JDBC驱动 mysql-connector-java-5.1.7-bin.jar

导入Junit4的jar包 Junit-4.10.jar


我们可以把上面的jar包 添加自定义用户类库,方便每次导入jar包。添加后最好就不要移动这些jar包的位置了哦  不然你就要重新修改用户类库了

基本步骤

  • 在MyEclipse Datebase Explorer 创建数据库连接
  • 创建hibernate的配置文件
  • 根据数据库表自动生成持久化类和对象关系映射文件
  • 使用junit通过Hibernate API编写访问数据库的代码

在MyEclipse Datebase Explorer 创建数据库连接

点击myeclipse的右上角图标open Perspective  选择MyEclipse Database Explorer

在DB Browser界面鼠标右键new 新建数据库驱动


我用的是mysql数据库,使用其它数据库请相应修改,把数据库帐号密码 驱动添加后点击finsh即可。

创建hibernate的配置文件

点击你创建的java项目 右键 MyEclipse->Add Hibernate Capabilities 


导入自定义类库的三个jar包 next


这里就是生成的hibernate配置文件位置和名称  点击next


选择我们刚刚在MyEclipse Database Explorer新建的数据库  点击next


create SessionFactory class是否创建SessionFactory类我取消勾选了  因为我在下面自己实例化了

点击finish即成功创建了hibernate的配置文件hibernate.cfg.xml

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

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/susu</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="myeclipse.connection.profile">MySQLDriver</property>
    
    </session-factory>

</hibernate-configuration>

根据数据库表自动生成持久化类和对象关系映射文件

点击myeclipse的右上角图标open Perspective  选择MyEclipse Database Explorer

在DB Browser界面打开我们创键的数据库连接

选中我们需要生成持久化类的表,右键选择Hibernate Reverse Engineering 

 

java src folder    持久化类生成的项目位置

java package     持久化类的包名

点击next


id generator  选择native  点击finish

在你选择的项目里即成功生成了持久化类和对象关系映射文件

持久化类

package com.susu.entity;

import java.util.Date;

/**
 * Students entity. @author MyEclipse Persistence Tools
 */

public class Students implements java.io.Serializable {

	// Fields

	private Integer id;
	private String name;
	private String gender;
	private Date date;
	private String address;

	// Constructors

	/** default constructor */
	public Students() {
	}

	/** full constructor */
	public Students(String name, String gender, Date date, String address) {
		this.name = name;
		this.gender = gender;
		this.date = date;
		this.address = address;
	}

	// Property accessors

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGender() {
		return this.gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public Date getDate() {
		return this.date;
	}

	public void setDate(Date date) {
		this.date = date;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

对象关系映射文件

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.susu.entity.Students" table="students" catalog="susu">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="gender" length="2" />
        </property>
        <property name="date" type="java.util.Date">
            <column name="date" length="0" />
        </property>
        <property name="address" type="java.lang.String">
            <column name="address" length="30" />
        </property>
    </class>
</hibernate-mapping>


这个时候会在hibernate.cfg.xml 新增一个映射  指向刚刚生成的关系映射文件

<mapping resource="com/susu/entity/Students.hbm.xml" />

通常我们还会加上

                <property name="show_sql">true</property>
		<property name="format_sql">true</property>
		<property name="hbm2ddl.auto">update</property>

在控制台输出sql 语句并对Sql语句进行排版

具体作用请看这篇文章点击打开链接

使用junit通过Hibernate API编写访问数据库的代码

import java.util.Date;
import java.util.Properties;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.susu.entity.Students;

public class StudentsTest {
	private SessionFactory sessionFactory;
	private Session session;
	private Transaction transaction;

	@Before
	public void init() {
		// 创建配置对象
		Configuration config = new Configuration().configure();
		// 创建服务注册对象
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
				.applySettings(config.getProperties()).buildServiceRegistry();
		// 创建会话工厂对象
		sessionFactory = config.buildSessionFactory(serviceRegistry);
		// 会话对象
		session = sessionFactory.openSession();
		// 开启事务
		transaction = session.beginTransaction();
	}

	@Test
	public void testSaveStudents() {
		Students stu=new Students("张三", "男", new Date(), "河南省信阳市");
		session.save(stu);
	}

	@After
	public void destroy() {
		transaction.commit();// 提交事务
		session.close();
		sessionFactory.close();
	}
}

运行结果:


打开mysql数据库会发现我们成功在Students表中插入了一条数据。










作者:su20145104009 发表于2016/11/21 21:24:12 原文链接
阅读:41 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>