hibernate是一个持久化操作
运行原理:
1:hibernate.cfg.xml是配置文件,通过配置文件建立与数据库连接的信息(用户名,密码,数据库,数据库驱动)它通过mapping映射到需要与数据库关联的类
2:类.hm.xml映射文件,配置要操作的数据表的字段
3:pojo持久化类
1:创建一个Configuration的对象,用于加载配置文件
2:创建一个SessionFactory的工厂类,每个数据库只创建一个SessionFactory的工厂,用来创建session对象
3:创建一个Session对象,每一个客户端都有一个唯一的session与服务端进行交互(session封装了JDBC)
4:通过session的beginTransaction开启事物操作,(CRUD)
5:session的save方法保存事物,
6:session的commit方法,提交事物,将对象映射到数据表
7:通过ommit的close关闭事务,断开与数据表的连接
8:通过session的close关闭与数据库的对象关系映射
1:hibernate.cfg.xml(配置文件)
<?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> <session-factory> <!-- 配置连接数据库的基本信息 --> <property name="connection.driver_class">com.MySQL.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://127.0.0.1:3306/mydatabase</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- 配置HiberNate的基本信息 --> <!-- HiberNate使用的数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 操作是是否在控制台显示 --> <property name="show_sql">true</property> <!--是否对进行格式化 --> <property name="format_sql">true</property> <!--指定自定生成数据表的策略 --> <property name="hbm2ddl.auto">update</property> <mapping resource="com/study/hello/News.hbm.xml"/> </session-factory> </hibernate-configuration>
2:News.hbm.xml(映射文件)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--对象映射文件--> <class name="com.study.hello.News" table="news"> <id name="id" type="java.lang.Integer"> <column name="id"/> <!--指定主键的生成方式 --> <generator class="native"></generator> </id> <property name="title" type="java.lang.String"> <column name="title" length="20"/> </property> <property name="author" type="java.lang.String"> <column name="author" length="10"/> </property> <property name="date" type="java.sql.Date"> <column name="date"/></property> </class> </hibernate-mapping>
3:pojo持久化类
package com.study.hello; import java.sql.Date; /** * pojo类与数据库映射 * @author Administrator * */ public class News { private Integer id; private String title; private String author; private Date date; public News() { } public News(String title, String author, Date date) { this.title = title; this.author = author; this.date = date; } public String toString() { return "News [id=" + id + ", title=" + title + ", author=" + author + ", date=" + date + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
4:javabean(对数据进行操作)
package com.study.hello; import java.sql.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class TestNews { public static void main(String[] args) { // 1:下面的方法默认加载hibernate.cfg.xml文件 Configuration configuare = new Configuration().configure(); // 2:创建sessionFactory SessionFactory ssssionFactory = configuare.buildSessionFactory(); // 3:创建session Session session =ssssionFactory.openSession(); // 4:开始事务,Hibernate必须显式的手动提交事务 Transaction transaction = session.beginTransaction(); News news=new News("java","Admin",new Date(new java.util.Date().getTime())); System.out.println(news); // 5:保存 session.save(news); // 6:提交事务 transaction.commit(); // 7:关闭session session.close(); //8:关闭sessionFactory ssssionFactory .close(); } }