Hibernate
注解
Hibernate配置文件
1. xxx.cfg.xml 默认加载hibernate.cfg.xmlhibernate配置详解
2. hibernate.properties 作用与xml相同
<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!-- 指定数据库使用的驱动类 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<!-- 指定数据库连接串 -->
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<!-- 指定数据库连接的用户名 -->
<property name="hibernate.connection.username">dengou</property>
<!-- 指定数据库连接的密码 -->
<property name="hibernate.connection.password">123123</property>
<!-- 指定数据库使用的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 指定是否打印SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化sql -->
<property name="hibernate.format_sql">true</property>
<!-- 指定 -->
<property name="hibernate.hbm2ddl.auto">create</property>
<!-- 映射配置文件 -->
<!-- resource指向源文件(xml,等配置文件);class指向类(一般用于注解) -->
<mapping resource="test/hibernate/emp/Emp.hbm.xml" />
</session-factory>
</hibernate-configuration>
hibernate映射
1. xxx.hbm.xml配置映射关系
2. 注解方式配置映射 关系
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 指定类名和表名映射 -->
<class name="test.hibernate.emp.Emp" table="emp1" >
<!-- id:配置数据库中的主键在java中的属性名 -->
<!--hibernate主键生成策略:(generator)
increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。
identity:代理主键,适合于Mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护。
sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。
native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。
hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值
uuid.hex:代理主键,hibernate采用uuid 128位算法生成基于字符串的主键值
assign:适合于应用程序维护的自然主键。(默认)-->
<id column="empno" name="empno">
<generator class="native"></generator>
</id>
<!-- property:配置其他属性映射 -->
<property name="ename" column="ename" unique="true" ></property>
<property name="sal" column="sal" />
<property name="job" column="job" />
</class>
</hibernate-mapping>
SessionFactory类 :主要负责创建Session的实例
Session类:数据库连接对象(类似Connection)
1. session.get(Class clazz, Serializable id);根据主键值获取实例对象,没有则返回null
2. session.load();
3. load()和get()的区别:
1. load()方法找不到数据时抛出异常(),get()方法找不到数据时返回Null;
2. get()方法是直接检索数据;load()默认是懒加载,(lazy=true),在需要用到该对象时才进行检索
session的缓存
- 清空缓存
- session.clear();清空所有缓存
- session.evict(Object obj);从缓存中清除指定对象
- 清空缓存
session.flush()
- 同步缓存到数据库,执行insert,update,delete等操作,不提交事务
- 只有调用session.flush()之后,session缓存中的数据才会发送到数据库,进行真正的持久化操作
- transaction.commit() 提交事务之前会调用 session.flush()
- query执行查询之前也会调用session.flush()
Transaction类:事务对象
//创建一个配置对象
configuration = new Configuration().configure();
//创建一个服务对象
ServiceRegistry build = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
//创建SessionFactory对象
sessionFactory = configuration.buildSessionFactory(build);
//创建一个新的session对象
session = sessionFactory.openSession();
session = sessionFactory.currentSession();
Query类:通过Query对象,可以使用类似SQL语法的HQL来执行常规的数据库操作
1. 获取Query对象
java
Query query = session.createQuery(String HQL);
执行查询
如果HQL语句中需要有变量,可以用 “?” 或者 命名参数
- ”?” 替代的方法,与java.sql.PreparedStatement的 “?” 用法类似,注意:query.set(index, value)的index(下标)是从 0 开始
//sql语句 String sql = "Select * from emp where eno = ? and sal = ?"; //PreparedStatement的set方法示例: ps.set(1, XXX); ps.set(2, XXX); //hibernate.Query的set方法示例: query.set(0, XXX); query.set(1, XXX); //Query的命名参数方法
- ”?” 替代的方法,与java.sql.PreparedStatement的 “?” 用法类似,注意:query.set(index, value)的index(下标)是从 0 开始
java.util.Calendar 日历类(抽象类)
- 静态属性s
- YEAR,MONTH,DATE…指的是字段数字值
- 获取字段值 get(int field) field:可以是 YEAR,MONTH… 等属性,也可以是 int 类型的字段数字值
- 获取实例
- Calendar.getInstance(); //使用默认时区和语言环境获得一个日历
关于java中几种特殊的注释 (可以被eclipse检测到,在task视图中可查看)
- TODO:说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。
- FIXME:说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。
- XXX:说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进,要改进的地方会在说明中简略说明。