以下所有内容保存在  E:\JavaWebSrc\firstHibernate  目录中,项目名称为firstHibernate,使用IDEA打开,项目所需jar包在   F:\常用综合\常用jar包\hibernate\hibernate-release-4.3.10.Final

目录下,加数据库连接包,数据库名称为:hibernate

1、hibernate.cfg.xml 

  配置文件的顺序是有关系的,不能顺意更改

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hbm2ddl.auto">update</property>
<property name="format_sql">true</property>
//    相关的类需要在这里添加配置
<mapping resource="domain/UserEntity.hbm.xml"/>
<mapping class="domain.UserEntity"/>
</session-factory>
</hibernate-configuration>

2:类的映射文件 XXX.cfg.xml

  既可以根据类的映射文件生成数据库,也可以根据数据库中的表生成持久化类

  XXX.cfg.xml需要放在持久化类同一级目录中

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <class name="domain.UserEntity" table="user" schema="hibernate">
<id name="id" column="id" type="int" >
<!-- 主键生成策略,尽量交个hibernate管理 -->
<generator class="native"/>
</id>
<property name="username" column="username" type="java.lang.String"/>
<property name="password" column="password" type="java.lang.String"/>
</class>
</hibernate-mapping>

3:增加数据

  save() 和persist()两者都会保存数据,但是 sava方法会缓存对象,persist『坚持』不会缓存对象 

public class test1 {
SessionFactory sessionFactory;
Session session;
@Before
public void before(){
Configuration configuration = new Configuration();
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
session = sessionFactory.openSession();
} /**
* 测试保存数据 save 和persist 都是保存
*/
@Test
public void testSave(){
Transaction transaction = session.beginTransaction();
UserEntity userEntity = new UserEntity();
userEntity.setUsername("余文辉");
userEntity.setPassword("");
// session.save(userEntity);
session.persist(userEntity);
transaction.commit();
} @After
public void after(){
session.close();
sessionFactory.close();
}
}

4:加载数据  

测试加载数据 get方法和load方法
get获取时会立即向数据库发出sql语句,并拿到持久化对象
load 方法在调用后会获得一个代理类对象(为UserEntity的一个子类),该对象只保存了持久化类的id(从而印证持久化类必须要加一个id作为主键),直到使用该对象的非主键属性时,才会向数据库发出查询语句
getclass()方法 不会使用到该对象
**
* 测试加载数据 get方法和load方法
* get获取时会立即向数据库发出sql语句,并拿到持久化对象
* load 方法在调用后悔获得一个代理类对象,该对象只保存了持久化类的id(印证持久化类必须要加一个id作为主键),直到使用该对象的非主键属性时,才会向数据库发出生气了语句
* getclass()方法 不会使用到该对象
*/
@Test
public void testGet(){
Transaction transaction = session.beginTransaction();
UserEntity userEntity = (UserEntity) session.get(UserEntity.class,);
System.out.println(userEntity.getClass()); /* class domain.UserEntity 这里是真正的UserEntity对象*/
/* UserEntity user = (UserEntity) session.load(UserEntity.class, 1);
System.out.println(user.getClass()); *//* class domain.UserEntity_$$_jvst85e_0 这里是一个代理对象,该代理对象只保存了持久化类的id*/
}

5:修改数据 

/**
* 测试更新方法
* 先查询到这个对象,再对这个对象进行更改
*/
@Test
public void testUpdate(){
Transaction transaction = session.beginTransaction();
UserEntity user = (UserEntity) session.load(UserEntity.class, );
user.setUsername("余小四");
session.update(user);
transaction.commit();
}

6:删除数据  

/**
*测试删除方法
* 先查询到这个对象,再对这个对象进行删除
*/
@Test
public void testDelete(){
Transaction transaction = session.beginTransaction();
UserEntity user = (UserEntity) session.load(UserEntity.class,);
session.delete(user);
transaction.commit();
}

7:基本的HQL查询

  获取单个对象

   /**
* 获取单个对象
*/
@Test
public void testHQL(){
String hql = "FROM UserEntity WHERE id = ? AND username = ?";
Query query = session.createQuery(hql);
// 占位参数从 0 开始,不是从 1 开始
query.setParameter(0,1).setParameter(1,"余小四");
// 获取集合中的 0 下标的对象
UserEntity user = (UserEntity) query.list().get(0);
System.out.println(user);
}

  获取多个对象(集合)

 /**
* 查询多个对象,获得一个List集合中
*/
@Test
public void testHQLList(){
// FROM 后面不是表名,而是持久化类名
String hql = "FROM UserEntity ";
Query query = session.createQuery(hql);
List<UserEntity> users = query.list();
for (UserEntity user : users){
System.out.println(user.toString());
}
}

hibernate 基本配置文件及CRDU的操作和基本的HQL查询的更多相关文章

  1. Java - 使用hibernate配置文件 + JPA annotation注解操作数据库

    本程序运行环境:IDEA. 实际上我对hiberbate与注解的关系还不是太清晰.据我所知注解都是Java JPA的,那么我的理解是:hibernate就应该只是通过这些JPA标识及hibernate ...

  2. 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】

    一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...

  3. 2.一起来学hibernate之配置文件1与持久化对象

    学框架,配置都是不可少的,有了配置,框架才知道我们想做什么,才知道如何去执行我们需要的操作! hibernate的配置文件,总体来说分为两个部分: 1.主配置文件hibernate.cfg.xml文件 ...

  4. Hibernate常用配置文件详解

    本文转载自:http://blog.csdn.net/csh624366188/article/details/7578939 初学hibernate的童鞋,刚开应该都有这种感觉,hibernate的 ...

  5. Hibernate的配置文件解析

    配置mybatis.xml或hibernate.cfg.xml报错: <property name="connection.url">jdbc:mysql://loca ...

  6. Hibernate之深入Hibernate的配置文件

    1.创建Configuration类的对象 Configuration类的对象代表了应用程序到SQL数据库的映射配置.Configuration类的实例对象,提供一个buildSessionFacto ...

  7. Hibernate之配置文件

    可持久化对象有以下三种状态: 临时状态(Transient):对象在保存进数据库之前为临时状态,这时数据库中没有该对象的信息,如果没有持久化,程序退出后临时状态的对象信息将会丢失.随时可能被垃圾回收器 ...

  8. Hibernate之多对多表,操作实例

    多表操作之多对多关系简介 思路就是: 在数据库底层通过添加中间表来指定关联关系. 在双方的实体中添加一个保存对方的集合 在双方的配置文件中使用set标签和many-to-many标签来进行关联关系的配 ...

  9. hibernate框架配置文件详解

    1 orm元数据配置文件(映射文件) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hib ...

随机推荐

  1. js一些重点知识总结(二)

    第一部分:数据类型转换 1) 数据类型的种类: 数值型number.布尔型(true(1) /false (0)).字符串型(String).空类型(null)(object) 2) 数据类型自动转换 ...

  2. 支付宝分库分表中间件--zdal简介

    中间件, 如果仅仅作为一名用户的话, 主要关注一下如何使用即可, 大多数情况下也就是配置. 下面简单的介绍一下支付宝的分库分表中间件--->zdal在web项目中的配置. 1, 在网上查阅相关资 ...

  3. ps-ef|grep-vgrep|grepsep|awk'{print"kill-9"$2}'|sh 这个表达式到底是什么意思啊?

    最佳答案   kill 掉sep这个程序ps -ef | 获取当前服务器所有进程grep -v grep 相当于grep自己吧自己过滤掉,就是不显示grepgrep seq 过滤出seqawk 截取 ...

  4. 13. leetcode 453. Minimum Moves to Equal Array Elements

    Given a non-empty integer array of size n, find the minimum number of moves required to make all arr ...

  5. mysql控制台出现“unknown column 'password' in 'field list'问题

    今天在windows系统上使用MySQL命令时,出现下面的"unknown column 'password' in 'field list'问题 解决办法如下,使用authenticati ...

  6. Restful接口调用方法超详细总结

    由于在实际项目中碰到的restful服务,参数都以json为准.这里我获取的接口和传入的参数都是json字符串类型.发布restful服务可参照文章http://www.cnblogs.com/jav ...

  7. Open-Falcon第三步安装Agent (小米开源互联网企业级监控系统)

    安装Agent 每台机器上,都需要部署agent,agent会自动采集预先定义的各种采集项,每隔60秒,push到transfer. cd $WORKSPACE/agent/ mv cfg.examp ...

  8. python--DenyHttp项目(1)--GUI:tkinter☞ module 'tkinter' has no attribute 'messagebox'

    AttributeError: module 'tkinter' has no attribute 'messagebox' improt tkinter from tkinter import * ...

  9. ecshop中的些assign_dynamic(’')

    很多做电子商务站的朋友都问我,在ecshop中,里面有个 assign_dynamic('index');这个到底是什么作用来的,这个其实是ecshop中的模板技术,动态处理一些局部信息更新而不被缓存 ...

  10. Loadrunner错误 -27727: 下载资源时步骤下载超时 (120 seconds) 已过期

    由于压力大了,下载资源所用时间就长了,可以设置加大超时时间 运行时设置 Internet 协议--首选项--高级--选项 --General--步骤下载超时(秒) 把这个值从120改为更大,如300, ...