学习了hibernate和助教
1、hibernate是一个开放源码的对象关系映射框架。
2、解决数据库操作这一块;
3、双层应用
应用程序层
数据库层
三层应用
表述层
业务逻辑层
数据库层
四层应用
表述层
业务逻辑层(Service)
持久化层(DAO)
数据库层
N层应用
4、层与层之间存在自上而下的依赖关系,底层向上层提供接口,但是一般上一层模块不会跨越一层次去调用。
5、对象的持久化的概念
6、JDBC编程的缺点:
业务逻辑和数据库的访问代码掺杂在一起,使程序结构不清晰。
在程序代码中嵌入面向关系的sql语句,是开发人员不能完全运用面向对象的思维来编写程序
7、ORM模式(对象关系映射)
8、一般情况下,一个持久类和一个表对应,类的每个实例对应表的一条记录。
面向对象概念 面向关系概念
类 表
对象 表的行
属性 表的列
9、在java应用中使用Hibernate的步骤
(1)、创建hibernate的配置文件
(2)、创建持久化类
(3)、创建对象-关系映射文件
(4)、通过hibernate API编写访问数据库的代码
10、hibernate.cfg.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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="connection.driver_class">
oracle.jdbc.OracleDriver
</property>
<property name="myeclipse.connection.profile">Oracle</property>
<property name="show_sql">true</property>
<mapping resource="com/zyz/test/emp.hbm.xml" />
</session-factory>
</hibernate-configuration>
11、写emp的配置文件emp.hbm.xml
<?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="com.zyz.test.Emp" table="emp">
<id name="empno" column="empno">
<generator class="assigned"></generator>
</id>
<property name="ename" column="ename"></property>
<property name="job" column="job"></property>
<property name="mgr" column="mgr"></property>
<property name="hiredate" column="hiredate"></property>
<property name="sal" column="sal"></property>
<property name="comm" column="comm"></property>
<property name="deptno" column="deptno"></property>
</class>
</hibernate-mapping>
12、写简单的一个test的文件测试
package com.zyz.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class Test {
public static void main(String[] args){
Configuration configuration=new Configuration().configure("hibernate.cfg.xml");
SessionFactory sessionFactory=configuration.buildSessionFactory();
//获得session
Session session=sessionFactory.openSession();
//get和load查询
// Emp s=(Emp)session.get(Emp.class,new Integer("7369"));//2是where条件
// System.out.println(s.getEname());
// Emp e=(Emp)session.load(Emp.class, new Integer("7369"));
// System.out.println(e.getEname());
//更新
// Emp emp=new Emp();
session.getTransaction().begin();
// emp.setEmpno(7369);
// emp.setEname("SMITH1");
// session.update(emp);
// Emp e=(Emp)session.get(Emp.class, new Integer("7369"));
// System.out.println(e.getEname());
// //新增
// Emp emp=new Emp();
// emp.setEmpno(1110);
// emp.setEname("zhangsan");
// session.save(emp);
// emp.setEname("lisi");
// session.getTransaction().commit();
String hql="from emp ";
Query query = session.createQuery(hql);
query.setFirstResult(1);//从第二条
query.setMaxResults(3);//取出三条
List<Emp> emplist=query.list();
for(Emp e:emplist){
System.out.println(e.getEname());
}
session.close();
}
}
问题:
1、配置映射关系的时候没有把映射关系找准。
2、hibernate.cfg.xml文件的配置的show_sql 配置为true是可以看到sql的执行语句的。
3、增加的时候存在主键的时候emp.hbm.xml文件需要设置
<generator class="assigned"></generator>
4、取出部分
query.setFirstResult(1);//从第二条
query.setMaxResults(3);//取出三条