-
javabeans设计原则查看全部
-
常见ORM框架 EJB重量级不常使用查看全部
-
在数据类型中,容易出错的hibernate数据类型为date与timestamp hibernate数据类型为date的话,格式为yyyy-MM-dd,time的话格式为hh:mm:ss. hibernate数据类型为timestamp,格式为yyyy-MM-dd hh:mm:ss. java.util.Date的格式默认存进数据库为yyyy-MM-dd hh:mm:ss.不需要再用format()方法格式化.查看全部
-
hibernate基本类型 用的最多的是hibernate映射类型与java类型.比方说在hbm映射文档中,<id>标签或者<property>标签中的type属性类型一般都是用hibernate映射类型或者java类型. <property name="name" type="string" column="SNAME" ></property> //string是小写 <property name="name" type="java.lang.String" column="SNAME" ></property>查看全部
-
单一主键(列级约束):表当中由某个字段充当主键. 复合主键(表级约束):表当中有多个字段共同充当主键. 当主键生成策略为assigned,即主键由java应用程序负责生成标识符(手工赋值),标示符理解为记录值.当没有为主键属性赋值,则默认为0,假如 <property name="hibernate.hbm2ddl.auto">udpate</property>设置了update,则第二次再次运行就会出错. 当主键生成策略为native,即由底层数据库自动生成的标示符,如果是MySQL就是auto_increment(自动增长),如果是Oracle就是sequence,等等.因此在类里不需要为对象的主键属性进行赋值,并把 <property name="hibernate.hbm2ddl.auto">create</property>属性值设置为create,则运行程序时,会自动重新创建表,并且会有auto_increment自动增长.此时用手动赋值会无效. 用hibernate可以创建表,尽管数据库不存在此表.在持久化类设置相应的字段,并且hbm映射文件的hbm2ddl设置为create即可.查看全部
-
主键生成策略. 其中assigned是自动赋值的方式.查看全部
-
hbm映射文件 <class>标签的常用设置.<class>标签是<hibernate-mapping>的子标签. 其中name、table、batch-size、where、entity都是<class>标签的属性. <class name="classname" //对应映射哪个类 table="tablename" //对应数据库的表名 batch-size="N" //抓取策略,即一次可以抓取多少条记录 where="condition" //设置抓取时的条件 entity-name="EntityName" //支持同一个实体类映射多张表,一般很少使用,都是一个类对应一张表 > </class> <id>标签的常用配置,<id>标签表示表的主键意思.<id>标签是<class>标签的子标签. 其中name、type、column、length都是<id>标签的属性. <id name="propertyName" //表示映射实体类的哪个属性 type="typename" //表示映射此实体的属性的数据类型 column="column_name" //对应数据库表的字段 length="length" //指定长度 > <generator class="generatorClass"/> //此标签在<id>标签下,表示主键生成策略. </id> <property>标签的常用配置,与<id>标签类似.<property>标签用来表示非主键的其他属性对应数据库表的字段的映射关系. 其中name、type、column是<property>标签的属性.<property>标签是<class>的子标签. <property name="propertyName" //表示映射实体类的哪个属性 type="typename" //表示映射此实体的属性的数据类型 column="column_name" //对应数据库表的字段 > </property> 即 <hibernate-mapping> <class> <id></id> <property></property> </class> </hibername-mapping>查看全部
-
hbm映射文档的常用设置 <hibernate-mappng>标签查看全部
-
假如用openSession()方法创建Session对象,最终没有用close()方法释放资源,则下次再次用openSession()方法创建Session对象,则又会去连接池获取一个连接,多次重复之后可能会导致连接池溢出的问题. 用getCurrentSession()方法获取的Session对象会自动释放资源,且多次用getCurrentSession()方法都是用同一个Session对象,同一个session对象对应的connection连接对象都是一样的,因此只会占用连接池的一个连接. 连接池溢出即连接已达到连接池的最大连接数,会抛出一个无空闲连接的异常给用户. 当客户请求数据库连接时,首先是查看连接池中是否有空闲连接(指当前没有分配出去的连接).假如存在空闲连接,则把连接分配给用户,并作相应的处理(即标记该连接为正在使用,引用计数加1).假如没有空闲连接,则查看当前所开的连接数是不是已经达到maxConn(最大连接数),若没达到就重新创建一个连接给请求的客户,若达到就按设定的maxWaitTime(最大等待时间)进行等待,若等待maxWaitTime后,仍没有空闲连接(即连接池溢出),就抛出无空闲连接的异常给用户.查看全部
-
openSession()和getCurrentSession()的区别 1.getCurrentSession()方法在事务提交或者回滚之后会自动关闭,而openSession()方法需要你手动关闭.如果使用openSession()方法而没有手动关闭,则多次之后会导致连接池溢出. 2.openSession()方法每次创建新的Session对象,getCurrentSession()方法使用现有的Session对象. 连接池概念: 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。 对于大多数应用程序,当它们正在处理通常需要数毫秒完成的事务时,仅需要能够访问JDBC连接的1个线程.当不处理事务时,这个连接就会闲置.相反,连接池允许闲置的连接被其它需要的线程使用. 当一个线程需要用JDBC对数据库操作时,它从池中请求一个连接.当这个线程使用完了这个连接,将它返回到连接池中,这样这就可以被其它想使用它的线程使用. 当连接从池中"借出",它被请求它的线程专有地使用.从编程的角度来看,这和用户的线程每当需要一个JDBC连接的时候调用DriverManager.getConnection()是一样的,采用连接池技术,可通过使用新的或已有的连接结束线程. 连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用. 在实际应用开发中,特别是在WEB应用系统中,如果JSP、Servlet或EJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃.数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是深入了解这项技术是非常必要的. 数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,通过复用这些已经建立的数据库连接,极大地节省系统资源和时间.查看全部
-
获得Session对象的方式有两种. 1.SessionFactory的openSession()方法 2.SessionFactory的getCurrentSession()方法 如果使用getCurrentSession()方法还需要在hibernate.cfg.xml配置文档中进行配置: 如果是本地事务(jdbc事务) <property name="hibernate.current_session_context_class">thread</property> 如果是全局事务(jta事务) <property name="hibernate.current_session_context_class">jta</property>查看全部
-
调用doWork()方法实现Hibernate程序自动提交事务,在用session操作数据库的方法之前调用doWork()方法设置.其中doWork()方法的参数是Work抽象类的对象,因此需要重写execute()方法,通过execute()参数中的connection对象来设置自动提交事务,最后session还要调用flush()方法输出sql语句.session不需要开启事务与提交事务的操作查看全部
-
transaction简介 hibernate对数据库的操作都是封装在事务当中,并且默认是非自动提交的方式.所以用session的save()方法保存对象时,如果不开启事务,并且没有手工提交事务,对象并不会真正保存在数据库中. JDBC操作数据库的方法是自动提交事务的.查看全部
-
Hibernate程序执行流程. 1.创建一个Configuration配置对象,此对象作用是读取配置文档信息. 2.创建ServiceRegistry服务注册对象. 3.用获得的配置对象来创建SessionFactory会话工厂对象.此对象作用是读取相应的对象关系映射文件. 3.通过会话工厂来创建Session对象.Session对象就类似于JDBC中的Connection对象.且是多对一的关系,获得了一个session对象,表示获得了一个数据库连接对象.一个session对象一定是获取了一个JDBC的connection对象,一个JDBC的connection对象可以供多个session对象使用,即把session看成是一个操作数据库的对象. 4.开启一个事务,为了对数据库的操作.通过获取到的Session对象的beginTransaction()方法获取到Transaction事务对象.在执行Session对象操作数据库的方法之前,必须要先开启一个事务,也就是说这些方法都需要封装在事务当中. 5.执行session中的save()、delete()、update()、createQuery()方法,对应对数据库的增删改查的操作. 6.当session对象执行完对数据库操作的方法之后,就需要提交事务,通过Transaction事务对象的commit()方法提交事务. 7.最后关闭session与sessionFactory对象. Hibernate不建议使用jdbc的connection对象操作数据库,而是通过使用session对象操作数据库.在通过Hibernate操作数据库之前,就必须获得一个Session实例. 要把对象保存在关系型数据库中需要调用session的各种方法, 如:save()、update()、delete()、createQuery()等.查看全部
-
hibernate.cfg.xml配置文档的常用配置. 程序在运行的时候会读取hibernate.cfg.xml配置文档,从而实现连接数据库,并且生成表结构. 设置了<property name="show_sql">true</property>,与<property name="format_sql">true</property>,则会把hibernate运行时对数据库的操作时的sql语句会显示在控制台并且格式化. <property name="hbm2ddl.auto">create</property>,即重新删除表结构再创建.所以之前的记录消失. <property name="hbm2ddl.auto">update</property>,它不会删除表结构也不会创建新的表结构,会保留原有的数据,只是更新.没有"hbm2ddl.auto"属性一样也是可以添加新的数据,会保留原有的数据. <property name="hibernate.default_schema">hibernate</property>,则在控制台输出的sql语句中,会在表名之前加上数据库名.查看全部
举报
0/150
提交
取消