新手教学:简单使用hibernate框架

来源:互联网 发布:sql语句升序降序一起用 编辑:程序博客网 时间:2024/04/28 22:29

1.在www.hibernate.org 官网下载jar包。

我使用的是:hibernate-release-5.0.12.Final

打开压缩包,找到\lib\required文件夹下所有jar,导入项目。

2.在项目src根目录配置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 元素用于配置Hibernate中的属性            键:值           -->          <!-- hibernate.connection.driver_class : 连接数据库的驱动  -->        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>          <!-- hibernate.connection.username : 连接数据库的用户名 -->        <property name="connection.username">XXX</property>          <!-- hibernate.connection.password : 连接数据库的密码 -->        <property name="connection.password">XXX</property>          <!-- hibernate.connection.url : 连接数据库的地址,路径 -->        <property name="connection.url">XXX</property>        <!-- show_sql: 操作数据库时,会 向控制台打印sql语句 -->        <property name="show_sql">true</property>        <!-- format_sql: 打印sql语句前,会将sql语句先格式化  -->        <property name="format_sql">true</property>        <!-- hbm2ddl.auto: 生成表结构的策略配置             update(最常用的取值): 如果当前数据库中不存在表结构,那么自动创建表结构.                      如果存在表结构,并且表结构与实体一致,那么不做修改                     如果存在表结构,并且表结构与实体不一致,那么会修改表结构.会保留原有列.             create(很少):无论是否存在表结构.每次启动Hibernate都会重新创建表结构.(数据会丢失)             create-drop(极少): 无论是否存在表结构.每次启动Hibernate都会重新创建表结构.每次Hibernate运行结束时,删除表结构.             validate(很少):不会自动创建表结构.也不会自动维护表结构.Hibernate只校验表结构. 如果表结构不一致将会抛出异常.          -->        <property name="hbm2ddl.auto">update</property>        <!-- 数据库方言配置          org.hibernate.dialect.MySQLDialect (选择最短的)         -->        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>        <!-- hibernate.connection.autocommit: 事务自动提交  -->        <property name="hibernate.connection.autocommit">true</property>        <!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession -->        <property name="hibernate.current_session_context_class">thread</property>        <!-- 引入ORM 映射文件             填写src之后的路径         -->        <mapping resource="xxx/user.hbm.xml"/>    </session-factory></hibernate-configuration>
2.自定义包xxx,创建一个pojo对象

User.java

public class User {private Long id;private String name;private String password;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
3.创建映射对象

user.hbm.xml

<?xml version="1.0"?><!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="hibernate1116.User" table="liu_test"><id name="id" ><generator class="native"/><!-- id主键,自动增长--></id><property name="name"></property><property name="password"></property>    </class></hibernate-mapping> 
4.创建hibernate初始化类

HibernateInitialize.java

package hibernate1116;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;public class HibernateInitialize {    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();//ThreadLocal对象    private static SessionFactory sessionFactory = null;    private static Session session;    //静态块    static {        try {            Configuration cfg = new Configuration().configure("hibernate.cfg.xml");            ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();           //ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();            sessionFactory = cfg.buildSessionFactory(serviceRegistry);                  } catch (Exception e) {            System.out.print("创建会话工厂失败");        }    }    /**         *  @throws HibernateException     */    public static Session getSession() throws HibernateException {        Session session = (Session) threadLocal.get();        if (session == null || !session.isOpen()) {            if (sessionFactory == null) {                rebuildSessionFactory();            }            session = (sessionFactory != null) ? sessionFactory.openSession(): null;            threadLocal.set(session);        }        return session;    }    public static void rebuildSessionFactory() {        try {            Configuration cfg = new Configuration().configure("hibernate.cfg.xml");            ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().configure().build();           //ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();            sessionFactory = cfg.buildSessionFactory(serviceRegistry);        } catch (Exception e) {            System.err.println("创建会话工厂失败");            e.printStackTrace();        }    }    /**      * @return SessionFactory对象     */    public static SessionFactory getSessionFactory() {        return sessionFactory;    }    /**          *  @throws HibernateException     */    public static void closeSession() throws HibernateException {        Session session = (Session) threadLocal.get();        threadLocal.set(null);//        if (session != null) {            session.close();        }    }}
5.创建主函数测试

package hibernate1116;import org.hibernate.Session;public class UserManager {public static void main(String[] args) {Session session= null;User user = new User();user.setId((long)22);user.setName("liujiahao");user.setPassword("123456");try {session = HibernateInitialize.getSession();session.beginTransaction();//添加session.save(user);//查询//User gUser = (User)session.get(User.class, (long)1);//System.out.println(gUser.getName());//删除//User gUser = (User)session.get(User.class, (long)1);//session.delete(gUser);//修改//User gUser = (User)session.get(User.class, (long)1);//gUser.setName("haha");//session.flush();session.getTransaction().commit();} catch (Exception e) {// TODO: handle exceptionsession.getTransaction().rollback();System.out.println("fail my sql");e.printStackTrace();}finally{HibernateInitialize.closeSession();}}}

ps:因为在hibernate.cfg.xml配置了
<property name="hbm2ddl.auto">update</property>

数据库中没有表时会自动创建

自此,hibernate添加功能已经完成。

原创粉丝点击