第一个Hibernate程序

 

*未经授权,严禁转载

学完Servlet和JSP,初学框架。首先选择Hibernate上手,第一个Hibernate程序算是折腾了大半天,现在将我的过程以及一些遇到的问题分享给大家。

 

一,环境准备

1.首先去Hibernate官网,下载资源。

2.选择Hibernate ORM ,点击More。然后选择Realse,我选择的是5.0

 3.选择下载CR1

4.下载完毕解压,一共有三个文件夹。等下需要把lib下面的required里面的jar包放在eclipse里面去。

5.打开eclipse,添加JBOSS Tools组件。首先选择Help->Eclipse MarketPlace,搜索JBoss Tools,其他有些博客说要选择对应eclipse版本的,但是我做的时候并不需要选择版本,直接下载就是了。下载完成过后环境基本就搭建完毕。

6,将之前下载的文件,选择lib中的required下面的所有jar包,放在WEB-INF下面的lib中

注意不是把整个required文件夹放在lib下面,是把jar包拿出来放在lib下面,刚开始我傻了,直接把文件夹放在下面,结果并没有添加到项目的Liabries里面,导师我编写测试程序,一直导不进包。当然,你的数据库驱动,也要放在那下面。

7.数据库准备

数据库的创建就你自己完成了吧。 

二、代码实现

1.为了简单,只建立一个实体类(其实这里叫的持久化类),我定义的Student类,这个类完全符合JavaBeans规范。

package com.entity;

public class Student {
	private String sno;
	private String sname;
	private int sage;
	private String ssex;
	private String sdept;
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String sno, String sname, int sage, String ssex, String sdept) {
		super();
		this.sno = sno;
		this.sname = sname;
		this.sage = sage;
		this.ssex = ssex;
		this.sdept = sdept;
	}
	public String getSno() {
		return sno;
	}
	public void setSno(String sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public int getSage() {
		return sage;
	}
	public void setSage(int sage) {
		this.sage = sage;
	}
	public String getSsex() {
		return ssex;
	}
	public void setSsex(String ssex) {
		this.ssex = ssex;
	}
	public String getSdept() {
		return sdept;
	}
	public void setSdept(String sdept) {
		this.sdept = sdept;
	}
	
}

2.定义映射文件,这个文件一般命名规范为:*.hbm.xml,而且放在持久化类的同一个包下。选择新建,输入Hibernate,会出现下图所示:

直接选择hbm.xml,选择对应的持久化类,一直next,最后final即可。

代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2018-7-31 2:35:51 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="com.entity.Student" table="student">
        <id name="sno" type="java.lang.String">
            <column name="SNO" />
        </id>
        <property name="sname" type="java.lang.String">
            <column name="SNAME" />
        </property>
        <property name="sage" type="int">
            <column name="SAGE" />
        </property>
        <property name="ssex" type="java.lang.String">
            <column name="SSEX" />
        </property>
        <property name="sdept" type="java.lang.String">
            <column name="SDEPT" />
        </property>
    </class>
</hibernate-mapping>

我当时做的时候,不太懂,看书上,在<id></id>中加了一个<generator class="identity"/>,而且我数据库对应的表并没有自动编号,导致出错,好不容易才找到。一定要注意。

 

3.编写配置文件,这个文件一般直接放在src下面, 否则可能报错找不到cfg.xml文件。同样,新建,选择cfg.xml文件。可以先创建,然后再编写配置信息。

<?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>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.password">root</property>
  <property name="hibernate.connection.url">数据库连接url</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="current_session_context_class">thread</property>
  
  <mapping resource="com/entity/Student.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

4.编写测试程序(这一步我被书上坑惨了,我首先看书上的代码,由于有一个方法已经被遗弃了,不再使用,书上还是使用的哪个方法。我是后来才看到书上的提示,晕,害我改到凌晨3点)

import javax.persistence.RollbackException;

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

import com.entity.Student;

public class FirstHibernate {
	public static void main(String[] args) {
	    SessionFactory sessionFactory=null;
	    Session session=null;
	    Transaction transaction=null;
        // 获得 session工厂
        sessionFactory = new Configuration().configure().buildSessionFactory();
        // 获得 session
        session = sessionFactory.openSession();
        // 开启事务
        transaction = session.beginTransaction();
		Student student =new Student("002","张三",20,"男","CS");
		session.save(student);
		System.out.println("插入学生成功!");
		Student stud=(Student)session.get(Student.class, "160601701");
		System.out.println(stud.getSname()+" "+stud.getSage());
		try {
			transaction.commit();
		} catch (SecurityException | RollbackException e) {
			e.printStackTrace();
		}
		session.close();
		sessionFactory.close();
	}
}

5,大功告成,运行吧,控制台结果如下:

七月 31, 2018 11:51:51 上午 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.0.0.CR1}
七月 31, 2018 11:51:51 上午 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
七月 31, 2018 11:51:51 上午 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
七月 31, 2018 11:51:51 上午 org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
七月 31, 2018 11:51:52 上午 org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-mapping. Use namespace http://www.hibernate.org/dtd/hibernate-mapping instead. Refer to Hibernate 3.6 Migration Guide!
七月 31, 2018 11:51:53 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
七月 31, 2018 11:51:53 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://120.78.78.212:3306/LIzheng]
七月 31, 2018 11:51:53 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=root, password=****}
七月 31, 2018 11:51:53 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
七月 31, 2018 11:51:53 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
七月 31, 2018 11:51:53 上午 org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
插入学生成功!
沈雪 21
七月 31, 2018 11:51:54 上午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://120.78.78.212:3306/LIzheng]

 

其中遇到了很多了问题,我是某天晚上,10点搞到凌晨3点,第二天起床继续搞。初学走了太多弯路,但是不能放弃,然后坚持这样,最后你就很强了。我也要去学习了,Hibernate第一个程序就折腾了这么久。

 

*未经授权,严禁转载

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值