hibernate总结

<--Student.hbm.xml --></--Student.hbm.xml--hibernate文档>

<?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 package="model">
      <class name="Student" table="student">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
       <property name="name" column="name" ></property>
       <property name="pwd" column="pwd" ></property>
       <property name="phone" column="phone" ></property>
       <property name="grade" column="grade" ></property>
       <property name="photo" column="photo" ></property>
       <property name="sex" column="sex" ></property>
             
    </class>
</hibernate-mapping> 


<--HibernateUtil.java --></--HibernateUtil.java---类文件>

package comon;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;

public class HibernateUtil {

    private static SessionFactory sessionFactory;

    private static SessionFactory buildSessionFactory() {
        try {
            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");

            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();

            SessionFactory sessionFactory = configuration
                    .buildSessionFactory(serviceRegistry);

            return sessionFactory;
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null)
            sessionFactory = buildSessionFactory();
        return sessionFactory;
    }

    public static Session openSession() {
        return getSessionFactory().openSession();
    }
}


<-- hibernate.cfg.xml--></hibernate.cfg.xml--文档>

<!--
  ~ Hibernate, Relational Persistence for Idiomatic Java
  ~
  ~ License: GNU Lesser General Public License (LGPL), version 2.1 or later.
  ~ See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
  -->
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/curricula</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">123456</property> 
            
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> 
    <property name="current_session_context_class">thread</property>        
    <property name="show_sql">true</property>
    
    <property name="hbm2ddl.auto">update</property>
    <mapping class="model.Student"/>
        
        </session-factory>
</hibernate-configuration>


<-- Test.java--></--Test.java--Junit测试类>

package test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import model.Student;

public class Test {

    
    public static void main(String[] args) {

        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sessionFactory = cfg.buildSessionFactory();

        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        Student s= new Student();
        s.setName("你好");
        s.setPwd("1314520");
        s.setPhone("13512365478");
        s.setGrade("Grade One");
        session.save(s);
        transaction.commit();
    }
}


<-- StudentDAO.java--></--StudentDAO.java--dao类><--dao 用的方法跟测试类一样--></--dao> 

import model.Student;

public class StudentDAO {

    Session session;
    public void Add(Student s)
    {
        

        Configuration cfg = new Configuration().configure("hibernate.cfg.xml");
        SessionFactory sessionFactory = cfg.buildSessionFactory();

        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
        session.save(s);
        transaction.commit();
    }
}

<--student.xml--></--student.xml--学生文档>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <package name="student" namespace="/student" extends="all">
    <action name="*" class="action.StudentAction" method="{1}">
    
    </action>
    </package>
</struts>


<--struts.xml--></--struts.xml--文档>

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.devMode" value="true" />
    <include file="student.xml"></include>
    <package name="all" namespace="/" extends="struts-default">
    <global-results >
    <result name="main">/main.jsp</result>
    </global-results>
    </package>
</struts>

 

<--web.xml--></--web.xml-- web文档>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_9" version="2.4">
  <display-name>Struts Blank</display-name>
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>


<--实体类--></--><--Student.java--></--Student.java-->
 

package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Student {

    
    private int id;
    private String name;
    private String pwd;
    private String phone;
    private String grade;
    private String photo;
    private String sex;
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getGrade() {
        return grade;
    }
    public void setGrade(String grade) {
        this.grade = grade;
    }
    public String getPhoto() {
        return photo;
    }
    public void setPhoto(String photo) {
        this.photo = photo;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
}

1,
    搭建struts2和hibernate开发环境:
    1.添加hibernate的jar包     lib/required
    2.添加struts2的jar包     apps/解压一个项目blank/lib
    3.添加mysql数据库连接驱动
    4.添加struts2的配置文件struts.xml
    5.添加hibernate的配置文件hibernate.cfg.xml
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/curricula</property> 
    <property name="connection.username">root</property> 
    <property name="connection.password">12345678</property>  
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>         
    <property name="show_sql">true</property>
    
    hbm2ddl.auto 是否自动创建数据库

    6.编写初始化SessionFactory和获取Session的代码。
    SessionFactory:连接池
    Session:连接

    public class HibernateUtil {

    private static SessionFactory sessionFactory;

    private static SessionFactory buildSessionFactory() {
        try {
            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");

            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();

            SessionFactory sessionFactory = configuration
                    .buildSessionFactory(serviceRegistry);

            return sessionFactory;
        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null)
            sessionFactory = buildSessionFactory();
        return sessionFactory;
    }

    public static Session openSession() {
        return getSessionFactory().openSession();
    }
}

2,
    curricula 数据库
    =========================================
    学生
    Student(id,name,pwd,phone,grade,photo)

    1.创建javabean
    getter和setter的快捷键
    alt+shift+s r

    2.建立映射文件
    建立对象与表的对应关系,对象属性与表中字段的对应关系。
    完全限定名

    3.测试程序
    Junit单元测试

    事务 Transaction
    把多个命令绑定成一个事务,要么全部成功,要么全部失败。

    4.用注解方式配置映射关系(一般多用注解配置)
     @Entity
    public class Student {

    private int id;
    private String name;
    private String pwd;
    private String phone;
    private String grade;
    private String photo;
    private String sex;
    private Contact contact;
    private Set<Course> courses =new HashSet<Course>(); 
    
    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

3,
    重复密码不提交,在表单变量中,就不能指定其name属性。
4,
    hibernate中Session用法。
5,
    标签做条件必须用OGNL表达式,其他用EL表达式
    
6,
    上传文件的表单设置
    enctype="multipart/from-data" method="post"
    
    <img id="image" name="image" src="" />
    <input type="file" name="file" οnchange="setImage(this)"/>
    </body>
    <script language="javascript">
    function setImage(obj){
    image.src = obj.value;
    }
    </script>
7,
    创建年的目录:Calendar cal = Calendar.getInstance();
    文件上传:enctype="multipart/form-data"
    
8,
    2.没有联系人的时候,性别处于未选择状态,将其默认值设置为“男”。
    百度 jquery checked
    http://www.cnblogs.com/0banana0/archive/2011/11/16/2251855.html
    .attr("checked",true);

    .attr("checked","checked");

    if($("[name='contact.sex']:checked").length==0)
    {
        $("[name='contact.sex']:eq(1)").attr("checked",true);
    }

    3.解决上传图片预览在浏览器中不显示的问题
    使用一个图片上传预览插件

9,  
    hibernate开发步骤:
    
    1. 新建room.jsp页面

    3.编写实体类 Room

    4.编写Action

    5.配置action

10,
    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-
1.5.3/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-1.5.3/themes/icon.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/jquery-easyui-1.5.3/demo.css">
    用easyui需要引进这些
    
11,
    hibernate的分页
    1.编写一个类来存放分页信息

    //当前页
    private int pageNo;
    //总页数
    private int pageCount;
    //每页的记录条数
    private int pageSize=3;
    //分页按钮个数
    private int btnCount=4;
    
    2.RoomAction main
    (1)只显示当页数据
        要确定页数
    当前是第一页,每页显示10条数据
    
    第一页显示0 - 9      (page-1)*pageSize
    第二页显示10 - 19    (page-1)*pageSize

    当前是第page页,每页显示pager.PageSize条数据
    (page-1)*pager.PageSize

    (2)显示导航按钮

    设置起始位置
    query.query.setFirstResult
    设置最大返回记录数
    query.setMaxResults

    页面传入当前页page

    保存完停留在最后一页
    修改完停留在当前页

    返回
    1.所有数据
    2.总页数

12,
    一对多,外键设在多方
    
13,
    代码重构Alt+shift+M
    
14,
    设置课程的教师信息

  点击单元格,弹出新窗口
  
  新窗口中必须要有course.id,teacher.id,teacher.name

  div 块级元素
  span 行级元神

  设置教师信息的弹出窗口的内容

  a.3个隐藏变量:course.id,teacher.id,teacher.name
  b.显示课程名称
  c.展现教师列表供选择
  d.保存选择的按钮
  
15,
    功能:把课程和老师对应起来
    两个变量
    course.id,teacher.id

    三个变量的问题course.id,teacher.id,teacher.name

    其实只需要两个变量:course.id,teacher.id
    也可以用四个变量,加上course.name,teacher.name

    三个事件

    1.弹出窗口的事件
    2.选择一个老师的事件
    3.保存并关闭窗口的事件

    让ajax以同步方式执行
    $.ajaxSettings.async=false

    全局变量 
    一个cell
    
16,
    1.表单中添加token标签
    <s:token></s:token>

    2.action中配置拦截器
    token和tokenSession

    重复提交后的跳转的result
    invalid.token

    拦截器栈
    excludesMethods 不拦截哪些方法

    3.配置默认全局默认拦截器
    <interceptors>   
          <interceptor-stack name="myStack">     
          <interceptor-ref name="tokenSession">
               <param name="includeMethods">update</param> 
          </interceptor-ref>    
          <interceptor-ref name="defaultStack"/>          
          </interceptor-stack>    
      </interceptors> 
        <default-interceptor-ref name="myStack"/>
        
17,
   复习一对多的关系 ,(不讲多对一的关系)

    老师 课程 

    一个老师可以上多个课程,一个课程,只能由一个老师来上

    对象设计:

    站在老师的角度
    Set courses - getCourses()

    站在课程的角度

    teacher getTeacher()


    数据库的设计:

    在多方增加一个外键

    课程id  课程名称  ...  教师id
    1       c语言           1
    2       java            2


    错误的设计

    教师id 教师名称  ....  课程id
    1      张老师          1,2         (不符合数据库设计规范)


    另外,有mappedBy的对象方,其实体表中不会生成外键

=========================================================

    多对多关系

    学生 和 课程

    一个学生可以选择多门课程,一门课程,也可以被多个学生选择

    学生
    Student(id,name,sex,pwd,phone,grade,photo)

    课程
    Course(id,name,type,hours)

    数据库的设计:

    中间表
    student-course(sid,cid)

    数据库表关系
    sid        cid
    1    1
    1    2
    2    1
    2    2

    对象关系:

    一个学生可以选择多门课程,一门课程可以被多个学生选择
 
    1.站在学生的角度,有一个属性叫做courses
        可以通过getCourses(),得到自己选择的所有课程

    2.站在课程的角度,有一个属性叫做students
        可以通过getStudents,得到选择这门课程的所有学生

    选择一方来维护关联关系,叫做主表

        维护关联关系的一方

    通过学生来添加课程
    student.setCourses(....)

    或者通过课程来添加学生
    course.setStudents(...)

    http://blog.csdn.net/oyzl68/article/details/8176009

    @ManyToMany
    @JoinTable(
            name="student_course", 
            joinColumns={@JoinColumn(name="sid")}, 
            inverseJoinColumns={@JoinColumn(name="cid")} 
    ) 
    多对多关系
    
    @JoinTable(
            name="student_course", 
            joinColumns=@JoinColumn(name="sid"),
            inverseJoinColumns=@JoinColumn(name="cid")        
    ) 
    
18,
    @Entity
    public class Student {
    private int id;
    private String name;
    private String pwd;
    private String phone;
    private String grade;
    private String photo;
    private String sex;
    private Contact contact;
    private Set<Course> courses =new HashSet<Course>(); 
    //必须初始化(Junit测试)才能使用(student.getCourses().add(course1);
        student.getCourses().add(course2);)
19,
    1.修改功能被 禁止重复提交的拦截器拦截
    解决办法,修改时,调用另外的action方法。
    2.修改init.jsp为choose.jsp
    3.将功能链接到菜单中。
    
 20,
    2, $.post("${pageContext.request.contextPath}/course/checkesSelect"
        ,{"course.id":e.lang},function(data){
            eval("e.checked=" +data);
        });
    //(eval是把字符串变成命令)

21,
    StudentDAO中update方法修改:session.merge(student);//修改之前是 saveOrUpdate(arg0);

22,
    CourseAction.java中先关联数据库中的Student
    public String checkit()
    {
        //Student没有与数据库中的Student关联,要去关联
        Student student= (Student) ActionContext.getContext().getSession().get("STUDENT");
        StudentDAO sdao =new StudentDAO();
        student= sdao.get(student);//
        course=dao.get(course)

数据库设计时,一对多关系中,外键字段要设在多方,代码相对来说要简单一些
在多的一方加外键

为什么呢?因为我们在数据库中,可以指定某个课程的教室是哪一个? 但是不能指定每个教室上哪些课程。

1.修改功能被 禁止重复提交的拦截器拦截
 解决办法,修改时,调用另外的action方法。
 
 2, $.post("${pageContext.request.contextPath}/course/checkesSelect"
        ,{"course.id":e.lang},function(data){
            eval("e.checked=" +data);
        });
//(eval是把字符串变成命令)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate分页实现可以通过使用Hibernate的Criteria API或者HQL语句来实现。在引用\[2\]中的代码示例中,使用了Hibernate的findByCriteria方法来进行分页查询。该方法接受一个Criteria对象作为参数,可以设置查询条件和排序方式,并通过指定当前页码和每页显示的记录数来实现分页查询。 在引用\[3\]中的代码示例中,使用了HQL语句来进行分页查询。首先通过查询总记录数来计算总页数,然后通过设置起始索引和每页显示的记录数来获取指定页码的数据。 需要注意的是,以上示例中的代码只是部分代码片段,实际使用时需要根据具体的业务需求进行适当的修改和完善。 总结起来,Hibernate分页实现可以通过使用Criteria API或者HQL语句来设置查询条件和分页参数,从而实现分页查询功能。 #### 引用[.reference_title] - *1* [Hibernate分页实现](https://blog.csdn.net/lenny_wants/article/details/122555560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [hibernate实现分页的几种方式](https://blog.csdn.net/qq_34823118/article/details/78298139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [hibernate实现分页](https://blog.csdn.net/NSJFYS/article/details/117958377)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值