hibernate:
优点和缺点
优点:
* 数据缓存
* 面向对象编程
* 代码操作比较简单
缺点:
* 大量的数据条件下不适合用hibernate
* 程序员对于hibernate生成的sql语句不可控
程序员不能干预hibernate生成sql语句,
所以在sql语句优化比较高的项目中,
hibernate也是不适合的
jdbc的优点和缺点:
* jdbc的优点
* 效率要高
* Connection pool
* 缺点
* 代码比较繁琐
try{
}catch(){
}
finally{
//做各种关闭操作
}
* data pool
hibernate主配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<!-- 是用来描述数据库的连接 -->
<session-factory>
<!--
驱动
-->
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!--
url
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/数据库名
</property>
<!--
用户名
-->
<property name="connection.username">root</property>
<!--
密码
-->
<property name="connection.password">root</property>
<!--
hibernate针对建表的操作
update 如果有表,检查表的结构,如果没有则创建
create-drop 启动hibernate创建表,结束hibernate删除表
create 每次启动都重新创建表
validate 每次启动都检查表的结构
-->
<property name="hbm2ddl.auto">update</property>
<!--
在控制台显示sql语句
-->
<property name="show_sql">true</property>
<!--hibernate持久化类的映射文件-->
<mapping
resource="cn/domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
持久化类的映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
class元素是用来描述持久化类
name属性 类的全名
table 该类对应的表名 可以不写,如果不写默认值就是类名
catalog 数据库的名字 一般不用写
-->
<class name="cn.domain.Person" table="person">
<!--
主键
name描述的是属性的名称
column 数据库的字段的名称
type 类型
length 长度
-->
<id name="pid" type="java.lang.Long" length="5">
<column name="pid"></column>
<!--
主键的产生器
increment 由hibernate产生
-->
<generator class="increment"></generator>
</id>
<!--
property是用来描述一般属性
-->
<property name="pname" type="java.lang.String" length="20">
<!--
column可以不写,如果不写,默认属性的名称
-->
<column name="pname"></column>
</property>
<property name="psex" type="java.lang.String" length="5"></property>
</class>
</hibernate-mapping>
在映射文件中的主键产生器的类型
主键的生成机制
* * increment
* 效率是比较低的,但是主键的值是连续的,hibernate内部会去查询该表中的主键的最大值,然后把最大值加1 *
* identity
* 根据底层的数据库的自增生成,效率比较高,但是主键的值不连续,注意,当采用这种机制时,数据库中主键要选择自增类型。
* * assigned
* 手动赋值
* * uuid
* * sequence
java对应的持久化类该持久化类中一定要保证有一个不带参数的构造方法,原因是当通过hibernate框架反射出持久化类对象时,会调用到不带参数的构造方法。