*未经授权,严禁转载
学完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第一个程序就折腾了这么久。
*未经授权,严禁转载