<--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是把字符串变成命令)