多对多关系中,

 多对多关系中,实际上,关联关系指的就是中间表,需要根据业务想清楚谁来维护中间表,这里实现的功能是学生选课,也就是说学生是主动的一方,应该由学生添加自己所选的课程,也就是说中间表数据应该由学生来维护的。

  因此可以说,关联关系应该由学生来维护,对于课程来说,关联关系就应该由对方(学生)来进行维护。

  public static void main(String[] args) {

  // 学生选课操作实际上是对学生的修改操作,而不是添加。

  // 先取得一个学生

  TUser user = (TUser) HibernateSessionFactory.getSession()。get(

  TUser.class, "zhangsan");

  // // 以下int值就是该学生选择的课程编号

  // int[] courseIds = { 2, 4, 5 };

  // // 将课程id关联到学生对象中

  // for (int i = 0; i < courseIds.length; i++) {

  // int id = courseIds[i];

  // Course c = new Course();

  // c.setId(id);

  // // 把课程加入到学生选择的课程集合里

  // user.getCourses()。add(c);

  // }

  // 如果想取消这些课程,直接将集合清空

  user.getCourses()。clear();

  // 取消一部分,再添加一部分

  int[] courseIds = { 2, 3,5 };

  // 将课程id关联到学生对象中

  for (int i = 0; i < courseIds.length; i++) {

  int id = courseIds[i];

  Course c = new Course();

  c.setId(id);

  // 把课程加入到学生选择的课程集合里

  user.getCourses()。add(c);

  }

  // 调用学生的修改

  HibernateSessionFactory.getSession()。update(user);

  Transaction tx = HibernateSessionFactory.getSession()

  .beginTransaction();

  tx.commit();

  HibernateSessionFactory.closeSession();

  }

  多对多关系应用--选课功能

  首先,先要实现用户的登陆功能,当用户登陆后,列出所有课程供用户选择。

  登陆功能之前已经实现过了,因此直接将后台代码拷贝过来即可。

  登陆同时,注意,需要将之前选择的课程内容取得,并保存到user里。

  public class TUserDAOImpl implements ITUserDAO {

  public boolean isLogin(TUser user) throws Exception {

  String hql = "FROM TUser AS u WHERE u.userid = ? AND u.password = ?";

  Query query = HibernateSessionFactory.getSession()。createQuery(hql);

  query.setString(0, user.getUserid());

  query.setString(1, user.getPassword());

  List<User> allUser = query.list();

  if (allUser != null && allUser.size() > 0) {

  // 登陆成功

  // 取得查询的结果

  TUser result = (TUser) allUser.get(0);

  // 根据引用传递,将值设置到传入的user中

  user.setRealName(result.getRealName());

  user.setRegistDate(result.getRegistDate());

  user.setLastLoginDate(result.getLastLoginDate());

  // 将用户之前选择过的课程取得

  user.setCourses(result.getCourses());

  return true;

  }

  return false;

  }

  }

  登陆成功后,用户可以看到选课的连接,点这个连接,进入选课页面,选课前,需要先查询出所有课程,列表显示。

  <a href="tuser!selectCoursePre.action">选课</a>

  编写Action的方法,在这里查询所有课程信息。

  public String selectCoursePre() throws Exception {

  allCourse = ServiceFactory.getITUserServiceInstance()。selectCoursePre();

  return "select";

  }

  <result name="select">/pages/user/user_select_course.jsp</result>

  页面显示所有课程列表,通过多选框让用户选择。

  <center>

  用户登陆成功,当前登陆用户为: ${user.realName}

  <br />

  <hr />

  <br />

  <s:form action="tuser!selectCourse.action" method="post" namespace="/" theme="simple">

  可选课程:<s:checkboxlist list="allCourse" listKey="id" listValue="title" name="courseIds"></s:checkboxlist>

  <br/>

  <s:submit value="提交"></s:submit>

  </s:form>

  </center>

  提交后,完成User的修改操作,注意,需要将课程信息合并到User对象里。

  public String selectCourse() throws Exception {

  // 先取得当前登陆用户信息

  TUser loginUser = (TUser) ServletActionContext.getRequest()

  .getSession()。getAttribute("user");

  // 设置该用户选择的课程

  loginUser.getCourses()。clear();

  for (int i = 0; i < courseIds.length; i++) {

  int id = courseIds[i];

  Course c = new Course();

  c.setId(id);

  // 将课程合并到User对象中

  loginUser.getCourses()。add(c);

  }

  ServiceFactory.getITUserServiceInstance()。selectCourse(loginUser);

  // 将用户信息保存回Session

  ServletActionContext.getRequest()。getSession()。setAttribute("user",

  loginUser);

  return "forward";

  }

  <result name="forward">/forward.jsp</result>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值