1,关于sessionFactory的创建

5.0版本之前,下面这种方式在5.0及之后,可能会出问题,建议修改为5.0之后的方式

  1. // 实例化Configuration
  2. Configuration configuration = new Configuration();
  3. // 加载hibernate.cfg.xml文件
  4. configuration.configure("/hibernate.cfg.xml");
  5. // 创建SessionFactory
  6. StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();
  7. standardServiceRegistryBuilder.applySettings(configuration
  8. .getProperties());
  9. SessionFactory sessionFactory = configuration
  10. .buildSessionFactory(standardServiceRegistryBuilder.build());

5.0版本以及5.0之后

  1. SessionFactory sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();

官方建议的方法

  1. StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
  2. .configure( "hibernate.cfg.xml" )
  3. .build();
  4.  
  5. Metadata metadata = new MetadataSources( standardRegistry )
  6. .addAnnotatedClass( HiberNew.class )
  7. .getMetadataBuilder()
  8. .applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE )
  9. .build();
  10.  
  11. SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();

hibernate获取sessionFactory的工具类

  1. public class HibernateUtils {
  2. private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
  3. private static final ThreadLocal<Session> threadLocal
  4. = new ThreadLocal<Session>();
  5. private static SessionFactory sessionFactory;
  6. private static String configFile = CONFIG_FILE_LOCATION;
  7. /* 静态代码块创建SessionFactory */
  8. static {
  9. try {
  10. sessionFactory = new Configuration().configure(configFile).buildSessionFactory();
  11. } catch (Exception e) {
  12. System.err.println("%%%% Error Creating SessionFactory %%%%");
  13. e.printStackTrace();
  14. }
  15. }
  16. private HibernateUtils() {
  17. }
  18. /**
  19. * 返回ThreadLocal中的session实例
  20. */
  21. public static Session getSession() throws HibernateException {
  22. Session session = (Session) threadLocal.get();
  23. if (session == null || !session.isOpen()) {
  24. if (sessionFactory == null) {
  25. rebuildSessionFactory();
  26. }
  27. session = (sessionFactory != null) ? sessionFactory.openSession()
  28. : null;
  29. threadLocal.set(session);
  30. }
  31. return session;
  32. }
  33. /**
  34. * 返回Hibernate的SessionFactory
  35. */
  36. public static void rebuildSessionFactory() {
  37. try {
  38. sessionFactory = new Configuration().configure(configFile).buildSessionFactory();
  39. } catch (Exception e) {
  40. System.err.println("%%%% Error Creating SessionFactory %%%%");
  41. e.printStackTrace();
  42. }
  43. }
  44. /**
  45. * 关闭Session实例并且把ThreadLocal中副本清除
  46. */
  47. public static void closeSession() throws HibernateException {
  48. Session session = (Session) threadLocal.get();
  49. threadLocal.set(null);
  50. if (session != null) {
  51. session.close();
  52. }
  53. }
  54. /**
  55. * 返回SessionFactory
  56. */
  57. public static SessionFactory getSessionFactory() {
  58. return sessionFactory;
  59. }
  60. public static void setConfigFile(String configFile) {
  61. HibernateUtils.configFile = configFile;
  62. sessionFactory = null;
  63. }
  64. }

  

2.hibernate的使用

这里要注意,hibernate不会自动产生数据库,所以你需要自己先建立一个空数据库,编码设置为utf8,hibernate自己建表时会参考数据库的编码格式

1)配置文件hibernate.cfg.xml

  1. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  2. <hibernate-configuration>
  3. <session-factory>
  4. <!-- 配置访问Oracle数据库参数信息 -->
  5. <property name="dialect">
  6. org.hibernate.dialect.MySQLDialect
  7. </property>
  8. <property name="connection.driver_class">
  9. com.mysql.jdbc.Driver
  10. </property>
  11. <property name="connection.url">
  12. jdbc:mysql://127.0.0.1:3306/hibTest?useUnicode=true&amp;characterEncoding=UTF-8
  13. <!-- jdbc:oracle:thin:@localhost:1521:orcl -->
  14. </property>
  15. <property name="connection.username">root</property>
  16. <property name="connection.password">password</property>
  17. <!-- 在控制台显示SQL语句 -->
  18. <property name="show_sql">true</property>
  19. <!--根据需要自动生成、更新数据表 -->
  20. <property name="hbm2ddl.auto">update</property>
  21. <!-- 注册所有ORM映射文件 -->
  22. <mapping resource="com/qst/chapter05/pojos/Student.hbm.xml" />
  23. <!-- <mapping resource="com/qst/chapter05/pojos/User.hbm.xml" /> -->
  24. <mapping class="com.qst.chapter05.pojos.TestAno" />
  25. <mapping class="com.qst.chapter05.pojos.User" />
  26.  
  27. </session-factory>
  28. </hibernate-configuration>

 

2)POJO 不建议用xml的方式,用注解更简单易读

  1. package com.qst.chapter05.pojos;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import javax.persistence.Column;
  6. import javax.persistence.Entity;
  7. import javax.persistence.GeneratedValue;
  8. import javax.persistence.GenerationType;
  9. import javax.persistence.Id;
  10. import javax.persistence.Table;
  11. @Entity
  12. @Table(name="user")
  13. public class User implements Serializable {
  14. /**
  15. *
  16. */
  17. private static final long serialVersionUID = 1L;
  18. /* 用户ID */
  19. @Id
  20. @GeneratedValue(strategy=GenerationType.IDENTITY)
  21. @Column(name = "id", insertable = false, updatable = false)
  22. private Integer id;
  23. /* 用户名 */
  24. @Column(name = "user_name")
  25. private String userName;
  26. /* 密码 */
  27. @Column(name = "user_pwd")
  28. private String userPwd;
  29. /* 权限 */
  30. @Column(name = "role")
  31. private Integer role;
  32. /* 默认构造方法 */
  33. public User() {
  34. }
  35. /* 根据属性创建 构造方法 */
  36. public User(String userName, String userPwd,Integer role) {
  37. this.userName = userName;
  38. this.userPwd=userPwd;
  39. this.role=role;
  40. }
  41. public Integer getId() {
  42. return id;
  43. }
  44. public void setId(Integer id) {
  45. this.id = id;
  46. }
  47. public String getUserName() {
  48. return userName;
  49. }
  50. public void setUserName(String userName) {
  51. this.userName = userName;
  52. }
  53. public String getUserPwd() {
  54. return userPwd;
  55. }
  56. public void setUserPwd(String userPwd) {
  57. this.userPwd = userPwd;
  58. }
  59. public Integer getRole() {
  60. return role;
  61. }
  62. public void setRole(Integer role) {
  63. this.role = role;
  64. }
  65.  
  66. }

  

测试代码

session自带的方法

保存

  1. public class UserDemo {
  2.  
  3. public static void main(String[] args) {
  4. // 创建User对象
  5. User user = new User("zhangsan", "123", 1);
  6. SessionFactory sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
  7. // 打开Session
  8. Session session = sessionFactory.openSession();
  9. // 开始一个事务
  10. Transaction trans = session.beginTransaction();
  11. // 持久化操作
  12. session.save(user);
  13. // 提交事务
  14. trans.commit();
  15. // 关闭Session
  16. session.close();
  17. }
  18.  
  19. }

 

更新

session.update(user);

查询

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

HQL语句

  1. Query query = session.createQuery("from User");
  2. // 执行查询
  3. List<User> list = query.list();
  4. // 遍历输出
  5. for (User u : list) {
  6. System.out.println(u.getId() + "\t" + u.getUserName() + "\t"
  7. + u.getUserPwd() + "\t" + u.getRole());
  8. }

 

SQL查询,这个查完了需要手工映射,比较麻烦

  1. Query query = session.createSQLQuery("select * from user");
  2. // 执行查询
  3. List<Object[]> list = query.list();
  4. // 遍历输出
  5. for (Object[] u : list) {
  6. System.out.println(u[0] + "\t" + u[1] + "\t"
  7. + u[2] + "\t" + u[3]);
  8. }

Criteria查询

  1. Criteria criteria = session.createCriteria(User.class);
  2. // 执行查询
  3. List<User> list = criteria.list();
  4. // 遍历输出
  5. for (User stu : list) {
  6. System.out.println(stu.getId() + "\t" + stu.getUserName() + "\t"+stu.getUserPwd());
  7. }

sessionFactory的创建和四种查询方式的更多相关文章

  1. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  2. Spring Data Jpa的四种查询方式

    一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...

  3. Hibernate第四天——查询方式

    Hibernate入门最后一天第四天,我们进行查询方式的更进一步的细化: 先看一下大致的Hibernate的提供的查询的方式: 1.对象导航查询 2.OID查询 3.HQL查询 4.QBC查询 5.本 ...

  4. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  5. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite

    SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...

  6. [Android]Android数据的四种存储方式

    存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...

  7. Hibernate的Api以及三种查询方式

    Hibernate  Api |-- Configuration       配置管理类对象 config.configure();    加载主配置文件的方法(hibernate.cfg.xml) ...

  8. (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences

    除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...

  9. [转][Android]Android数据的四种存储方式

    android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...

随机推荐

  1. CodeIgniter 防止XSS攻击

    CodeIgniter 包含了跨站脚本攻击的防御机制,它可以自动地对所有POST以及COOKIE数据进行过滤,或者您也可以针对单个项目来运行它.默认情况下,它 不会 全局运行,因为这样也需要一些执行开 ...

  2. 持续集成---jenkins环境部署

    一.环境准备 操作系统:linux系统,此时我安装的是centos6.5,操作步骤具体见博客<虚拟机安装centos6.5> 依赖软件:1.jdk, 2.tomcat9(需要安装两个,一个 ...

  3. 【2018.8.10】四连测day4 题解

    T1:给出一棵 $n$ 个节点的无根树,其中 $m$ 个节点是特殊节点,求对于任意 $i ∈ [0, m]$,包含 $i$ 个特殊节点的联通块个数$\mod 998244353$. $1<=n, ...

  4. intellij idea 使用用到的问题

    1.github error setting certificate verify locations使用github时报错,解决方法: git config --system http.sslcai ...

  5. 【jquery创建元素添加元素】

    使用jquery创建新元素的方法为:$(html标签),例如 $("<p></p>")创建了一个段落.注意此时只是创建了对象,尚未添加到文档节点中去:以下四 ...

  6. oracle怎么查看表空间里有哪些表

    select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='表空间名'; 注意:表空间名要大写

  7. [教程] 【终极开关机加速!!】手把手教你加速Mac的开关机速度。(经验证适用10.10!)

    转自:http://bbs.feng.com/read-htm-tid-7811885.html   [声明]如果锋友的机器开机速度已经很快了,譬如机械硬盘40秒左右,SSD10秒左右,那么就不要折腾 ...

  8. Ubuntu 安装PostgreSQL

    安装最新版: sudo apt-get install postgresql 安装完成后,默认会: (1)创建名为"postgres"的Linux用户 (2)创建名为"p ...

  9. a href="javascript:void(0)"

    JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. void 操作符用法格式如下: 1. javascript:void (expression) 2. javas ...

  10. Spring MVC集成Spring Data Reids和Spring Session实现Session共享出现:No bean named 'springSessionRepositoryFilter' available

    出现这个问题:No bean named 'springSessionRepositoryFilter' available的的原因: 1.Spring MVC加载了多个配置文件导致的,并不是版本问题 ...