1:创建实体类

 package com.yinfu.entity;

 public class User {

     private int id;
private String username;
private String password;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
} }

User.Java

2:创建实体类与数据库表对应的配置文件:

 <?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属性:实体类全类名
table属性:数据库表名称,用hibernate不需要自己创建表,他可以根据配置文件自动生成数据库表
-->
<class name="com.yinfu.entity.User" table="t_user">
<!--
配置实体类ID与表中的ID进行对应
hibernate要求实体类属性有一个唯一值
hibernate要求表有作为唯一值得字段
-->
<!--id标签
name属性:实体类中的id名称
column属性:表字段中的id名称
-->
<id name="id" column="id">
<!-- 设置数据库表的增长策略
native:生成表id值就是主键自增长
-->
<generator class="native"></generator>
</id>
<!-- 配置其他属性和表的字段的对应
name属性:实体类中的属性名
column属性:表中的字段名
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>

User.hbm.xml

3:hibernate核心配置文件(1.数据库信息,2.hibernate信息,3.实体类与数据库映射的配置文件注入信息)

此配置文件文件名和位置是固定的:文件名:hibernate.cfg.xml 位置:要放在src文件夹下

 <?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>
<!-- 此配置文件的文件名和位置是固定的的
文件名:hibernate.cfg.xml
位置:要写在src文件中
-->
<session-factory>
<!-- 第一部分:配置数据库信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">song12345</property> <!-- 第二部分:配置hibernate信息(可有可无) -->
<!-- 输出底层的SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 对底曾语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate帮创建表,需要配置
update:如果有表就更新,没有表就创建
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置数据库的方言
识别不同数据库中的特有的语句和关键字
比如:分页查询
MySQL关键字是limit
oracle中的使用的是top-n分析中的rownum
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 指定线程管理方式,与本地线程进行绑定,实现单线程操作 -->
<property name="hibernate.current_session_context_class">thread</property> <!-- 第三部分:把映射文件放到核心配置文件中 -->
<mapping resource="com/yinfu/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration>

hibernate.cfg.xml

4:用Junit进行简单测试:

 package com.yinfu.test;

 import static org.junit.Assert.*;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.yinfu.entity.User;
import com.yinfu.utils.HibernateUtils; public class HibernateTest { @Test
public void test() {
//1.加载hibernate核心配置文件
//只会到src下去寻找hibernate的核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
//2.创建sessionFactory对象
//读取hibernate核心配置文件内容,根据configuration对象创建sessionFactory对象
//在这过程中,根据映射关系,在相应数据库中把表创建
SessionFactory sessionFactory = cfg.buildSessionFactory();
//3.根据sessionFactory得到session对象
//类似于jdbc中的connection链接
Session session = sessionFactory.openSession();
//4.开启事务
Transaction tx = session.beginTransaction();
//5.逻辑代码实现crud操作
//session中有:增加:save方法 修改:update 删除:delete方法 根据ID查询:get方法
User user = new User();
user.setUsername("李四");
user.setPassword("12345");
user.setAddress("韩国");
session.save(user);
//6.提交事务
tx.commit();
//7.释放资源
session.close();
sessionFactory.close(); }
}

test

4.1,将创建SessionFactory对象的代码提出来,放到static静态代码块中,当此类加载的时候只创建一个对象,并重复使用此对象,能够进行优化

首先创建Utils工具类:

 package com.yinfu.utils;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; //工具类
public class HibernateUtils { private final static Configuration cfg;
private final static SessionFactory sessionFactory; //用静态代码块来实现对象只在类加载的时候创建一次(静态代码块只执行一次)
static{
//创建configuration对象,
cfg = new Configuration();
cfg.configure();
//根据Configuration对象创建sessionFactory对象
sessionFactory = cfg.buildSessionFactory();
} //返回与本地线程绑定的session
public static Session getSession(){
return sessionFactory.getCurrentSession();
} //创建一个方法用于返回sessionFactory对象
public static SessionFactory getSessionFactory(){
return sessionFactory;
} }

HibernateUtils

然后创建测试类:

 package com.yinfu.test;

 import static org.junit.Assert.*;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test; import com.yinfu.entity.User;
import com.yinfu.utils.HibernateUtils; public class HibernateTest {
@Test
public void testStatic() {
//利用工具类得到与本地线程绑定的session
Session session = HibernateUtils.getSession();
//4.开启事务
Transaction tx = session.beginTransaction();
//5.逻辑代码
//增加方法:
//此user为瞬时态数据(user中没有id,与session无关)
User user = new User();
user.setUsername("赵六");
user.setPassword("12345");
user.setAddress("玛雅文明");
session.save(user); //根据ID查询:
//第一个参数:实体类的类对象。第二个参数:id值
//此user为持久态数据(有id,与session有关)
// User user = session.get(User.class, 1);
// System.out.println(user); //修改方法:
// User user = session.get(User.class, 1);
// user.setUsername("张三");
// session.update(user); //删除方法:
//第一种:
// User user = session.get(User.class, 1);
// session.delete(user);
//第二种:
// User user = new User();
// user.setId(2);
// session.delete(user); //6.提交事务
tx.commit();
//7.释放资源
session.close(); } }

test

由于在工具类中将session与当前线程进行了绑定,执行结果正确了,但是会有一个异常,这个异常是由于当session与本地线程进行绑定之后,session会随着线程的结束而自动关闭,不在需要手动进行session关闭,当还有session.close()方法的时候回报此异常。

数据的三种状态:

1:瞬时态数据(没有ID,与session无关):

User user = new User();
user.setUsername("赵六");
user.setPassword("12345");
user.setAddress("玛雅文明");

2:脱管状态:(有id,与session无关)

User user = new User();

user.setId(1);

3:持久态数据:(有id,与session有关)

User user = session.get(User.class, 1);

hibernate简单实现连接数据库,并实现数据的操作的更多相关文章

  1. 16~25.spring+hibernate简单实例 .连接数据库并进行增删改查

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

  2. 框架之 hibernate简单入门

    hibernate框架的搭建 Hibernate框架的概述 1. Hibernate框架的概述 * Hibernate称为 * Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JD ...

  3. Hibernate 一对多 保存和修改数据

    Student和Sclass表,Student外键cid是Sclass的cid create table sclass( cid ) primary key, cname ) )go create t ...

  4. 菜鸟学习Hibernate——简单的增、删、改、查操作

    上篇博客利用Hibernate搭建起一个简单的例子,把数据库的映射显示了出来在上一篇的博客基础上这篇博客讲述如何利用Hinbernate框架实现简单的数据库操作. 1.加入junit.jar 2.新建 ...

  5. jquery ajax json简单的分页,模拟数据,没有封装,只显示原理

    简单的分页,模拟数据,没有封装,显示原理,大家有兴趣可以自己封装,这里只是个原理过程,真正的分页也差不多是这个原理,只是请求数据不太一样,html部分: <!TOCTYPE HTML> & ...

  6. CoreData的简单使用(二)数据的增删改查,轻量级的版本迁移

    上一篇中我们已经使用CoreData创建了一个SQLite数据库 CoreData的简单使用(一)数据库的创建 现在对数据库进行数据的CRUD(增删改查) 1.Data Model 的设置 创建一个D ...

  7. 新秀学习Hibernate——简单的增加、删、更改、检查操作

    部分博客使用Hibernate单的样例,把数据库的映射显示了出来在上一篇的博客基础上这篇博客讲述怎样利用Hinbernate框架实现简单的数据库操作. 1.增加junit.jar 2.新建一个工具类H ...

  8. JAVA入门[19]-Hibernate简单示例

    一.Hibernate简介 在很多场景下,我们不需要使用JdbcTemplate直接操作SQL语句,这时候可以用ORM工具来节省数大量的的代码和开发时间.ORM工具能够把注意力从容易出错的SQL代码转 ...

  9. 简单的连接数据库的java程序模板

    简单的连接数据库的java程序,方便临时使用: import java.sql.*; import java.io.*; import java.sql.DriverManager; import j ...

随机推荐

  1. Linux查看日志三种命令(转载)

    第一种:查看实时变化的日志(比较吃内存) 最常用的: tail -f filename (默认最后10行,相当于增加参数 -n 10) Ctrl+c 是退出tail命令 其他情况: tail -n 2 ...

  2. OpenWRT解决因PPPOE丢包导致频繁掉线问题

    其关键在于这两个参数 lcp-echo-interval 1   #发送间隔秒 lcp-echo-failure 5    #5次未响应断开 因为OpenWRT默认的设置为1秒发送一次 5次没有响应就 ...

  3. 【APUE】线程与信号

    每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.进程中的信号是递送到单个线程的. 线程中pthread_sigmask函数类似与进程的sigprocmask函数,可以用来阻塞信号. ...

  4. JSONObjectWithData方法里options參数选择解释

    NSJSONReadingMutableContainers  Specifies that arrays and dictionaries are created as mutable object ...

  5. HDU 1031.Design T-Shirt【结构体二次排序】【8月21】

    Design T-Shirt Problem Description Soon after he decided to design a T-shirt for our Algorithm Board ...

  6. Android开发文档翻译之-Services

    Service是一种能长期在后台运行同一时候不须要与用户进行交互的应用组件.其它组件能够开启service,开启后service能够自行运行及时用户已经切换到其它的应用.此外,组件能够与service ...

  7. 【iOS系列】-iOS中内存管理

    iOS中创建对象的步骤: 1,分配内存空间,存储对象 2,初始化成员变量 3,返回对象的指针地址 第一:非ARC机制: 1,对象在创建完成的同时,内部会自动创建一个引用计数器,是系统用来判断是否回收对 ...

  8. Codeforces 794F. Leha and security system 线段树

    F. Leha and security system   Bankopolis, the city you already know, finally got a new bank opened! ...

  9. browser user agent

    乐视X501 UC浏览器1080x1920x32Mozilla/5.0 (Linux; U; Android 5.0.2; zh-CN; Letv X501 Build/DBXCNOP55013041 ...

  10. 生成 hibernate 映射文件和实体类

    创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤   创建数据库,创建 ...