Hibernate基本构建

===========================属性文件的配置================================
<?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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<!-- 重点:学会hibernate的属性的配置(连接数据库) -->
<hibernate-configuration>

<session-factory>
  <!-- 数据库方言 -->
  <property name="dialect">
   org.hibernate.dialect.MySQLDialect
  </property>
  <!-- 路径 -->
  <property name="connection.url">
   jdbc:mysql://127.0.0.1:3309/hibernatetest
  </property>
  <!-- 用户名 -->
  <property name="connection.username">root</property>
  <!-- 密码 -->
  <property name="connection.password">root</property>
  <!-- 驱动 -->
  <property name="connection.driver_class">
   com.mysql.jdbc.Driver
  </property>
  <!-- myeclipse中的数据库连接名 -->
  <property name="myeclipse.connection.profile">fengke</property>
  <!-- 显示数据查询语句 -->
  <property name="show_sql">true</property>
  <!-- 匹配的持久化类路径 -->
  <mapping resource="fengke/vo/Login.hbm.xml" />
 </session-factory>

</hibernate-configuration>
=====================================================================
我是用的是myeclipse,因此反向工程自动生成实体类
============================JUnit4 测试==========================================
package test;

import static org.junit.Assert.*;
import java.sql.Time;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
/**
 * Hibernate测试
 * @author 锋客
 * 注意:
 *   1、对于事务的理解:
 *       在本例中如果不开启事务,做以一下循环
 *      int i = 0;
 *  while (i < 3) {
 *   Login login = new Login("fengke", "123456");
 *   session.save(login);
 *   i++;
 *  }
 *  String hql = "from Login";
 *  Query query = session.createQuery(hql);
 *  List<Login> list = query.list();
 *  for (Login q : list) {
 *   System.out.println(q.getId());
 *  }
 *   结果:数据库中不会有数据存入,但循环输出可以实现。
 *   结论:事务就像是先将数据临时存入到数据库中,可以进行任何操作,但是当你不提交事务时,
 *       程序运行结束,会清空操作的数据,还原到原本的数据库,但是数据库会记录这些操作,因为
 *       id主键的变化,并没有从1开始,而是从上次事务操作数据库最后一条数据的id为标准。
 *      
 *
 */
public class HibernateTest {
 static Session session = null;
 static Transaction transaction = null;

@BeforeClass
 public static void setUpBeforeClass() throws Exception {
  
 }

@AfterClass
 public static void tearDownAfterClass() throws Exception {
  
 }

@Before
 public void setUp() throws Exception {
  // 配置hibernate环境
    System.out.println("开始配置Hibernate的环境");
    try {
     // Configuration config = new Configuration().configure();
     // SessionFactory sessionFactory = config.buildSessionFactory();
     session = HibernateSessionFactory.getSession();
     //使用beginTransaction()开启事务
     transaction = session.beginTransaction();
    } catch (Exception e) {
     e.printStackTrace();
    }

}

@After
 public void tearDown() throws Exception {
  // 关闭session
    System.out.println("关闭session");
    try {
     transaction.commit();
     session.close();
    } catch (Exception e) {
     e.printStackTrace();
    }
 }
   
 
 /*
  * 测试是否Hibernate配置成功
  */
 @Test
 public void test() {
  int i = 0;
  while (i < 3) {
   Login login = new Login("fengke", "123456");
   session.save(login);
   i++;
  }
  String hql = "from Login";
  Query query = session.createQuery(hql);
  List<Login> list = query.list();
  for (Login q : list) {
   System.out.println(q.getId());
  }

}
 
 
}
=================================更换数据库(更换另一个属性文件)==================================
package fengke.dao;

import java.util.List;

import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import fengke.util.HibernateSessionFactory;
import fengke.vo.Login;
import fengke.vo1.User;

public class Dao {
 
 public static void main(String[] args) {
  Session session = HibernateSessionFactory.getSession();
  Transaction tran=session.beginTransaction();
  int i=0;
  while (i<3) {
   Login login=new Login("fengke", "123456");
   session.save(login);
   i++;
  }
  String hql="from Login";
   Query query = session.createQuery(hql);
  List<Login> list = query.list();
  for(Login q:list){
   System.out.println("aaa");
  }
  tran.commit();//可以测试事务的特性
  session.close();
  System.out.println("******************更换数据库********************");
  exchangeDB();
    
 }
   //更换数据库
 private static void exchangeDB() {
  //设置配置文件(链接数据库的文件)
  //注意:最好实体类的名字不要重复,否则
  /*1:比较简单的办法,更改其中一个类名。
  * 2:第二种解决办法,将类的映射文件,
  * <hibernate-mapping>结点后加上auto-import="false",默认为true,
  * 即变成<hibernate-mapping auto-import="false">,但是这样改了以后,千万要注意,
  * 在写HQL语句时候,比如"from cn.com.test01.TUser4",一定要加上完整包名,
  * 因为你设置了auto-import="false".
  */
  HibernateSessionFactory.setConfigFile("/hibernatefeng.cfg.xml");
  Session se = HibernateSessionFactory.getSession();
  Transaction tran=se.beginTransaction();
  int i=0;
  while (i<3) {
   User login=new User("root", "root");
   se.save(login);
   i++;
  }
  tran.commit();
  se.close();
 }

}

时间: 2024-09-29 20:20:25

Hibernate基本构建的相关文章

011 Hibernate反向工程构建实体和hbm文件 - bos

package com.hao.bos.entity;// Generated 2017-8-15 16:30:28 by Hibernate Tools 4.0.0 import java.util.HashSet;import java.util.Set; /** * 定区 */public class Decidedzone implements java.io.Serializable { private static final long serialVersionUID = 1L;

《如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件》

问题的提出我常常在思考一个问题,我们如何能设计出高水平.高质量的软件出来.怎样是高水平.高质量的软件?它应当是易于维护.易于适应变更.可重用性好的一个系统.如何做到这一点呢?答案当然是"低耦合.高内聚"了.低耦合就是软件在构造的时候,各个模块.各个功能.各个类都不会过度依赖于它周围的环境.只有这样,才能使我们的模块(功能.类)在周围发生变更时不受影响,做到易于维护和易于适应变更.正因为如此,也使它更易于重用到其它功能类似的环境中,提高了重用性.高内聚则使软件中的各个模块(功能.类)能够

《Beginning Hibernate-For Hibernate 5, 4th Edition》(01_导读介绍)

<Beginning Hibernate-For Hibernate 5, 4th Edition> 这是一本介绍Hibernate5的图书,Hibernate 5是Hibernate框架的最新版本,这是目前市面上唯一一本介绍Hibernate5特性的图书,图书的链接https://www.amazon.cn/%E5%9B%BE%E4%B9%A6/dp/1484223187/ref=sr_1_1?ie=UTF8&qid=1491804196&sr=8-1&keyword

Spring+Struts+Hibernate 简介(转)

http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一.        Struts 1.定义 它是使用 servlet 和 JavaServer Pages 技术的一种 Model-View-Controller 实现, 可帮助您控制Web 项目中的变化并提高专业化水平.“模型-视图-控制 器”(MVC) 就是用来帮助您控制变化的一种设计模式.MVC 减弱了业务逻辑接

使用struts+spring+hibernate组装web应用

这篇文章将讨论怎样组合几个着名的框架去做到松耦合的目的,怎样建立你的构架,怎样让你的各个应用层保持一致.富于挑战的是:组合这些框架使得每一层都以一种松耦合的方式彼此沟通,而与底层的技术无关.这篇文章将使用3种流行的开源框架来讨论组合框架的策略 其实,就算用Java建造一个不是很烦琐的web应用程序,也不是件轻松的事情.当为一个应用程序建造一个构架时有许多事情需要考虑.从高层来说,开发者需要考虑:怎样建立用户接口?在哪里处理业务逻辑?和怎样持久化应用数据.这三层每一层都有它们各自的问题需要回答.

数据持久层框架iBatis, Hibernate 与 JPA 比较

在本文中我们介绍并比较两种最流行的开源持久框架:iBATIS和Hibernate,我们还会讨论到Java Persistence API(JPA).我们介绍每种解决方案并讨论其所规定的品质,以及在广泛的应用场景中其各自的长处和缺点.然后我们会基于诸如性能.移植性.复杂性以及对数据模型改变的适应性等因素来比较iBATIS.Hibernate和JPA. 如果你是一个刚起步的Java程序员,新接触持久性概念的话,那么就把阅读此文当作是接受一次这一主题以及大部分流行的开源持久性解决方案的启蒙.如果你对这

spring4整合hibernate5以及出现的问题解决办法

每一次的学习,都是一小步一小步的进行的,学习语言,重要的是能把hello world写出来 以及在学习过程中出现的问题能够及时的记录并总结 spring目前最新的版本是4.3,而hibernate是5.2 最新版本的学习是要花费很大的勇气进行的 首先是互联网上几乎没有什么资料可供参考 其次,这两个框架在一些业务逻辑的处理方法上,和之前的版本有很大的不同 首先是hibernate,构建sessionfactory不再是3.5以前版本的老办法了 下面是我的获得sessionfactory方法 pub

SSH框架使用中存在的诡异异常

背景 相信大多数人目前都在使用Spring + Struts2/SpringMVC + Hibernate来构建项目的整体架构,但是在使用中经藏会遇到一些诡异的问题,不知道如果解决,今天我遇到了一个非常奇怪的问题,那就是连接数据库提示java.sql.SQLException: ORA-01017: invalid username/password; logon denied,这句话的中文意思就是说我的密码或者用户名有问题,但是我单独用sqlplus登陆,还是使用配置文件里面的密码,此时又能够

Java 简单登录MVC

构建一个简单的基于MVC模式的JavaWeb 零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失败过,所以内心一直都有点抵触,昨天是一室友的生日,也快过年,也是想和他们一起好好的玩一回,就放下一切去了,很久都没去吼歌了,嗓子现在都感觉哑哑的,今天一天仿佛没有干什么,有些不安,于是回来后把以前学习MVC时笔记写下来!MVC设计模式是目前使用得比较多的