一、Hibernate是什么
二、Hibernate的优缺点
三、Hibernate的最基本配置
四、Hibernate的两种实体映射方式
一、Hibernate是什么
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
二、Hibernate的优缺点
优点:总体而言,运用框架是为了简化代码,提高编码效率
除此之外,hibernate还使开发对象化,面向对象,
移植性高,可与各数据库连接操作
支持事务管理,使数据库操作安全
提供缓存机制,提高运行效率
缺点:hibernate更适合单一对象的增删查改,不适合批量操作
三、Hibernate的最基本配置
本实例来自于尚学堂马士兵老师的教程实例
先给大家看一下hibernate的测试类,也是最基本的调用方式
- package com.bjsxt.hibernate;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.cfg.AnnotationConfiguration;
- public class Test {
- public static void main(String[] args) {
- //实例化实体类student
- Student s = new Student();
- s.setId(1);
- s.setName("zhangsan");
- s.setAge(8);
- //新建一session工厂
- SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
- //获取当前session
- Session session = sessionFactory.getCurrentSession();
- //开始事务
- session.beginTransaction();
- //利用session将实例化的student插入数据库中
- session.save(s);
- //关闭事务,此时session也随之关闭
- session.getTransaction().commit();
- }
- }
hibernate.cfg.xml一般放在src目录下:
- <?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">
- <hibernate-configuration>
- <session-factory>
- <!-- Database connection settings -->
- <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
- <!-- hibernate为数据库名 -->
- <property name="connection.url">jdbc:mysql://localhost/hibernate</property>
- <!-- 用户名为root -->
- <property name="connection.username">root</property>
- <!-- 密码为root -->
- <property name="connection.password">root</property>
- <!-- JDBC connection pool (use the built-in) -->
- <property name="connection.pool_size">1</property>
- <!-- SQL dialect -->
- <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
- <!-- Enable Hibernate's automatic session context management -->
- <property name="current_session_context_class">thread</property>
- <!-- Disable the second-level cache -->
- <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
- <!-- Echo all executed SQL to stdout -->
- <property name="show_sql">true</property>
- <!-- Drop and re-create the database schema on startup -->
- <property name="hbm2ddl.auto">update</property>
- <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/>
- <mapping class="com.bjsxt.hibernate.Teacher"/>
- </session-factory>
- </hibernate-configuration>
学生实体类Student.java
- package com.bjsxt.hibernate;
- public class Student {
- private int id;
- private String name;
- private int age;
- 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;
- }
- }
- <?xml version="1.0"?>
- <!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.bjsxt.hibernate.Student">
- <id name="id" />
- <property name="name" />
- <property name="age" />
- </class>
- </hibernate-mapping>
四、Hibernate的两种实体映射方式
在上面实例中已经讲到了一种实体映射方式,在hibernate.cfg.xml中 <mapping resource="com/bjsxt/hibernate/Student.hbm.xml"/> ,然后在Student.hbm.xml中指向实体类Student.java。
还有一种映射方式是直接采用annotation注释的方式,这样可以将hbm.xml文件省略:
下面,我们采用Teacher类来说明此种方式,首先要在hibernate.cfg.xml中添加<mapping class="com.bjsxt.hibernate.Teacher"/> 然后附上Teacher代码如下:
在类上加上@Entity ,再在主键ID上加上@Id ,测试类类似,不在赘述。
- package com.bjsxt.hibernate;
- import javax.persistence.Entity;
- import javax.persistence.Id;
- @Entity
- public class Teacher {
- private int id;
- private String name;
- private String title;
- @Id
- 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 getTitle() {
- return title;
- }
- public void setTitle(String title) {
- this.title = title;
- }
- }
最后附上附件中引用到的jar包清单
jar包名称
|
说明
|
antlr-2.7.6.jar
|
解析HQL
|
aspectjrt
|
AOP
|
aspectjweaver
|
AOP
|
cglib-nodep-2.1_3.jar
|
代理,二进制增强
|
common-annotations.jar
|
@Resource
|
commons-collections-3.1.jar
|
集合框架
|
dom4j-1.6.1.jar
|
解析xml
|
ejb3-persistence
|
@Entity
|
hibernate3.jar
|
|
hibernate-annotations
|
|
hibernate-common-annotations
|
|
javassist-3.9.0.GA.jar
|
hibernate
|
jta-1.1.jar
|
hibernate transaction
|
junit4.5
|
|
mysql-
|
|
slf4j-api-1.5.8.jar
|
hibernate-log
|
slf4j-nop-1.5.8.jar
|
|
转载于:https://blog.51cto.com/xuepiaoqiyue/822498