sessionFactory的创建和四种查询方式
1,关于sessionFactory的创建
5.0版本之前,下面这种方式在5.0及之后,可能会出问题,建议修改为5.0之后的方式
- // 实例化Configuration
- Configuration configuration = new Configuration();
- // 加载hibernate.cfg.xml文件
- configuration.configure("/hibernate.cfg.xml");
- // 创建SessionFactory
- StandardServiceRegistryBuilder standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();
- standardServiceRegistryBuilder.applySettings(configuration
- .getProperties());
- SessionFactory sessionFactory = configuration
- .buildSessionFactory(standardServiceRegistryBuilder.build());
5.0版本以及5.0之后
- SessionFactory sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
官方建议的方法
- StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
- .configure( "hibernate.cfg.xml" )
- .build();
- Metadata metadata = new MetadataSources( standardRegistry )
- .addAnnotatedClass( HiberNew.class )
- .getMetadataBuilder()
- .applyImplicitNamingStrategy( ImplicitNamingStrategyJpaCompliantImpl.INSTANCE )
- .build();
- SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
hibernate获取sessionFactory的工具类
- public class HibernateUtils {
- private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
- private static final ThreadLocal<Session> threadLocal
- = new ThreadLocal<Session>();
- private static SessionFactory sessionFactory;
- private static String configFile = CONFIG_FILE_LOCATION;
- /* 静态代码块创建SessionFactory */
- static {
- try {
- sessionFactory = new Configuration().configure(configFile).buildSessionFactory();
- } catch (Exception e) {
- System.err.println("%%%% Error Creating SessionFactory %%%%");
- e.printStackTrace();
- }
- }
- private HibernateUtils() {
- }
- /**
- * 返回ThreadLocal中的session实例
- */
- 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;
- }
- /**
- * 返回Hibernate的SessionFactory
- */
- public static void rebuildSessionFactory() {
- try {
- sessionFactory = new Configuration().configure(configFile).buildSessionFactory();
- } catch (Exception e) {
- System.err.println("%%%% Error Creating SessionFactory %%%%");
- e.printStackTrace();
- }
- }
- /**
- * 关闭Session实例并且把ThreadLocal中副本清除
- */
- public static void closeSession() throws HibernateException {
- Session session = (Session) threadLocal.get();
- threadLocal.set(null);
- if (session != null) {
- session.close();
- }
- }
- /**
- * 返回SessionFactory
- */
- public static SessionFactory getSessionFactory() {
- return sessionFactory;
- }
- public static void setConfigFile(String configFile) {
- HibernateUtils.configFile = configFile;
- sessionFactory = null;
- }
- }
2.hibernate的使用
这里要注意,hibernate不会自动产生数据库,所以你需要自己先建立一个空数据库,编码设置为utf8,hibernate自己建表时会参考数据库的编码格式
1)配置文件hibernate.cfg.xml
- <!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>
- <!-- 配置访问Oracle数据库参数信息 -->
- <property name="dialect">
- org.hibernate.dialect.MySQLDialect
- </property>
- <property name="connection.driver_class">
- com.mysql.jdbc.Driver
- </property>
- <property name="connection.url">
- jdbc:mysql://127.0.0.1:3306/hibTest?useUnicode=true&characterEncoding=UTF-8
- <!-- jdbc:oracle:thin:@localhost:1521:orcl -->
- </property>
- <property name="connection.username">root</property>
- <property name="connection.password">password</property>
- <!-- 在控制台显示SQL语句 -->
- <property name="show_sql">true</property>
- <!--根据需要自动生成、更新数据表 -->
- <property name="hbm2ddl.auto">update</property>
- <!-- 注册所有ORM映射文件 -->
- <mapping resource="com/qst/chapter05/pojos/Student.hbm.xml" />
- <!-- <mapping resource="com/qst/chapter05/pojos/User.hbm.xml" /> -->
- <mapping class="com.qst.chapter05.pojos.TestAno" />
- <mapping class="com.qst.chapter05.pojos.User" />
- </session-factory>
- </hibernate-configuration>
2)POJO 不建议用xml的方式,用注解更简单易读
- package com.qst.chapter05.pojos;
- import java.io.Serializable;
- import javax.persistence.Column;
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- @Entity
- @Table(name="user")
- public class User implements Serializable {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- /* 用户ID */
- @Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- @Column(name = "id", insertable = false, updatable = false)
- private Integer id;
- /* 用户名 */
- @Column(name = "user_name")
- private String userName;
- /* 密码 */
- @Column(name = "user_pwd")
- private String userPwd;
- /* 权限 */
- @Column(name = "role")
- private Integer role;
- /* 默认构造方法 */
- public User() {
- }
- /* 根据属性创建 构造方法 */
- public User(String userName, String userPwd,Integer role) {
- this.userName = userName;
- this.userPwd=userPwd;
- this.role=role;
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public String getUserPwd() {
- return userPwd;
- }
- public void setUserPwd(String userPwd) {
- this.userPwd = userPwd;
- }
- public Integer getRole() {
- return role;
- }
- public void setRole(Integer role) {
- this.role = role;
- }
- }
测试代码
session自带的方法
保存
- public class UserDemo {
- public static void main(String[] args) {
- // 创建User对象
- User user = new User("zhangsan", "123", 1);
- SessionFactory sessionFactory = new Configuration().configure("/hibernate.cfg.xml").buildSessionFactory();
- // 打开Session
- Session session = sessionFactory.openSession();
- // 开始一个事务
- Transaction trans = session.beginTransaction();
- // 持久化操作
- session.save(user);
- // 提交事务
- trans.commit();
- // 关闭Session
- session.close();
- }
- }
更新
session.update(user);
查询
User user = (User) session.get(User.class, key);
HQL语句
- Query query = session.createQuery("from User");
- // 执行查询
- List<User> list = query.list();
- // 遍历输出
- for (User u : list) {
- System.out.println(u.getId() + "\t" + u.getUserName() + "\t"
- + u.getUserPwd() + "\t" + u.getRole());
- }
SQL查询,这个查完了需要手工映射,比较麻烦
- Query query = session.createSQLQuery("select * from user");
- // 执行查询
- List<Object[]> list = query.list();
- // 遍历输出
- for (Object[] u : list) {
- System.out.println(u[0] + "\t" + u[1] + "\t"
- + u[2] + "\t" + u[3]);
- }
Criteria查询
- Criteria criteria = session.createCriteria(User.class);
- // 执行查询
- List<User> list = criteria.list();
- // 遍历输出
- for (User stu : list) {
- System.out.println(stu.getId() + "\t" + stu.getUserName() + "\t"+stu.getUserPwd());
- }
sessionFactory的创建和四种查询方式的更多相关文章
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
- Spring Data Jpa的四种查询方式
一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...
- Hibernate第四天——查询方式
Hibernate入门最后一天第四天,我们进行查询方式的更进一步的细化: 先看一下大致的Hibernate的提供的查询的方式: 1.对象导航查询 2.OID查询 3.HQL查询 4.QBC查询 5.本 ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是: NULL: 空值 INTEGER: 整数 REAL: 浮点数 TEXT: 字符串 BLOB: 大数据 在SQLite中, ...
- [Android]Android数据的四种存储方式
存储方式 Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/d ...
- Hibernate的Api以及三种查询方式
Hibernate Api |-- Configuration 配置管理类对象 config.configure(); 加载主配置文件的方法(hibernate.cfg.xml) ...
- (转)Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (三) —— SharePreferences
除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data ...
- [转][Android]Android数据的四种存储方式
android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...
随机推荐
- CodeIgniter 防止XSS攻击
CodeIgniter 包含了跨站脚本攻击的防御机制,它可以自动地对所有POST以及COOKIE数据进行过滤,或者您也可以针对单个项目来运行它.默认情况下,它 不会 全局运行,因为这样也需要一些执行开 ...
- 持续集成---jenkins环境部署
一.环境准备 操作系统:linux系统,此时我安装的是centos6.5,操作步骤具体见博客<虚拟机安装centos6.5> 依赖软件:1.jdk, 2.tomcat9(需要安装两个,一个 ...
- 【2018.8.10】四连测day4 题解
T1:给出一棵 $n$ 个节点的无根树,其中 $m$ 个节点是特殊节点,求对于任意 $i ∈ [0, m]$,包含 $i$ 个特殊节点的联通块个数$\mod 998244353$. $1<=n, ...
- intellij idea 使用用到的问题
1.github error setting certificate verify locations使用github时报错,解决方法: git config --system http.sslcai ...
- 【jquery创建元素添加元素】
使用jquery创建新元素的方法为:$(html标签),例如 $("<p></p>")创建了一个段落.注意此时只是创建了对象,尚未添加到文档节点中去:以下四 ...
- oracle怎么查看表空间里有哪些表
select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='表空间名'; 注意:表空间名要大写
- [教程] 【终极开关机加速!!】手把手教你加速Mac的开关机速度。(经验证适用10.10!)
转自:http://bbs.feng.com/read-htm-tid-7811885.html [声明]如果锋友的机器开机速度已经很快了,譬如机械硬盘40秒左右,SSD10秒左右,那么就不要折腾 ...
- Ubuntu 安装PostgreSQL
安装最新版: sudo apt-get install postgresql 安装完成后,默认会: (1)创建名为"postgres"的Linux用户 (2)创建名为"p ...
- a href="javascript:void(0)"
JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. void 操作符用法格式如下: 1. javascript:void (expression) 2. javas ...
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享出现:No bean named 'springSessionRepositoryFilter' available
出现这个问题:No bean named 'springSessionRepositoryFilter' available的的原因: 1.Spring MVC加载了多个配置文件导致的,并不是版本问题 ...