过程考核2
-
一对多关联关系中po类的编写;
//po类 public class Course { private int id; private String cnum;//课程编号 private String cname;//课程名 private int teacherid;//教师编号 private int className;//授课班级id private String semester;//授课学期 private List<StudentClass> studentClasses;//重点 private List<TeacherBean> teacherBeans;//重点 //注意无参的构造方法 //注意getter和setter方法 public Course(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCnum() { return cnum; } public void setCnum(String cnum) { this.cnum = cnum; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public int getTeacherid() { return teacherid; } public void setTeacherid(int teacherid) { this.teacherid = teacherid; } public int getClassName() { return className; } public void setClassName(int className) { this.className = className; } public String getSemester() { return semester; } public void setSemester(String semester) { this.semester = semester; } public List<StudentClass> getStudentClasses() { return studentClasses; } public void setStudentClasses(StudentClass studentClasses) { this.studentClasses = studentClasses; } public List<TeacherBean> getTeacherBeans() { return teacherBeans; } public void setTeacherBeans(TeacherBean teacherBeans) { this.teacherBeans = teacherBeans; } }
-
一对多关联查询映射文件mapper和dao编写;
<!--mapper映射文件 省略xml头文件--> <!-- 1、注意namespace映射文件所在的位置 2、按照正常的顺序写select语句 3、注意resultMap不是resultType 4、resultMap里面需要把原本的类里面的属性和数据库的table里面的字段对应 5、使用collection标签;property表示本类里面的属性,ofType表示这个属性属于的那个类 6、在collection里面写上调用的那个类的里面的属性和数据库table的字段对应 --> <mapper namespace="..."> <select id="..." parameterType="Integer" resultMap="id1"> select o.*,p.id as pid,p.name,p.price from tb_orders o,tb_product p,tb_ordersitem oi WHERE oi.orders_id=o.id and oi.product_id=p.id and o.id=#{id} </select> <resultMap id="id1" type="Orders"> <id property="id" column="id" /> <result property="number" column="number" /> <!-- 多对多关联映射:collection --> <collection property="productList" ofType="Product"><!--注意ofType,Orders里面的属性productList,类型是Product--> <id property="id" column="pid" /> <result property="name" column="name" /> <result property="price" column="price" /> </collection> </resultMap> </mapper>
//dao类的编写 public class OrderDao { /** * 多对多 */ /*使用sqlSession3步走方法*/ public Orders findOrdersWithPorduct(int orderid){ // 1、通过工具类生成SqlSession对象 SqlSession session = MybatisUtils.getSession();//获取sqlSession // 2、查询id为1的订单中的商品信息 Orders orders = session.selectOne("edu.hfuu.javaee.chapter72.mapper." + "OrdersMapper.findOrdersWithPorduct", orderid);//调用其中的方法;调用sqlSession的方法的时候,前面需要写全路径名 // 3、关闭SqlSession session.close(); return orders;//查询需要有返回值 } }
-
spring中依赖注入的实现;
public class Class1{ /*依赖注入的实现*/ //1、要有一个私有的属性 //2、给这个属性一个setter方法 //3、需要对应的在spring的配置里面配置好bean private Teacher teacher; public void setTeacher(Teacher teacher){ this.teacher = teacher; } }
<bean id="teacher" class="Teacher"/> <!--具体的类路径还是要根据题目来定--> <bean id="class1" class="Class1"> <property name="teacher" ref="teacher"/> </bean> <!--1、把需要使用的两个类在spring配置文件里面注册成bean 2、在需要调用的类注册的bean里面加上property,表示里面的私有的属性 3、property的ref表示之前注册的被调用的class的bean的id -->
-
切入点表达式的编写和释义;
匹配所有目标类的公共方法 execution("public * *(..)") 匹配com.baobaotao包下所有类的所有方法 execution(* com.baobaotao.*(..)) 匹配com.baobaotao包,子孙包下所有类的所有方法 execution(* com.baobaotao .. *(..))
-
是servlet作为控制器处理添加表单的请求(接受请求参数,数据类型转换,存储结果数据,跳转到目标页面或目标servlet)。
public class StudentClassListServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、 接收请求参数,并进行数据类型转换 request.setCharacterEncoding("UTF-8"); String className = request.getParameter("className"); String dept = request.getParameter("dept"); String classCode = request.getParameter("classCode"); StudentClass cla = new StudentClass(); if(className!=null && !"".equals(className.trim())) cla.setClassName(className); if(dept!=null && !"".equals(dept.trim())) cla.setDept(dept); if(classCode!=null && !"".equals(classCode.trim())) cla.setClassCode(classCode); //2、 调用JavaBean实现业务逻辑 StudentClassService service = new StudentClassService(); List<StudentClass> list = service.query(cla); //3、 将结果数据list存储在request作用域,以便jsp共享 request.setAttribute("claList", list); //4、 跳转到目标资源 request.getRequestDispatcher("/WEB-INF/jsp/studentClass/list.jsp").forward(request, response); } }
-
requset获取数据(勿忘类型转换),String与int,Date类型的互相转换。
//1、获取数据 String name = request.getParemeter("name"); //2、String转int String id1 = request.getParameter("id"); int id1 = Integer.parseInt(id1); //3、String转Date SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date1 = request.getParameter("date"); Date date = simpleDateFormat.format(date1)
实验考核
-
1 查询功能servlet+jsp
<!--jsp--> <html> <head> <title>CourseList</title> <style> #title{ font-size: 40px; font-family: 华文楷体, serif; } #select{ font-size: 20px; font-family: 微软雅黑,serif; } #btn{ width: 50%; text-align: center; } #list{ width: 50%; text-align: center; } #list tr{ height: 30px; } </style> <script> function btnQuery() { var cnum = document.getElementsByName("cnum")[0].value; var cname = document.getElementsByName("cname")[0].value; var className = document.getElementsByName("className")[0].value; // alert(cnum + cname + className); location.href = "CourseListIOC?cnum="+cnum+"&cname="+cname+"&className="+className; } function btnAdd() { location.href = "CourseAddUIIOC"; } function btnEdit() { var obj = document.getElementsByName("id"); var ids = []; for (k in obj) { if (obj[k].checked) { ids.push(obj[k].value); } } if (ids.length == 1) { // alert(ids[0]); location.href = "CourseEditUIIOC?id="+ids[0]; }else { alert("请选择一条且只能选择一条记录修改"); } } function btnDelete() { var obj = document.getElementsByName("id"); var ids = []; for (k in obj) { if (obj[k].checked) { ids.push(obj[k].value); } } if (ids.length == 1) { if (confirm("确认删除本条信息吗!")){ location.href = "CourseDeleteIOC?id=" + ids[0]; } }else { alert("请选择一条且只能选择一条记录删除"); } } </script> </head> <body> <div align="center"> <span id="title">课程信息查询</span> </div> <% String cnum = request.getParameter("cnum"); String cname = request.getParameter("cname"); String className = request.getParameter("className"); %> <div align="center"> <table id="select" align="center"> <tr> <td>课程编号:</td><td><input name="cnum" value="<%=cnum==null?"":cnum%>" type="text" /></td> <td>课程名称:</td><td><input name="cname" value="<%=cname==null?"":cname%>" type="text" /></td> <td>授课班级id:</td><td><input name="className" value="<%=className==null?"":className%>" type="text" /></td> <td><input type="button" value="查询" οnclick="btnQuery()" /></td> </tr> </table> <table id="btn" align="center"> <tr> <td><input type="button" value="删除" οnclick="btnDelete()" /></td> <td><input type="button" value="添加" οnclick="btnAdd()" /></td> <td><input type="button" value="修改" οnclick="btnEdit()" /></td> <td><input type="button" value="返回主页" οnclick="location.href='CourseListIOC'" /></td> </tr> </table> </div> <div align="center"> <table id="list" border="2"> <tr> <td></td> <td>课程编号</td> <td>课程名称</td> <td>授课老师id</td> <td>授课班级id</td> <td>授课学期</td> </tr> <% request.setCharacterEncoding("utf-8"); List<Course> CourseList = (List<Course>) request.getAttribute("CourseList"); for (Course cs :CourseList){ %> <tr> <td><input type="checkbox" name="id" value="<%=cs.getId()%>" /></td> <td><%=cs.getCnum()%></td> <td><%=cs.getCname()%></td> <td><%=cs.getTeacherid()%></td> <td><%=cs.getClassName()%></td> <td><%=cs.getSemester()%></td> </tr> <% } %> </table> </div> </body> </html>
//servlet @WebServlet(name = "CourseListServlet", urlPatterns = "/CourseListServlet") public class CourseListServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); String cnum = request.getParameter("cnum"); String cname = request.getParameter("cname"); String className = request.getParameter("className"); System.out.println("cnum "+cnum+" cname "+cname+" className "+className); Course course = new Course(); if (cnum != null && !"".equals(cnum)) { course.setCnum(cnum); } if (cname != null && !"".equals(cname)) { course.setCname(cname); } if (className != null && !"".equals(className)) { course.setClassName(Integer.parseInt(className)); } WebApplicationContext ctx = (WebApplicationContext) request.getServletContext().getAttribute("org.springframework.web.context.WebApplicationContext.ROOT"); // CourseService service = new CourseService(); CourseService service = (CourseService) ctx.getBean("courseService"); List<Course> courseList = service.query(course); request.setAttribute("CourseList", courseList); request.getRequestDispatcher("/WEB-INF/jsp/course/CourseList_annotation.jsp").forward(request,response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
注意服务器端请求转发和客户端重定向的适用场合
//服务器请求转发 response.sendRedirect("CourseListServlet"); //客户端请求重定向 request.getRequestDispatcher("/WEB-INF/jsp/studentClass/list.jsp").forward(request, response);
-
2 mybatis技术实现一对多双向关联,从po类到映射文件、dao类以及接口整合开发,掌握元素if、assiociation、collection的用法
接口的整合:
1、mapper接口名称和对应的mapper.xml名称一样
2、mapper接口名称和对应的mapper.xml路径相同,要在同一个包里面
3、mapper接口里面的方法名要和mapper.xml 里面的id名称相同
4、mapper接口里面方法的参数类型和mapper.xml里面的parameterType相同
5、mapper接口里面的返回值要和mapper.xml里面的resultType相同
//dao类 public class Course { private int id; private String cnum;//课程编号 private String cname;//课程名 private int teacherid;//教师编号 private int className;//授课班级id private String semester;//授课学期 private StudentClass studentClasses; private TeacherBean teacherBeans; public Course(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCnum() { return cnum; } public void setCnum(String cnum) { this.cnum = cnum; } public String getCname() { return cname; } public void setCname(String cname) { this.cname = cname; } public int getTeacherid() { return teacherid; } public void setTeacherid(int teacherid) { this.teacherid = teacherid; } public int getClassName() { return className; } public void setClassName(int className) { this.className = className; } public String getSemester() { return semester; } public void setSemester(String semester) { this.semester = semester; } public StudentClass getStudentClasses() { return studentClasses; } public void setStudentClasses(StudentClass studentClasses) { this.studentClasses = studentClasses; } public TeacherBean getTeacherBeans() { return teacherBeans; } public void setTeacherBeans(TeacherBean teacherBeans) { this.teacherBeans = teacherBeans; } }
<mapper namespace="dao.CourseDao_Mybatis_Interface"> <select id="selectByTwoTables" parameterType="Integer" resultMap="selectTwoTables"> select c.*, stu.className,t.tnum from course c, studentclass stu, teacher t where c.teacherid=t.id and c.className=stu.id and c.id=#{id} </select> <resultMap id="selectTwoTables" type="po.Course"> <id property="id" column="id"/> <result property="cnum" column="cnum"/> <result property="cname" column="cname"/> <result property="semester" column="semester"/> <result property="teacherid" column="teacherid"/> <result property="className" column="className"/> <association property="studentClasses" javaType="po.StudentClass"> <id property="id" column="className"/> <result property="className" column="className"/> </association> <collection property="teacherBeans" ofType="po.TeacherBean"> <id property="id" column="teacherid"/> <result property="tnum" column="tnum"/> </collection> </resultMap> </mapper>
//接口 public interface CourseDao_Mybatis_Interface { public Course selectByTwoTables(Integer id); }
<!--select语句的if标签的使用--> <select id="selectAll" parameterType="po.Course" resultType="po.Course"> select * from course <where> <if test="cnum!= null and !''.equals(cnum)"> and cnum=#{cnum} </if> <if test="cname != null and !''.equals(cname)"> and cname=#{cname} </if> <if test="className != null and !''.equals(className)"> and className=#{className} </if> </where> </select> <!--assoctiation--> <select id="selectByTwoTables" parameterType="Integer" resultMap="selectTwoTables"> select c.*, stu.className,t.tnum from course c, studentclass stu, teacher t where c.teacherid=t.id and c.className=stu.id and c.id=#{id} </select> <resultMap id="selectTwoTables" type="po.Course"> <id property="id" column="id"/> <result property="cnum" column="cnum"/> <result property="cname" column="cname"/> <result property="semester" column="semester"/> <result property="teacherid" column="teacherid"/> <result property="className" column="className"/> <association property="studentClasses" javaType="po.StudentClass"> <id property="id" column="className"/> <result property="className" column="className"/> </association> <association property="teacherBeans" javaType="po.TeacherBean"> <id property="id" column="teacherid"/> <result property="tnum" column="tnum"/> </association> </resultMap> <!--collection见上-->
-
3、使用xml文件和注解两种方式完成切面、切入点和通知的配置
熟练编写切入点表达式<!--配置通知--> <bean id="myAspect" class="aspectj.StudentClassAspectj"/><!--切面类--> <aop:config> <aop:aspect ref="myAspect"> <aop:pointcut id="myPointCut" expression="execution(* service.StudentClassService.*(..))" /><!--切入点表达式--> <aop:before method="myBefore" pointcut-ref="myPointCut" /><!--通知--> </aop:aspect> </aop:config> <!--注解的方式--> <bean id="myAspect" class="aspectj.course.CourseAspectj"/> <aop:aspectj-autoproxy/>
@Component("myAspect") @Aspect//标记为切面类 public class CourseAspectj { //后置通知 /* 1、配置切入点 2、在使用切入点注解之后,需要创建一个public方法,名字随便取,作为切入点的名字 */ @Pointcut("execution(* service.CourseService.*(..))") public void after() { } @After(value = "after()") public void myAfterReturning(JoinPoint joinpoint) { // System.out.println("后置通知:记录日志......"); System.out.println("After......"); String classname = joinpoint.getSignature().getDeclaringTypeName();//获取包名 String methodname = joinpoint.getSignature().getName();//获取方法名 Object[] args = joinpoint.getArgs();//获取参数 Date calltime = new Date(); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String arg=""; for (Object i : args) { arg = arg.concat(","+ i); } Course_ServiceLog serviceLog = new Course_ServiceLog(); serviceLog.setClassname(classname); serviceLog.setMethodname(methodname); serviceLog.setArgs(arg); serviceLog.setCalltime(calltime); // serviceLog.setIssuccess(); serviceLog.setIssuccess(1); System.out.println(classname+" "+methodname+" "+arg+" "+calltime+" "+1); CourseService service = new CourseService(); service.setServiceLog(serviceLog); } }
-
4、掌握spring的设值注入的必备条件,完成java编码和xml配置
//设值注入 public class Course { public String name = "数学"; } //Course类很简单只是定义了一个name并赋值了"数学"。 public class Student { //Student就是注入的目的地,Course是被注入的对象 //想要在Student中使用Course类 private Course course; //如何注入简单类型 private int age; private String name; public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } //setter方式注入一定要生成set方法 public void setCourse(Course course) { this.course = course; } public void shangke (){ System.out.println(age+"岁学生"+name+"正在上"+course.name+"课"); } }
<bean id="course" class="com.niit.DI.Course"></bean> <bean id="student" class="com.niit.DI.Student"> <!-- 以下代码跟Student类中的set方法相关 --> <!-- name就写Student中被注入变量的名称 --> <!-- ref代表spring会按照course为模板去new一个course并赋值到course中 --> <property name="course" ref="course" ></property> <property name="age" value="20"></property> <property name="name" value="biu"></property> </bean>
-
5、掌握springMVC框架下编写控制器类,掌握简单数据类型、POJO、集合的数据绑定。掌握使用Model存储数据。掌握跳转到jsp页面或控制器类的方法。掌握@RequestMapping的使用
//springMVC的控制类 @Controller @RequestMapping("/TestA")//这个mapping可加可不加,加了访问的地址就多了一层 public class CourseList { @RequestMapping("/CourseList")//这里标记的是访问的地址 public String selectCourseList(HttpServletRequest request, Model model) { /* 数据绑定:要求name名称和getParameter里面获取的参数名相同 */ String cnum = request.getParameter("cnum"); String cname = request.getParameter("cname"); String className1 = request.getParameter("className"); int className = Integer.parseInt(className1); System.out.println("cnum " + cnum + " cname " + cname + " className " + className); Course course = new Course(); if (cnum != null && !"".equals(cnum)) { course.setCnum(cnum); } if (cname != null && !"".equals(cname)) { course.setCname(cname); } if (className != 0) { course.setClassName(className); } ApplicationContext applicationContext = new ClassPathXmlApplicationContext("course_applicationContext_Annotation.xml"); CourseService service = (CourseService) applicationContext.getBean("courseService"); List<Course> courseList=service.query(course); //使用model存储数据 model.addAttribute("CourseList", courseList); //返回某个servlet或者是jsp return "CourseList_annotation"; } }