实验考核

JavaEE+spring+Mybatis

  1. 查询功能servlet+jsp
<!--jsp查询-->
<!--
1、考察jsp里面使用request接收存储在request请求里面的数据
	如:Course course = (Course) request.getAttritube("course");
需要注意的是,request获取的数据,是Object类型的数据,需要进行强制类型转换。
-->
<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='CourseList'" /></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>
//servlet
/**
1、servlet需要注意@WebServlet里面的urlparttens,注意题目中给的路径。
示例代码中可以写成@WebServlet("/CourseListServlet")。
2、如果题目中没有说明需要调用的service类已经在spring容器里面,就直接new一个出来使用。
3、存储数据的时候需要使用request.setAttritube()的方式。
4、如果题目里面需要使用“3”里面的方式存储数据,则需要使用请求转发的方式跳转到下一个界面或者servlet;如果没有这样的需求,就可以使用请求重定向的方式跳转。
5、请求转发和请求重定向在下面示例。
*/
@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);
    }
}
//请求转发
request.getRequestDispatcher("/WEB-INF/jsp/course/CourseList_annotation.jsp").forward(request,response);

//请求重定向
request.sendRedirect("/WEB-INF/jsp/course/CourseList_annotation.jsp");
  1. mybatis技术实现一对多双向关联,从po类映射文件dao类以及接口整合开发,掌握元素if、assiociation、collection的用法

    //po类
    //注意:可能需要在class上面注明所在的包
    package po;
    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 List<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 List<TeacherBean> getTeacherBeans() {
            return teacherBeans;
        }
    
        public void setTeacherBeans(List<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>
            <association property="teacherBeans" ofType="po.TeacherBean">
                <id property="id" column="teacherid"/>
                <result property="tnum" column="tnum"/>
            </association>
        </resultMap>
        
        
        <!--一对一关联查询;嵌套查询-->
        <select id="select2" parameterType="Integer" resultMap="select3">
            select * from course where id=#{id}
        </select>
        <resultMap id="select3" type="po.Course">
            <id property="id" colunm="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="className" column="className" javaType="StudentClass" select="edu.hfuu.javaee.mapper.select4" />
        </resultMap>
        
        
        <!--一对多查询;嵌套查询-->
        <select id="select5" parameter="Integer" resultMap="select6">
            select * from tb_orders where id=#{id}
        </select>
        <resultMap id="select6" type="Orders">
            <id property="id" column="id"/>
            <result property="number" column="number"/>
            <collection property="productList" column="id" ofType="Product"
                select="edu.hfuu.javaee.mapper.select6"/>
        </resultMap>
        
        
        <!--一对多查询;嵌套结果-->
        <select id="select8" parameterType="Integer" resultMap="select9">
            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="select9" type="Orders">
            <id property="id" column="id"/>
            <result property="number" column="number"/>
            <collection property="productList" ofType="Product">
                <id property="id" column="pid"/>
                <result property="name" column="name"/>
                <result property="price" column="price"/>
            </collection>
        </resultMap>
    </mapper>
    
    //接口整合开发
    /**
    1、mapper接口名称和对应的mapper.xml名称一样
    
    2、mapper接口名称和对应的mapper.xml路径相同,要在同一个包里面
    
    3、mapper接口里面的方法名要和mapper.xml 里面的id名称相同
    
    4、mapper接口里面方法的参数类型和mapper.xml里面的parameterType相同
    
    5、mapper接口里面的返回值要和mapper.xml里面的resultType相同
    */
    public interface CourseDao_Mybatis_Interface {
    
        public void addCourse(Course course);
    
        public void updateCourse(Course course);
    
        public Course selectById(int id);
    
        public void deleteCourse(int id);
    
        public List<Course> selectAll(Course course) ;
    
        public int selectByCnum(String cnum);
    
        public void  addServiceLog(Course_ServiceLog serviceLog);
    
        public Course selectByTwoTables(Integer id);
    }
    
    
    <!--元素if的用法-->
    <!--
    1、if里面的判断语句写在test表达式里面
    2、如果是直接使用if语句,需要在select语句后面加上where1=1
    3、在判断里面的某个属性是否为空时,=后面是('')单引号
    -->
    <select id="select10" parapeterType="po.Customer" resultType="po.Customer">
        select * from t_customer where 1=1
        <if test="username != null and username != ''">
            and username like concat('%',#{username},'%')
        </if>
    </select>
    
    <!--如果有where元素,也可以使用if元素-->
    <select id="select11" parapeterType="po.Customer" resultType="po.Customer">
        select * from t_customer
        <where>
            <if test="username != null and username != ''">
            	and username like concat('%',#{username},'%')
        	</if>
        </where>
    </select>
    
  2. 使用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方法,名字随便取,作为切入点的名字
        3、前置@Before()
        后置@AfterReturning()
        环绕@Around()
        异常@AfterThrowing()
        最终@After()
        */
        @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);
        }
    }
    
  3. 掌握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>
    
  4. 掌握springMVC框架下编写控制器类,掌握简单数据类型、POJO、集合的数据绑定。掌握使用Model存储数据。掌握跳转到jsp页面或控制器类的方法。掌握@RequestMapping的使用

    //控制器类
    //使用model存储数据,需要在jsp页面使用EL表达式${}取出
    //如model.addAttritube("msg",msg);
    //在jsp页面需要如下执行<p>${msg}</p>
    //注意:使用数据类型绑定的时候,需要保证jsp页面的name属性和controller类里面的方法的参数名称相同,如果不相同,需要使用XXXX(@RequestParam(value="user_id" Integer id))
    //绑定POJO类的时候,前端页面的name属性需要和绑定的PO类中的属性一一对应
    //绑定包装POJO类,就是在一个类里面包含另一个POJO类,这时候,前端界面的name就需要使用类似user.username的方式,否则无法获取到值
    //绑定集合:需要单独定义一个CourseList的po类,然后生成getter和setter方法;在前端页面使用的时候,需要有下标
    @Controller
    public class CourseController {
    
        private String xmlPath = "course_applicationContext_Annotation.xml";
        private ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
    
    
        
        //RequesrMapping的用法
        @RequestMapping("/CourseList")
        public String selectCourseList(HttpServletRequest request, Model model) {
            String cnum = request.getParameter("cnum");
            String cname = request.getParameter("cname");
            String className1 = request.getParameter("className");
            int className = 0;
            if (className1!=null&&!className1.equals("")){
                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);
            }
            System.out.println("courseList="+course);
            CourseService service = (CourseService) applicationContext.getBean("courseService");
            List<Course> courseList=service.query(course);
    //        model.addAttribute("CourseList", courseList);//model存储数据
            request.setAttribute("CourseList", courseList);
            System.out.println("courseList="+courseList);
            return "CourseList_annotation";
        }
    
    //    @RequestMapping("/CourseEditUI")
    //    public String toCourseEditUI(HttpServletRequest request, Model model) {
    //        String id = request.getParameter("id");
    //        int id2 = Integer.parseInt(id);
    //        CourseService service =  (CourseService) applicationContext.getBean("courseService");
    //        Course course = service.getCourse(id2);
            model.addAttribute("course",course);
    //        request.setAttribute("course",course);
    //        return "CourseEdit_annotation";
    //    }
    //
    
    //    @RequestMapping("/CourseEdit")
    //    public String courseEdit(HttpServletRequest request) {
    //        String id = request.getParameter("id");
    //        String cnum = request.getParameter("cnum");
    //        String cname = request.getParameter("cname");
    //        String teacherid1 = request.getParameter("teacherid");
    //        String className = request.getParameter("className");
    //        String semester = request.getParameter("semester");
    //        Course course = new Course();
    //        course.setId(Integer.parseInt(id));
    //        course.setCnum(cnum);
    //        course.setCname(cname);
    //        if (teacherid1 != null && !"".equals(teacherid1)) {
    //            course.setTeacherid(Integer.parseInt(teacherid1));
    //        }
    //        course.setClassName(Integer.parseInt(className));
    //        course.setSemester(semester);
    //        CourseService service = (CourseService) applicationContext.getBean("courseService");
    //        service.updateCourse(course);
    //        return "redirect:CourseList";
    //    }
    
    
    //    @RequestMapping("CourseDelete")
    //    public String courseDelete(HttpServletRequest request){
    //        String id = request.getParameter("id");
    //        CourseService service =  (CourseService) applicationContext.getBean("courseService");
    //        service.deleteCourse(Integer.parseInt(id));
    //        return "redirect:CourseList";
    //    }
    
    
        @RequestMapping("/CourseAddUI")
        public String courseAddUI(HttpServletRequest request){
            return "CourseAdd_annotation";//跳转到页面
        }
    
    
        
        //POJO类的绑定
        @RequestMapping("/CourseAdd")
        public String courseAdd(Course course) throws Exception{
    //        String cnum = request.getParameter("cnum");
    //        String cname = request.getParameter("cname");
    //        String teacherid = request.getParameter("teacherid");
    //        String className = request.getParameter("className");
    //        String semester = request.getParameter("semester");
    //        Course course = new Course();
            String cnum = course.getCnum();
            String cname = course.getCname();
            int className = course.getClassName();
            int teacherid = course.getTeacherid();
            String semester = course.getSemester();
            course.setCnum(cnum);
            course.setCname(cname);
            course.setClassName(className);
            course.setTeacherid(teacherid);
            course.setSemester(semester);
            CourseService service =  (CourseService) applicationContext.getBean("courseService");
            service.addCourse(course);
            return "redirect:CourseList";//重定向到控制类
        }
    
    
        @RequestMapping("/BatchDeletionCourse")
        public String batchDelectionCourse(HttpServletRequest request){
            String ids = request.getParameter("id");
            System.out.println("ids="+ids);
            String[] ids1 = ids.split(",");
            CourseService service = (CourseService) applicationContext.getBean("courseService");
            for (String s : ids1) {
                service.deleteCourse(Integer.parseInt(s));
            }
            return "redirect:CourseList";
        }
    
        @RequestMapping("/BatchEditCourseUI")
        public String BatchEditCourseUI(HttpServletRequest request){
            String ids = request.getParameter("id");
            System.out.println("ids="+ids);
            String[] ids1 = ids.split(",");
            CourseService service = (CourseService) applicationContext.getBean("courseService");
            List<Course> courseList=new ArrayList<>();
            for (String s:ids1){
                courseList.add(service.getCourse(Integer.parseInt(s)));
            }
            request.setAttribute("courseList",courseList);
            return "CourseEdit_annotation";
        }
    
        
        //集合的绑定
        @RequestMapping("/BatchEditCourse")
        public String BatchEditCourse(CourseList courseList) {
            List<Course> courseList1 = courseList.getCourses();
            CourseService service = (CourseService) applicationContext.getBean("courseService");
            for (Course course : courseList1) {
                service.updateCourse(course);
            }
            return "redirect:CourseList";
        }
    }
    
    <!--集合的绑定-->
    <input type="hidden" name="courses[<%=i%>].id" value="<%=list.get(i).getId()%>"/>
                    <td><input name="courses[<%=i%>].cnum" value="<%=list.get(i).getCnum()%>"></td>
                    <td><input name="courses[<%=i%>].cname" value="<%=list.get(i).getCname()%>"></td>
                    <td><input name="courses[<%=i%>].teacherid" value="<%=list.get(i).getTeacherid()%>"></td>
                    <td><input name="courses[<%=i%>].className" value="<%=list.get(i).getClassName()%>"></td>
                    <td><input name="courses[<%=i%>].semester" value="<%=list.get(i).getSemester()%>"></td>
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值