第一次使用hibernate

今天第一次使用了hibernate框架成功的实现想数据库里插入数据,初次使用可能会觉得很麻烦,但是相比较在web开发中使用原始的拼SQL语句的方法,确实方便许多.

使用hibernate,我下载的是hibernate-annotations-3.4.0.GA.zip,hibernate-distribution-3.3.2.GA-dist.zip和slf4j-1.5.8.zip,这三个压缩包都是在官网上下载下来的,如果你使用的不是这三个版本,那么就得到官网上查查版本之间的对应关系,因为如果版本匹配的话,可能会在编译期间会出现一些意想不到的问题.

 将这三个压缩包解压之后,你需要分别将hibernate-distribution-3.3.2.GA文件夹下的hibernate3.jar以及lib下面required中的所有jar包,hibernate-annotations-3.4.0.GA文件夹下面的hibernate-annotations.jar和slf4j-1.5.8文件夹中的slf4j-nop-1.5.8.jar导入MyEclipse中.当然还必须得有mysql-connector-java-5.0.8-bin.jar(我使用的是MySQL,下载的是这个版本的jar包),既然要使用hibernate,那么还必须要导入hibernate-annotations-3.4.0.GA文件夹的lib目录下面的hibernate-commons-annotations.jar和ejb3-persistence.jar两个jar包.一共需要的是12jar包.而在hibernate-distribution-3.3.2.GA\documentation\manual\zh-CN\html_single的index.html就是hibernate的使用手册.

 下面进行第一次使用hibernate.

 首先建立数据库:

create database hibernate;

use hibernate;

create table hibernate(id int primary key,name varchar(20),age int);

 建立一个Java工程,建立一个Student类,具有id,name,age三个属性,并写好set和get方法.代码如下:


public class Student {
private int id;
private String name;
private int age;
private String phoneNumber;

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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}

 按照大多数人的习惯,在建立Student类的同级目录中建立Student.hbm.xml文件.代码如下:


 1 <?xml version="1.0"?>
2 <!DOCTYPE hibernate-mapping PUBLIC
3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
5
6 <hibernate-mapping package="com.nenu.hibernate">
7 <class name="Student" table="student"> <!--将实体类和数据库中的表关联,如果数据库的表明和实体类名一致,则可以省略table="表名"-->
8 <id name="id" column="id"></id><!-- 指定主键 -->
9 <property name="name" column="name"></property> <!-- 属性之间的对应,如果属性名和列名一致,也可以省略column="列名"-->
10 <property name="age"></property>
11 </class>
12 </hibernate-mapping>

 接下来就是写hibernate的配置文件了.在工程的src目录下新建文件hibernate.cfg.xml,在使用手册中copy(建议不用手写,直接copy)配置文件:


 1 <?xml version=‘1.0‘ encoding=‘utf-8‘?>
2 <!DOCTYPE hibernate-configuration PUBLIC
3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
5
6 <hibernate-configuration>
7
8 <session-factory>
9
10 <!-- Database connection settings -->
11 <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
12 <property name="hibernate.connection.url">
13 <![CDATA[jdbc:mysql://localhost:3306/daycode?useUnicode=true&characterEncoding=utf8]]>
14 </property>
15 <!-- 数据库地址 -->
16 <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
17 <property name="connection.username">root</property>
18 <property name="connection.password">root</property>
19
20 <!-- 数据库连接池 -->
21 <!-- JDBC connection pool (use the built-in) -->
22 <!-- <property name="connection.pool_size">1</property> -->
23
24 <!-- SQL dialect SQL方言,如果使用其他数据库则需要修改方言,具体见手册-->
25 <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
26
27 <!-- Enable Hibernate‘s automatic session context management -->
28 <!-- <property name="current_session_context_class">thread</property> 暂时用不上-->
29
30 <!-- Disable the second-level cache 二级缓存不可见 二级缓存利于hibernate的优化-->
31 <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
32
33 <!-- Echo all executed SQL to stdout -->
34 <property name="show_sql">true</property>
35
36 <!-- Drop and re-create the database schema on startup hibernate自动生成建表语句-->
37 <property name="hbm2ddl.auto">update</property>
38
39 <mapping resource="com/nenu/hibernate/Student.hbm.xml"/>
40
41
42 </session-factory>
43
44 </hibernate-configuration>

 至此,已经完成了大部分的工作了,现在只需要新建一个StudentTest类进行测试即可.代码如下:


 1 import org.hibernate.Session;
2 import org.hibernate.SessionFactory;
3 import org.hibernate.cfg.Configuration;
4
5 public class studentTest {
6 public static void main(String[] args) {
7 Student student = new Student();
8
9 student.setId(1);
10 student.setAge(22);
11 student.setName("hibernate");
12
13 Configuration cfg = new Configuration();
14 SessionFactory sf = cfg.configure().buildSessionFactory();
15 Session session = sf.openSession();
16
17 session.beginTransaction();//进行事务管理
18 session.save(student);
19 session.getTransaction().commit();
20 }
21 }

 运行studentTest.java,可以看见控制台输出了sql语句:Hibernate: insert into Teacher
(age, name, title, id) values (?, ?, ?, ?);则表明成功,查看数据库便可看到数据.

 使用hibernate的方便之处在于能将一个对象方便的插入到一个不是面向对象DBMS中.

第一次使用hibernate,码迷,mamicode.com

时间: 2024-10-20 20:33:12

第一次使用hibernate的相关文章

hibernate多表查询封装实体

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别. hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系. 例如:student表和score表需要做联合查询. 1)sql: select s.id,s.name,sc.score from student as s,score as sc

struts2,hibernate,spring整合笔记(2)

上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置hibernate时用的javase, 在window-> preferences->java->user libraries,创建一个新的Use libraries,添加相应的jar包 再在项目build path->build configurationpath->add l

hibernate实现多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别. hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系. 例如:student表和score表需要做联合查询. 1)sql: select s.id,s.name,sc.score from student as s,score as sc

hibernate Annotation版本的helloworld

经过第一次的 hibernate  我发现每一个数据库表都对应了一个类,并且每一个类都要新建一个文件进行配置 很麻烦!  于是便出现了Annotation版本的hibernate. 具体如下: 1.同样的 先新建一个java project. 2.导入hibernate插件(选中项目单击鼠标右键-->my eclipse-->project  facets-->hibernate-->next-->新建一个包选中-->next-->去掉上面那个勾-->fin

hibernate 多表联合查询

以前用sql实现联合查询 是非常简单的事,只需要写sql语句就可以,第一次遇到hibernate要实现多表联合查询的时候还楞了一下.最后看了下资料,才恍然大悟,hibernate实现多表联合查询跟SQL没多大差别. hibernate很多实现都是靠喜欢配关系,但是如果两张表,数据量都非常大的时候,并不合适配关系. 例如:student表和score表需要做联合查询. 1)sql: select s.id,s.name,sc.score from student as s,score as sc

Hibernate 4 初试

第一次使用Hibernate,基本还算顺利的实现了增加和查找. 版本:Hibernate4.3.8 开发环境:jdk1.7 Intellij Idea14 包结构非常简单 1.创建数据库 很简单,test数据库,包含表user_info,列:userid,username,password. 2.写配置文件 Hibernate有个配置文件*.cfg.xml,当然起其他的名字其实也一样能用,可能在自动获取配置文件的时候会出错. HibernateConfig.cfg.xml如下: <?xml ve

从Intellij IDEA14 SpringMVC4+Hibernate4问题得到的启发

1.在添加model类hibernate注解的时候,idea一直提示没有配置数据源(其实是假报错,浪费我这么长时间,感觉idea还是和vs有很大的差距)! 2.解决上面的问题,又报错,原来id的注解写成了自动生成(@GeneratedValue(strategy=GenerationType.AUTO)),而id的类型是sting改成int就可以了. 3.一直以为是“packagesToScan”和“hibernate.hbm2ddl.auto”的问题,查了好多资料,而并没有深入的查看实体类Id

query.list()和query.iterate()区别

list方法返回的是结果集的list集合,iterate返回的是iterator迭代器. list方法查询所有记录只发送一条sql语句,select * from 表名 iterate方法查询所有记录的话,先查询到满足条件的所有记录id,并不立即查询所有结果,当我们有用到某个记录的话,他才查询.如果显示所有记录的话需要n+1条sql语句.第一条查id,接下去根据id,一条一条查询,所以是n+1条. list方法缓存中有记录了,他还是会发生sql语句到数据库中查询. iterate方法缓存中有记录

码途有道----基于系统观的核心能力构建-by-韩宏老师

原文链接:http://blog.sina.com.cn/s/blog_7d5a09f90102v341.html 有感于同学们在大学中如何学习计算机技术有些感概,将我书(老码识途)中的序言整理了一下,并补充了一些后来的想法,比如什么是系统观的新认知. 如果你想成为高级程序员或架构师,什么才是技术上的核心竞争力?仅仅是知识吗?在这个随时可求助于Google的年代,它似乎已变得非常廉价.而青春的流失并不能给我们留下技术财富,似乎只是将我们变成自嘲的"码奴".核心竞争力究竟在哪里?笔者认为