文档章节

hibernate

MoreYoungG
 MoreYoungG
发布于 2016/05/18 20:21
字数 1402
阅读 220
收藏 9
//1、加入相关jar包
//2、src下创建hibernate.cfg.xml文件
	<session-factory>
    	//<!-- 数据库基本信息 -->
    	<property name="connection.username">root</property>
    	<property name="connection.password">root</property>
    	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    	<property name="connection.url">jdbc:mysql:///h</property>
    	
    	//<!-- Hibernate基本信息 -->
    	//<!-- Hibernate方言 -->	 
    	<property name="dialect">org.hibernate.dialect.MySQLDialect</property>//hibernate-release-4.3.9.Final\project\etc\hibernate.properties
    	//<!-- 执行操作时是否在控制台打印SQL -->
    	<property name="show_sql">true</property>
    	//<!-- 是否对SQL进行格式化 -->
    	<property name="format_sql">true</property>
    	//<!-- 自动生成数据表策略 -->
    	<property name="hbm2ddl.auto">update</property>//update更新不删除原有的列名,create删除原有的表重新创建,create-drop当sessionFactory
														//一旦关闭表就自动删除		
    	//<!-- 指定关联的hbm.xml文件 -->
    	<mapping resource="com/gmy/h1/News.hbm.xml"/>
		
		//<!-- 配置C3P0数据源 -->
    	<property name="c3p0.max_size">2</property>
    	<property name="c3p0.min_size">2</property>
    	<property name="c3p0.timeout">5000</property>
    	<property name="c3p0.max_statements">100</property>
    	<property name="c3p0.idle_test_period">300</property>
    	<property name="c3p0.acquire_increment">2</property>
    	<property name="c3p0.validate">false</property>
    </session-factory>
//3、写一个实体类
	public class News {
		private Integer id;
		private String title;
		private String author;
		private 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;
		}
		public News(String title, String author, Date date) {
			super();
			this.title = title;
			this.author = author;
			this.date = date;
		}
		public News() {
		}
		@Override
		public String toString() {
			return "News [id=" + id + ", title=" + title + ", author=" + author
					+ ", date=" + date + "]";
		}
		
	}
//4、生成News.hbm.xml映射文件
	<class name="com.gmy.h1.News" table="NEWS">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="title" type="java.lang.String">
            <column name="TITLE" />
        </property>
        <property name="author" type="java.lang.String">
            <column name="AUTHOR" />
        </property>
        <property name="date" type="java.util.Date">
            <column name="DATE" />
        </property>
    </class>
//5、写一个测试类
	SessionFactory sessionFactory = null;
	//创建Configuration获取配置信息和映射关系
	Configuration configure = new Configuration().configure();
	//创建ServiceRegistry对象任何配置都需要注册才生效
	ServiceRegistry buildServiceRegistry = new ServiceRegistryBuilder().applySettings(configure.getProperties())
								.buildServiceRegistry();
	//创建SessionFactory对象
	sessionFactory = configure.buildSessionFactory(buildServiceRegistry);
	//创建Session对象
	Session openSession = sessionFactory.openSession();
	//开启事物
	Transaction beginTransaction = openSession.beginTransaction();
	//执行保存操作
	News news = new News("Java","gmy",new Date(new java.util.Date().getTime()));
	openSession.save(news);
	//提交事务
	beginTransaction.commit();
	//关闭Session
	openSession.close();
	//关闭SessionFactory对象
	sessionFactory.close();
	
//Session缓存(一级缓存)
	//flush():使数据表中的记录和对象的状态保持一致,可能会发出对应的SQL语句
		//1、如果数据没有变则不发送,如果改变,则发送SQL语句
	//refresh():会强制发送SELECT语句,已使Session缓存中的对象的状态和数据表中对应的记录保持一致
		//注意Hibernate的隔离级别
	//clear():清理缓存
	
//隔离级别
	//1、READ UNCOMMITED(读未提交)   
	//2、READ COMMITED(读已提交)	
	//4、REPEATABLE READ(可重复读)	 
	//8、SERIALIZEABLE(串行化)
//<property name="connection.isolation">2</property>   默认为4
	
//持久化对象状态
	//持久化状态
	//临时状态
	//游离状态
	//删除状态
	
//游离状态
	//News news = new News();
	//news.setId(1);

//持久化状态
	//News news = (News)session.get(News.class,1);

//对象状态转换图

	get()
	Load()	
	Query.list()
	Query.uniqueResult()
	Query.iterator()	
	Query.scoll()						new 语句
	//持久化状态	<---------------	//临时状态	
		|	^			save()	
		|	|		 saveOrUpdate()	
		|	|			persist()
		|	|			merge()
		|	|
		|	|
evict()	|	| update()
close()	|	| saveOrUpdate()
clear()	|	| merge()
		|	|
		v	|
				   delete()
	//游离状态	 ----------->	//删除状态
		
		
//save()方法
	//临时对象变为持久化对象,并为对象分配ID
	//在save()方法前设置ID无效
	//对于持久化对象的ID不允许修改

//persist()方法:
	//save设置对象ID无效但是不抛出异常,而persist会抛出异常
	
//get()方法:
	//获取一个对象

//get()和load()区别
	//1、执行get方法会立即返回一个对象,而执行load方法,若不使用对象,则不会立即执行查询而返回一个代理对象
	//2、如果数据表中没有对应的记录,get返回null,load,当使用对象时,抛出异常
	//3、load方法可能会抛出懒加载异常
	
//update()方法
	//1、更新持久化对象,不需要显示调用update方法,但事物提交时,会先执行session的flush方法
	//2、更新游离对象时,需要显示调用session中的update方法,可以把游离对象变成持久化对象

//saveOrUpdate()方法
	//游离对象则执行update,临时对象则执行save

//delelte()方法
	//删除对象

//evict()方法
	//从缓存中移除指定的持久化对象
	
//set:映射set类型属性
//inverse:指定由哪一方维护关联关系
//cascade:级联操作,不建议使用,建议手工
//order-by:	排序操作,order-by中存放的是列名

//注意
	//单向一对多
		//插入:单向一对多应该先插入多的一方,在插入一的一方
		//删除:可以直接删除一的一方,直接删除多的一方会有异常,必须在一的一方设置级联删除<set cascade="delete">
	//双向一对多
		//双向一对多,让一的一方放弃维护关联关系<set inverse="true">
		//设定集合是要将集合初始化,防止发生空指针异常
	//一对一
		//先保存没有外键的一方
	//单向多对多
		//注意懒加载异常
	//双向多对多
		
	//继承映射	
		//join-subclass
		//union-subclas 
	
//检索策略
	//类级别
		//立即检索:立即加载检索方法的指定对象
		//延迟检索:延迟加载检索方法的指定对象

//检索方式
	//导航对象图检索方式:根据已经加载的对象导航到其他对象
	//OID检索方式:按照对象的OID来检索对象
	//HQL检索方式:使用面向对象的HQL查询语言
	//QBC检索方式:使用QBC API来检索对象
	//本地SQL检索方式:使用本地数据库的SQL查询语句

//HQL分页
	query.setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize).list()
//HQL命名查询
	getNamedQuery();
	
//常见错误
错误:数据表无法生成
原因:注意检查映射文件的路径,还有Hibernate的方言配置,Hibernate可以自动见表,但是不能自动建数据库

 

© 著作权归作者所有

下一篇: mysql
MoreYoungG
粉丝 19
博文 26
码字总数 440790
作品 0
广州
私信 提问

暂无文章

TVS瞬态抑制二极管的三大特点

  TVS管瞬态抑制二极管有以下三大特点。   1、将 TVS 瞬态抑制二极管加在信号及电源线上,能防止微处理器或单片机因瞬间的脉冲,如静电放电效应、交流电源之浪涌及开关电源的噪音所导致的...

仙溪
19分钟前
2
0
6 个 K8s 日志系统建设中的典型问题,你遇到过几个?

导读:随着 K8s 不断更新迭代,使用 K8s 日志系统建设的开发者,逐渐遇到了各种复杂的问题和挑战。本篇文章中,作者结合自己多年经验,分析 K8s 日志系统建设难点,期待为读者提供有益参考。...

Mr_zebra
20分钟前
3
0
准则2.1-性能、运行Wi-Fi在iPad上一个或多个错误问题

很多开发者上架遇到这个问题,苹果那边打不开APP,加载不出来内容! 很多人以为是没有兼容ipad,其实是苹果审核都用ipad,跟有没有支持兼容没有关系。 如果自己在国内测试加载正常,要看APP...

qtb999
20分钟前
4
0
华为云学院带你7天入门Redis(2)

华为云学院带你7天入门Redis(2) 1、深度剖析memory Info是Redis提供的一个非常有用的查看状态信息的命令。使用 redis-cli 连上 Redis,输入 info all 命令,redis-server 就 会返回 Redis ...

华为云学院
27分钟前
5
0
Android 自定义View中,四个参数的构造函数的含义

MyView(Context context) Used when instanciating Views programmatically. MyView(Context context, AttributeSet attrs) Used by the LayoutInflater to apply xml attributes. If one of......

SuShine
29分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部