hibernate 是一种ORM框架,是ORM框架中一个典范 ORM叫做对象关系映射
是面向对象语言和关系型数据库之间的映射关系
所以只有在面向对象语言或者关系型数据库没用的时候ORM才会消失

ORM为我们做什么

  减少乏味的代码
  更加面向对象的设计
  更好的性能
  更好的移植性

使用Hibernate  http://hibernate.org/ 

1. 加入Hibernate的jar包

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>4.2.0.Final</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.33</version>
</dependency>

2. 创建持久化类(pojo)

  就是以前的实体类

3. 创建映射文件(xxx.hbm.xml)

pojo->xxx.hbm.xml->table表示一个实体类于一张表的映射关系文件
在pojo包里新建User.hbm.xml文件,和类名相同

<?xml version="1.0" encoding="UTF-8"?>
<!-- 展开jar包有个hibernate-mapping-3.0.dtd,拷贝这几行dtd -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 根节点叫做hibernate-mapping,package表示User所在的包名
子节点的class,name属性写类名,package和name组成一个完全限定名
所以不写package的时候name属性要写完全限定名,table写表名---->
<hibernate-mapping package="com.kaishengit.pojo"> <class name="User" table="user">
<!-- pojo中的属性要对应表里面的列 -->
<!-- id这个节点是主键列,name写属性的名字,column
是表中列的名字,作为主键还要有生成策略
generator class="native"native表示自动增长-->
<id name="id" column="id">
<generator class="native"/>
</id>
<!-- 剩下普通列和属性的对应,当name和column相同的时候可以只
写name-->
<property name="username"/>
<property name="password" column="password"/> </class>
</hibernate-mapping>

4. 创建Hibernate配置文件(hibernate.cfg.xml)总配置文件
建在根目录下

    <?xml version="1.0" encoding="UTF-8"?>
<!-- 打开jar包中的hibernate-configuration-3.0.dtd,复制这几行dtd -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 这个session和http中的session没有关系 -->
<!--\hibernate-release-4.1.1.Final\hibernate-release-4.1.1.Final\project\etc的hibernate.properties -->
<session-factory>
<!-- 以hibernate.开头的可以省略hibernate. -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property> <!-- 方言(较好的移植性) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- c3p0数据源(以前用的dbcp)
需要pom中导入这两个jar包
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.2.0.Final</version>
</dependency>-->
<property name="c3p0.max_size">10</property>
<property name="c3p0.min_size">2</property>
<property name="c3p0.timeout">5000</property>
<property name="c3p0.max_statements">100</property>
<property name="c3p0.idle_test_period">3000</property>
<property name="c3p0.acquire_increment">2</property>
<property name="c3p0.validate">false</property> <!-- 执行的时候能看到sql语言 -->
<property name="show_sql">true</property>
<!-- 把session放到当前线程里 比如放在main方法中就是放在主线程里,使用的
时候就可以获得session.-->
<property name="current_session_context_class">thread</property>
<!-- 表明映射文件的位置 -->
<mapping resource="com/kaishengit/pojo/User.hbm.xml"/> </session-factory> </hibernate-configuration>

5. 运行

Hibernate对pojo的要求:
1属性要有对应的get和set方法
2要有无参数的默认构造方法
3 不要使用final进行修饰

    //configure()才会去读取hibernate,cfg.xml
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry= new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sessionFactory = cfg.buildSessionFactory(serviceRegistry);
/* 最终是为了创建sessionfactory,这是4.0 3.0的hibernate只需要
Configuration cfg = new Configuration().configure();
SessionFactory sessionFactory = cfg.buildSessionFactory();*/
Session session = sessionFactory.getCurrentSession(); /* 增删改查都在事务中完成 session.beginTransaction();
session.getTransaction().commit();或者
session.getTransaction().rollback();*/
session.beginTransaction(); User user = new User();
user.setUsername("jack");
user.setPassword("123"); session.save(user); session.getTransaction().commit();
/*或者Transaction tran = session.beginTransaction();
tran.commit();*/

应该只有一个sessionfactory而且读取配置文件
Configuration cfg = new Configuration().configure();应该也只读一次
所以写成单例模式

public class HibernateUtil {
// 静态只读一次
private static SessionFactory factory = buildSessionFactory(); private static SessionFactory buildSessionFactory() {
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry= new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
return cfg.buildSessionFactory(serviceRegistry);
}
//提供获取sessionfactory方法
public static SessionFactory getSessionFactory() {
return factory;
}
// 提供获取session的方法
public static Session getSession() {
return getSessionFactory().getCurrentSession();
} }

test中

public class Test {

    public static void main(String[] args) {
//添加
User user = new User();
user.setUsername("tom");
user.setPassword("000000"); Session session = HibernateUtil.getSession();
session.beginTransaction();
// 保存要放在事务中
session.save(user);
session.getTransaction().commit(); // 查询
Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 ,根据主键查询
User user = (User) session.get(User.class, 1);
System.out.println(user.getUsername());
session.getTransaction().commit(); // 删除 Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 ,查出来才能删,会输出两条sql语句
User user = (User) session.get(User.class, 2);
session.delete(user);
session.getTransaction().commit(); //修改 Session session = HibernateUtil.getSession();
session.beginTransaction();
// 要放在事务中 查出来才能修改
User user = (User) session.get(User.class, 1);
//只有当set的值跟以前不一样才回去执行update修改
user.setUsername("jack");
session.getTransaction().commit(); // 查询所有
Session session = HibernateUtil.getSession();
String hql = "from User";// User是类名,不是表名,要切记
Query query = session.createQuery(hql);
List<User> userList = query.list();
for(User user : userList) {
System.out.println(user.getUsername() + " : " + user.getPassword());
} }
}

hibernate的配置 1的更多相关文章

  1. Hibernate 基础配置及常用功能(一)

    本来是想等全部框架测试完以后再统一发布的,但是随着测试的一点点增加感觉把需要叙述的东西放在一起终将会是一场灾难.所以还是打算分成几章来描述,其中还包括一些有待解决的问题.短期很难腾出时间来仔细阅读Hi ...

  2. 。。。Hibernate注解配置的注意事项。。。

    今天本来打算录视频的,突然遇到一个拦路虎,Hibernate注解配置,有一个注意点:要么都在属性上面注解配置,要么都在getXX()方法上面用注解配置,要不然就会报错: Caused by: org. ...

  3. 【转】Spring+Hibernate+EHcache配置(一)

    大量数据流动是web应用性能问题常见的原因,而缓存被广泛的用于优化数据库应用.cache被设计为通过保存从数据库里load的数据来减少应用和数据库之间的数据流动.数据库访问只有当检索的数据不在cach ...

  4. Hibernate缓存配置

    一级缓存 Hibernate的一级缓存是由Session提供的,因此它只存在于Session的生命周期中,当程序调用save(),update(),saveorupdate()等方法 及调用查询接口l ...

  5. Hibernate——hibernate的配置测试

    Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...

  6. Hibernate学习笔记2.1(Hibernate基础配置)

    Hibernate基础配置 1.<property name="hbm2ddl.auto">update</property> 在SessionFactor ...

  7. t3用户-角色-权限hibernate经典配置

    用户-角色-权限hibernate经典配置. 既然有人问起,我就写下说明吧.在文章中间的配置文件那里.权当回忆一下,也帮助更多人.这是以前学校时写的,没有注释.都是贴的代码笔记.看到的莫要见怪.欢迎学 ...

  8. hibernate核心配置

    # hibernate核心配置 注意:  - hibernate.cfg.xml默认放在src目录下(这样可以自动加载该文件) - 必须配置的参数:   * 数据库的四大参数和方言  - 可选配置的参 ...

  9. Hibernate常见配置详细解释

      <!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?xml version='1. ...

  10. (转)Hibernate的配置详解

    http://blog.csdn.net/yerenyuan_pku/article/details/65041077 在<Hibernate快速入门>一文中,我有讲到Hibernate的 ...

随机推荐

  1. openssl命令行Base64编解码

    openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...

  2. #ifdef _cplusplus

    时常在cpp的代码之中看到这样的代码: #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #en ...

  3. 日常之学习CSS3变形和js函数指针

    1,transform变形属性,包括rotate(xxdeg)旋转,translate(x轴px,y轴px)移动,scale(0.5,2)变形(x轴缩小0.5倍,y轴放大2倍),skew(x轴deg, ...

  4. Webform之(简单投票)练习

    创建数据库: CREATE table DiaoYanTiMu ( Ids int primary key ,--题目代号 Title varchar() not null ,--要调查的题目 Sel ...

  5. 浅谈Struts2(三)

    一.Struts2收集client的参数 核心思路: <form method="post" action="XXXX"> <input ty ...

  6. JQuery中回车键登陆

    //点击回车键 //王东升/2015/3/11 document.onkeydown = function (event) { var e = event ? event : (window.even ...

  7. Git使用记录(二)

    一)git init 初始化仓库 要使用Git进行版本管理,必须先初始化仓库,请先建立一个目录并初始化仓库 mkdir gittest cd gittest git init 初始化成功以后会在当前目 ...

  8. 在GridView中实现全选反选的例子

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="GridView控件.asp ...

  9. (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示

    原文 (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示 (本系列文章由柠檬的(lc_mtt)原创,转载请注明出处,谢谢-) 接上一节:(C#)Windows She ...

  10. JAVA CAS单点登录(SSO)

    一.教程前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Auth ...