JavaEE+spring+Mybatis
- 查询功能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");
-
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>
-
使用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); } }
-
掌握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>
-
掌握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>