hibernate 的编写程序及知识点

1 简答题(写概念,思原理)
1.1 Hibernate框架作用
参考答案:
hibernate是一个数据访问框架(持久层框架),在项目中利用Hibernate框架可以实现对数据库的增删改查操作,为业务层构建一个持久层
1.2 Hibernate框架原理–(ORM)
参考答案:
ORM–Object Relation Mapping,对象关系映射.
主要思想:将Java对象与关系表进行自动映射,这样可以将对象直接更新到数据库;查询时,可以自动将数据表记录封装成Java对象.
1.3 Hibernate主要的体系结构
参考答案:
a.实体类(Xxx),可以有n个
与数据表对应,用于封装数据表的一行记录
b.XML映射文件(Xxx.hbm.xml),可以有n个
用于描述实体类与数据表之间的对应关系;类属性与表字段之间的对应关系。
c.主配置文件(hibernate.cfg.xml),可以有1个
用于指定连接数据库的参数,框架参数等
1.4 Hibernate开发的基本步骤
参考答案:
a.引入hibernate框架开发包
b. 添加Hibernate主配置文件
c. 根据数据表,编写实体类,映射文件
d. 利用Hibernate API操作实体对象
2 填空题(读代码、加注释)
2.1 阅读下面的代码,并在指定位置添加注释。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
  3. <!—此句代码的作用是( 将类Fee与数据库表COST做映射 )–>
  4.  <class name="com.tarena.netctoss.pojo.Fee" table="COST">
    
  5.   <!—此句代码的作用是( Fee类的id属性和数据库表的ID列做映射 )-->
    
  6.      <id name="id" column="ID" type="integer">
    
  7.       <!—此句代码的作用是( 使用序列作为主键的生产方式 )-->
    
  8.         <generator class="sequence">
    
  9.             <param name="sequence">FEE_SEQ</param>
    
  10.         </generator>
    
  11.     </id>
    
  12.     <property name="feeName" column="NAME" 
    
  13.         type="string">
    
  14.     </property>
    
  15.     <property name="baseDuration" column="BASE_DURATION" 
    
  16.         type="integer">
    
  17.     </property>
    
  18.     <property name="baseCost" column="BASE_COST" 
    
  19.         type="float">
    
  20.     </property>
    
  21.     <property name="unitCost" column="UNIT_COST" 
    
  22.         type="float">
    
  23.     </property>
    
  24.     <property name="status" column="STATUS" 
    
  25.         type="string">
    
  26.     </property>
    
  27.     <property name="descr" column="DESCR" 
    
  28.         type="string">
    
  29.     </property>
    
  30.     <property name="costType" column="COST_TYPE" 
    
  31.         type="string">
    
  32.     </property>
    
  33.     <property name="createTime" column="CREATIME" 
    
  34.         type="date">
    
  35.     </property>
    
  36.     <property name="startTime" column="STARTIME" 
    
  37.         type="date">
    
  38.     </property>
    
  39. </class>
    

3 编程题(改代码,写代码)
3.1 重构“NETCTOSS登录检查拦截器”案例
重载Struts2的Day05的“NETCTOSS登录检查拦截器”案例,使用Hibernate实现修改和删除功能。
参考答案:
1.按照Struts2的Day02的“NETCTOSS资费的分页显示”案例中,拷贝工程的方法,拷贝struts05_2创建hibernate01_3工程。如图-4,图-5所示。

图- 4

图- 5
2.创建Fee.hbm.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>
  3.  <class name="com.tarena.netctoss.pojo.Fee" table="COST">
    
  4.      <id name="id" column="ID" type="integer">
    
  5.          <generator class="sequence">
    
  6.              <param name="sequence">FEE_SEQ</param>
    
  7.          </generator>
    
  8.     </id>
    
  9.     <property name="feeName" column="NAME" 
    
  10.         type="string">
    
  11.     </property>
    
  12.     <property name="baseDuration" column="BASE_DURATION" 
    
  13.         type="integer">
    
  14.     </property>
    
  15.     <property name="baseCost" column="BASE_COST" 
    
  16.         type="float">
    
  17.     </property>
    
  18.     <property name="unitCost" column="UNIT_COST" 
    
  19.         type="float">
    
  20.     </property>
    
  21.     <property name="status" column="STATUS" 
    
  22.         type="string">
    
  23.     </property>
    
  24.     <property name="descr" column="DESCR" 
    
  25.         type="string">
    
  26.     </property>
    
  27.     <property name="costType" column="COST_TYPE" 
    
  28.         type="string">
    
  29.     </property>
    
  30.     <property name="createTime" column="CREATIME" 
    
  31.         type="date">
    
  32.     </property>
    
  33.     <property name="startTime" column="STARTIME" 
    
  34.         type="date">
    
  35.     </property>
    
  36. </class>
    

3.创建hibernate.cfg.xml

  1. <?xml version='1.0' encoding='UTF-8'?>
  2.        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    
  3.        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
  4. <property name="dialect">
    
  5.     org.hibernate.dialect.OracleDialect
    
  6. </property>
    
  7. <property name="connection.url">
    
  8.     jdbc:oracle:thin:@192.168.0.20:1521:tarena
    
  9. </property>
    
  10. <property name="connection.username">task</property>
    
  11. <property name="connection.password">mistarena</property>
    
  12. <property name="connection.driver_class">
    
  13.     oracle.jdbc.driver.OracleDriver
    
  14. </property>
    
  15. <!-- 将hibernate底层执行的sql语句从控制台显示 -->
    
  16. <property name="show_sql">true</property>
    
  17. <property name="format_sql">true</property>
    
  18. <mapping resource="com/tarena/netctoss/pojo/Fee.hbm.xml" />
    

4.修改FeeDAO,修改update方法,findById方法,deleteById方法,使用Hibernate操作数据库。

  1. package com.tarena.netctoss.dao;
  2. import java.sql.Connection;
  3. import java.sql.Date;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import org.hibernate.Session;
  9. import org.hibernate.Transaction;
  10. import com.tarena.netctoss.pojo.Fee;
  11. import com.tarena.netctoss.utils.ConnectionUtils;
  12. import com.tarena.netctoss.utils.HibernateUitl;
  13. public class FeeDAO {
  14. private static final String findAll = 
    
  15.     "select ID, NAME, BASE_DURATION, BASE_COST, UNIT_COST, CREATIME, STARTIME, STATUS, DESCR,COST_TYPE from (" +
    
  16.         "select rownum r, ID, NAME, BASE_DURATION, BASE_COST, UNIT_COST, CREATIME, STARTIME, STATUS, DESCR,COST_TYPE from COST where rownum  < ?) a " +
    
  17.         "where a.r > ? ";
    
  18. private static final String getTotalPages = "select count(*) from COST";
    
  19. private static final String findByName = "select ID, NAME, BASE_DURATION, BASE_COST, UNIT_COST, CREATIME, STARTIME, STATUS, DESCR,COST_TYPE from COST where NAME=?";
    
  20. // private static final String findById = “select ID, NAME, BASE_DURATION, BASE_COST, UNIT_COST, CREATIME, STARTIME, STATUS, DESCR,COST_TYPE from COST where ID=?”;
  21. // private static final String deleteById = “delete from COST where ID=?”;
  22. // private static final String update =“update COST set NAME=?,BASE_DURATION=?,BASE_COST=?,UNIT_COST=?,”
  23. // + " DESCR=?,COST_TYPE=? where ID=?";
  24. public void update(Fee fee){
    
  25.     Session session = HibernateUitl.getSession();
    
  26.     Transaction tx = session.beginTransaction();
    
  27.     fee.setCreateTime(new Date(System.currentTimeMillis()));
    
  28.     session.update(fee);
    
  29.     tx.commit();
    
  30.     session.close();
    
  31. }
    
  32. public Fee findById(int id){
    
  33.     Session session = HibernateUitl.getSession();
    
  34.     Fee fee = (Fee)session.get(Fee.class, id);
    
  35.     session.close();
    
  36.     return fee;
    
  37. }
    
  38. public Fee findByName(String name){
    
  39.     Connection con = null;
    
  40.     PreparedStatement stmt = null;
    
  41.     ResultSet rs = null;
    
  42.     try {
    
  43.         con = ConnectionUtils.openConnection();
    
  44.         stmt = con.prepareStatement(findByName);
    
  45.         stmt.setString(1, name);
    
  46.         rs = stmt.executeQuery();
    
  47.         Fee fee = null;
    
  48.         if (rs.next()) {
    
  49.             fee = new Fee();
    
  50.             fee.setId(rs.getInt("ID"));
    
  51.             fee.setFeeName(rs.getString("NAME"));
    
  52.             fee.setBaseDuration(rs.getInt("BASE_DURATION"));
    
  53.             fee.setBaseCost(rs.getFloat("BASE_COST"));
    
  54.             fee.setUnitCost(rs.getFloat("UNIT_COST"));
    
  55.             fee.setCreateTime(rs.getDate("CREATIME"));
    
  56.             fee.setStartTime(rs.getDate("STARTIME"));
    
  57.             fee.setStatus(rs.getString("STATUS"));
    
  58.             fee.setDescr(rs.getString("DESCR"));
    
  59.             fee.setCostType(rs.getString("COST_TYPE"));
    
  60.         }
    
  61.         return fee;
    
  62.     } catch (Exception e) {
    
  63.         e.printStackTrace();
    
  64.         throw new RuntimeException(e);
    
  65.     }finally{
    
  66.         ConnectionUtils.closeConnection();
    
  67.     }
    
  68. }
    
  69. public void deleteById(int id){
    
  70.     //创建fee对象
    
  71.     Fee fee =  new Fee();
    
  72.     fee.setId(id);
    
  73.     //删除
    
  74.     Session session = HibernateUitl.getSession();
    
  75.     Transaction tx = session.beginTransaction();
    
  76.     session.delete(fee);
    
  77.     tx.commit();
    
  78.     session.close();
    
  79. }
    
  80. public int getTotalPages(int pageSize) {
    
  81.     Connection con = null;
    
  82.     PreparedStatement stmt = null;
    
  83.     ResultSet rs = null;
    
  84.     try {
    
  85.         con = ConnectionUtils.openConnection();
    
  86.         stmt = con.prepareStatement(getTotalPages);
    
  87.         rs = stmt.executeQuery();
    
  88.         rs.next();
    
  89.         int totalRows = rs.getInt(1);
    
  90.            if (totalRows % pageSize == 0) {
    
  91.                return totalRows / pageSize;
    
  92.            } else {
    
  93.                return totalRows / pageSize + 1;
    
  94.            }
    
  95.        } catch (Exception e) {
    
  96.            e.printStackTrace();
    
  97.            throw new RuntimeException(e);
    
  98.        }finally{
    
  99.            ConnectionUtils.closeConnection();
    
  100.        }
    
  101.    }
    
  102.    public List<Fee> findAll(int page,int pageSize) {
    
  103.        Connection con = null;
    
  104.        PreparedStatement stmt = null;
    
  105.        ResultSet rs = null;
    
  106.        try {
    
  107.            con = ConnectionUtils.openConnection();
    
  108.            stmt = con.prepareStatement(findAll);
    
  109.            int begin = (page-1)*pageSize;
    
  110.            int end = page*pageSize+1;
    
  111.            stmt.setInt(1, end);
    
  112.            stmt.setInt(2, begin);
    
  113.            rs = stmt.executeQuery();
    
  114.            List<Fee> list = new ArrayList<Fee>();
    
  115.            while (rs.next()) {
    
  116.                Fee fee = new Fee();
    
  117.                fee.setId(rs.getInt("ID"));
    
  118.                fee.setFeeName(rs.getString("NAME"));
    
  119.                fee.setBaseDuration(rs.getInt("BASE_DURATION"));
    
  120.                fee.setBaseCost(rs.getFloat("BASE_COST"));
    
  121.                fee.setUnitCost(rs.getFloat("UNIT_COST"));
    
  122.                fee.setCreateTime(rs.getDate("CREATIME"));
    
  123.                fee.setStartTime(rs.getDate("STARTIME"));
    
  124.                fee.setStatus(rs.getString("STATUS"));
    
  125.                fee.setDescr(rs.getString("DESCR"));
    
  126.                fee.setCostType(rs.getString("COST_TYPE"));
    
  127.                list.add(fee);
    
  128.            }
    
  129.            return list;
    
  130.        } catch (Exception e) {
    
  131.            e.printStackTrace();
    
  132.            throw new RuntimeException(e);
    
  133.        }finally{
    
  134.            ConnectionUtils.closeConnection();
    
  135.        }
    
  136.    }
    
  137. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值