hibernate 是一个开放源码的对象映射框架,对JDBC进行了轻量级的封装。
ORM object Relation Mapping 对象关系映射。用于实现面向对象编程语言里不同类型系统数据之间的转换。
CRM 客户关系管理。
hibernate 优势:
Hibernate 对JDBC访问数据库的代码进行了轻量级的封装,简化了DAO层 的重复代码,减少内存小号,提高性能。
Hibernate 基于JDBC的持久化框架支持多种数据库 一对一和一对多 多对多 各种复杂关系。
可扩展性强。
Hibernate 要明确 操作实体类就相当于操作 数据库。
hibernate 框架入门:
1 导入jar包
2 创建数据库 和实体类。提供set/get,tostring方法。
3 编写映射配置文件(xml)
导入约束
<!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"
PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN">
<hibernate-configuration> <!-- 数据库的连接 --> <session-factory> <!-- session对象:连接数据库 操作数据库 --> <!-- 连接数据库 --> <!-- 数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 驱动 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- url --> <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/crm_hibernate?characterEncoding=UTF-8</property> <!-- 用户名 --> <property name="hibernate.connection.username">root</property> <!-- 密码 --> <property name="hibernate.connection.password">root</property> <!-- 显示执行的SQL语句 把你的SQL语句以一行的行输出到控制台 --> <property name="hibernate.show_sql">true</property> <!-- 格式化SQL语句 格式化后进行多行展示 --> <property name="hibernate.format_sql">true</property> <!-- 自动管理数据库表结构 --> <property name="hibernate.hbm2ddl.auto">update</property> <!-- 配置c3p0 --> <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> <!-- 通知session对象现在有多个类与表进行映射 --> <mapping resource="实体类对应的hbm.xml"/> </session-factory> </hibernate-configuration>
HIbernateUtils 封装了
public class HibernateUtils { // Hibernate配置文件读取类 private static Configuration conf; // session工厂类 private static SessionFactory factory; private static ThreadLocal<Session> sessionTL = new ThreadLocal<Session>(); static{ conf = new Configuration(); conf.configure(); factory = conf.buildSessionFactory(); } public static Session getSession(){ // 创建方法返回值 Session session = null; // 1. 放到线程里 2.C3P0 // 当前线程先获取一下 session = sessionTL.get(); if(null == session){ session = factory.openSession(); // 把session放入当前线程 sessionTL.set(session); } // 返回 return session; } public static void main(String[] args) { Session session = getSession(); session.doWork(new Work() { public void execute(Connection conn) throws SQLException { System.out.println(conn); } }); } }
写个test测试一下:添加功能。
public class Test1 { public static void main(String[] args) { // 获取数据库连接 // 编写SQL // 占位符赋值 // 执行获取影响行数 // 判断添加是否成功 // Hibernate操作 // 获取数据库连接 session-->sessionFacotry-->hibernate-configuration // 创建configuration对象加载XML Configuration cfg = new Configuration(); // 加载XML cfg.configure(); // 创建session工厂类 SessionFactory sf = cfg.buildSessionFactory(); // 创建session对象=conn+ps Session session = sf.openSession(); // 添加操作 // 创建添加对象 Customer cus = new Customer(); cus.setIndustry("呵呵"); cus.setLevel("紫色"); cus.setMobile("1351245678"); cus.setName("多多"); cus.setPhone("010-12345678"); cus.setSource("网络"); // 开启事务 Transaction tx = session.beginTransaction(); try { session.save(cus); tx.commit(); System.out.println("添加成功"); } catch (Exception e) { tx.rollback(); e.printStackTrace(); }finally{ // 关闭 session.close(); } } }
更新数据库操作 public class Test2 { public static void main(String[] args) { // 加载配置文件 Configuration cfg = new Configuration(); // 加载配置文件 cfg.configure(); // 创建工厂类 SessionFactory factory = cfg.buildSessionFactory(); // 创建Session Session session = factory.openSession(); // 获取ID为2的数据(DBUtils) Customer cus = session.get(Customer.class, 2L); if(null != cus){ // 进行修改 cus.setName("嘟嘟嘟"); // 事务 Transaction tx = session.beginTransaction(); try { session.update(cus); tx.commit(); System.out.println("更新成功"); } catch (Exception e) { tx.rollback(); e.printStackTrace(); } } } } public class Test3 { public static void main(String[] args) { // 获取数据库连接 Session session = HibernateUtils.getSession(); // 获取ID为3的数据 Customer cus = session.load(Customer.class, 3L); if(null != cus){ Transaction tx = session.beginTransaction(); try { session.delete(cus); tx.commit(); System.out.println("删除成功"); } catch (Exception e) { tx.rollback(); System.out.println("删除失败,原因:" + e.getMessage()); e.printStackTrace(); } } } }
public class Test4 { public static void main(String[] args) { Session session = HibernateUtils.getSession(); // 数据库查询 Customer cus = session.get(Customer.class, 10000L); // Customer cus = session.load(Customer.class, 1000L); System.out.println(cus); } }
以上就是 简单的HIbrenate对数据库的CRUL 操作。