Hibernate(orm框架)(开放源代码的对象关系映射框架)
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

Orm:Object relational mapping,对象映射关系,用于对象与关系型数据库关联映射框架。

Demo1:纯java project

搭建步骤:

  第一步:创建数据库表t_user,创建java对象USer.java

  第二步:添加jar包

  第三步:创建映射文件

  第四步:创建hibernate核心配置文件hibernate.cfg.xml

  第五步:测试

以下是详细步骤演示:

项目结构

  第一步:创建数据库表t_user,创建java对象USer.java

#数据库表t_user
CREATE DATABASE hibernate_demo CHARSET 'UTF8'; CREATE TABLE t_use(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(20) NOT NULL
);
//创建java对象User.java
public class User {
private Integer id;
private String uname;
//getter和setter省略
......
}

  第二步:添加jar包

  第三步:创建映射文件user.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--package:java对象包路径 -->
<hibernate-mapping package="com.jonychen.model">
<!-- 配置对象与table的关系 -->
<class name="User" table="t_user">
<!-- 指定主键name:表示java对象属性名 column -->
<id name="id" column="id" type="integer">
<!--配置主键自增策略 -->
<generator class="native" />
</id>
<!--配置其他属性与字段关联关系 -->
<property name="uname" column="uname" type="string" />
</class>
</hibernate-mapping>

  第四步: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">
<hibernate-configuration>
<session-factory>
<!--1、方言:指定数据库类型 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--2、配置数据源 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_demo</property>
<property name="connection.username">root</property>
<property name="connection.password">mysql</property>
<!--打印sql -->
<property name="show_sql">true</property>
<!--3、加载映射文件 -->
<mapping resource="com/jonychen/model/user.hbm.xml" />
</session-factory>
</hibernate-configuration>

第五步,测试

 package com.jonychen.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry; import com.jonychen.model.User; public class HibernateTest { public static void main(String[] args) {
// TODO Auto-generated method stub
//1、加载配置文件
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml"); //2、创建sessionFactory
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
SessionFactory sessionFactory=cfg.buildSessionFactory(serviceRegistry); //3、打开全新session
Session session=sessionFactory.openSession(); try {
//事务
Transaction ts=session.beginTransaction(); User user =new User();
user.setUname("jonychen");
//添加数据
session.save(user);
//提交事务
ts.commit();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//关闭连接
if(session!=null) {
session.close();
}
if(sessionFactory!=null) {
sessionFactory.close();
} }
}
}

在Eclipse里添加插件开发Hibernate

Demo2 :Maven版本hibernate

项目结构:

maven项目中除了以上两个文件有变化,其他跟之前搭建的java project一样,以下是有变化的两段代码。

pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jonychen</groupId>
<artifactId>hibernate-demo-maven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!--hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.11.Final</version>
</dependency>
<!--MySQL数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!--junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 指定jdk版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

HibernateTest.java

 package com.jonychen.test;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.jonychen.model.User; public class HibernateTest { SessionFactory sessionFactory=null;
Session session=null; @Before
public void init() {
//1、加载配置文件
Configuration cfg=new Configuration();
cfg.configure("hibernate.cfg.xml"); //2、创建sessionFactory
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
SessionFactory sessionFactory=cfg.buildSessionFactory(serviceRegistry); //3、打开全新session
session=sessionFactory.openSession();
} @Test
public void testSave() {
//事务
Transaction ts=session.beginTransaction(); User user =new User();
user.setUname("jony.k.chen");
//添加数据
session.save(user);
//提交事务
ts.commit();
}
@After
public void destory() {
//关闭连接
if(session!=null) {
session.close();
}
if(sessionFactory!=null) {
sessionFactory.close();
}
}
}

友情提醒:

测试的时候如果报错org.hibernate.MappingException: Unknown entity,说明是版本问题,在pom.xml中调整版本号即可,亲测有效!

Hibernate从入门到上手(纯java project、Maven版本hibernate)的更多相关文章

  1. hibernate设置二级缓存时报错java.lang.NoClassDefFoundError: org/hibernate/engine/jndi/JndiNameException

    错误提示大概意思是,没有类定义错误,就是找不到要使用的hibernate二级缓存管理引擎类.我在这用的是ehcache二级轻量级缓存,报错原因可能是导入的jar包版本和使用的hibernate框架核心 ...

  2. Hibernate报错:Caused by: java.sql.SQLException: Field 'ID' doesn't have a default value

    问题一: 报错如下: org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assig ...

  3. hibernate 级联删除报更新失败的问题(org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update)

    首先hibernate级联删除的前提是,首先需要在映射文件中配置,配置多表之间的关联关系: 下面以部门表(Dept)和员工表(Emp)为例: 1.在Emp.hbm.xml映射文件中配置many-to- ...

  4. java三大框架之一hibernate使用入门

    综述:Hibernate的作用就是让实体类与数据库映射,使数据持久化,用于替代JDBC,使我们不致于写那么多sql语句代码. 1. 首先在官网www.hibernate.org下载hibernate包 ...

  5. Hibernate框架的基本搭建(一个小的java project的测试向数据库中插入和查询数据的功能)

    Hibernate介绍:Hibernate是一种“对象-关系型数据映射组件”,它使用映射文件将对象(object)与关系型数据(Relational)相关联,在Hibernate中映射文件通常以&qu ...

  6. Hibernate的入门使用

    数据在各个层次之间流转,在流转过程中会发生数据类型转换等一系列的交互问题.java与html的交互解决方案是struts2提供的OGNL(对象导航图语言),而java与数据库之间的技术解决方案是ORM ...

  7. JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结

    我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...

  8. Struts+Spring+Hibernate整合入门详解

    Java 5.0 Struts 2.0.9 Spring 2.0.6 Hibernate 3.2.4 作者:  Liu Liu 转载请注明出处 基本概念和典型实用例子. 一.基本概念       St ...

  9. Hibernate基础入门

    Hibernate是一个开放源代码的对象关系映射框架,它将POJO与数据库表之间建立映射关系.是全自动的ORM框架,可以自动生成SQL语句并自动执行.它对JDBC进行了非常轻量级的封装,使程序员可以随 ...

随机推荐

  1. MD5加密和RSA加密

    1.MD5加密  MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用. MD5的功能:     ①.输入任意长 ...

  2. CodeForces 738E Subordinates

    排序,构造. 相当于告诉我们一棵树$n$个节点,每个节点在哪一层,至少需要移动多少个节点,才能让这些节点变成一棵树. 按照层次排个序移动一下就可以了,优先选择那些不是$s$但是层次是$0$的节点,如果 ...

  3. Flask实战第58天:发布帖子功能完成

    发布帖子后台逻辑完成 首先给帖子设计个模型,编辑apps.models.py class PostModel(db.Model): __tablename__ = 'post' id = db.Col ...

  4. linux的bash和shell关系

    shell通俗理解:把用户输入的命令翻译给操作系统. shell 是一个交互性命令解释器.shell独立于操作系统,这种设计让用户可以灵活选择适合自己的shell.shell让你在命令行键入命令,经过 ...

  5. hdu 5963 朋友(2016ccpc 合肥站 C题)

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  6. [Codeforces-div.1 24D] Broken robots

    [Codeforces-div.1 24D] Broken robots 试题分析 显然设\(f_{i,j}\)为到\((i,j)\)的期望步数,将转移表达式列出来. 首先自己跟自己的项消掉. 然后规 ...

  7. BZOJ 2073 [POI2004]PRZ(状压DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2073 [题目大意] 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只 ...

  8. 【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon

    题意:给你一个凸多边形,和多次询问,每次询问给你一条直线,问你这条直线与凸包上的顶点的最近距离是多少. 记当前询问的直线的斜率为K, 先找到与这条直线距离最远的两个点: 就把凸包所有的边当做有向直线进 ...

  9. vm克隆linux系统 后连接网络

    第一步 vi /etc/udev/rules.d/70-persistent-net.rules     将之前的eth0注释掉,    将eth1改为eth0 并复制mac地址 第二部 vi /et ...

  10. AIM Tech Round (Div. 1) D. Birthday 数学 暴力

    D. Birthday 题目连接: http://www.codeforces.com/contest/623/problem/D Description A MIPT student named M ...