hibernate 1
开博原因
这学期我们开设了框架的课程,因为课时原因,框架老师只是粗略的讲了Struts2、spring的入门知识,hibernate则是由ORM课负责讲解,在上ORM课之前我是准备学习mybatis的,今天听了ORM老师讲课,他说hibernate学会了,再转mybatis会很容易,所以准备在这里记录我学习hibernate的路程以及以后要转学mybatis的学习之路。
我们用的参考书籍是传智播客高教产品研发部编著的清华大学出版社出版的《ssh框架整合实战教程》,有些知识会参照操烤熟,如有文章里侵权,请联系我,我会删除。
学习hibernate,首先要知道hibernate有什么好处:“hibernate是一个开源框架,对JDBC进行了轻量级(比mybatis重)地封装,使java程序员可以用面向对象的编程思想来操作数据库。” 我对这句话的理解就是在你的java代码中,可以不必再去操纵sql语句了,所有的跟sql有关的东西,都在框架中,你只需要在配置文件中配置就可以了,避免了在写java代码的同时还要操作数据库的麻烦,而且传统的JDBC代码是比较麻烦的。就那查询举例,一个表中的列少时还可以,要是十多个列,那每条在java中的sql语句就要多写很多代码,很容易出错。所以使用框架会让你的程序变得更加的简洁更具有操作性,方便后期代码维护与复用。
第一个hibernate程序
我们第一个程序就简单的做一个查询吧。
首先要下载hibernate的jar包,在hibernate官网就可以下载。http://hibernate.org
下载教程:点击more
下载5.2的就可以了
点击以后鼠标下滑,找到releases,然后挑一个下载。
点击下载之后会跳出这样一个界面,等待10s左右就跳出来你要下载的文件了
只是可能下载速度比较慢,不过多等一会也没什么。
下载结束解压后是这样一个文件夹
doc: hibernate提供的帮助文档,一般只要看懂这个文档就可以完全自学了。
lib: hibernate的所有jar包。
pro: 这是hibernate自带的一下样例。
以上我们下载完hibernate对应的jar包了,下面就要开始使用hibernate了。
首先我们要建立一个数据库,数据库软件就用MYSQL。工具用sqlyog。
创建一个名叫person的数据库
然后在这个数据库里创建一个p_stu的表
CREATE TABLE `p_stu` (
`s_id` int(10) DEFAULT NULL,
`s_name` varchar(20) DEFAULT NULL,
`s_sex` varchar(5) DEFAULT NULL,
`s_gra` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
随意插入几条数据。
然后打开myeclipse:创建一个java项目,在项目根目录下创建一个lib文件夹
这时,我们将所需要的jar包导入lib中,粘贴后别忘了build path
然后建立java pojo。 student类
package com.hust.hibernateDemo;
public class Student {
private int id;
private String name;
private String sex;
private int gra;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getGra() {
return gra;
}
public void setGra(int gra) {
this.gra = gra;
}
}
配置hibernate.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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/person?serverTimezone=UTC</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<mapping resource="com/hust/jayson/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration>
编写映射文件 student.hbm.xml
<?xml version="1.0"?>
<!--
~ Hibernate, Relational Persistence for Idiomatic Java
~
~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
-->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.hust.jayson.Student" table="p_stu" lazy="false">
<id name="id" column="s_id" >
<generator class="native"/>
</id>
<property name="name" column="s_name" type="string" />
<property name="sex" column="s_sex" type="string" />
<property name="gra" column="s_gra" type="int" />
</class>
</hibernate-mapping>
注意:配置文件中的属性类型和java中的属性类型可能不一样,就拿字符串来说,在java中就是String,而在这个配置文件中去却是小写的“string” 小弟就掉进了这个坑,爬了好久才爬出来。
最后建立测试类
package com.hust.jayson;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;
public class TestDemo {
@Test
public void selectStu(){
Configuration cig = new Configuration().configure();
SessionFactory sessionFactory = cig.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction t = session.beginTransaction();
Student s = (Student) session.get(Student.class, 1);
System.out.println(s.toString());
t.commit();
session.close();
sessionFactory.close();
}
}
输出结果
总结:
嗯,,,第一次试用hibernate可谓是经历了千辛万苦,一堆BUG,比如myeclipse的jdk版本过低,比如String和string的区别等等等等。不过也成长了许多,顺带学到了怎么去更改myeclipse里的jdk版本。反正不会的就百度,多看大佬们是怎么处理这些问题的好了。如有问题,留言私信都可以,以后会不定时更新学到的知识,小白一枚,一些无知的地方望请见谅。