项目简介
技术选型:Maven、Spring、SpringMVC、Mybatis、Spring-security、Mysql、AdminLTE、JSP
功能:完成一些CRUD等操作
我们的页面通常都是放在WEB-INF下的,这样资源就会受到保护,客户端不能直接访问,我们有些请求就访问不到WEB-INF下的资源。
解决办法:
1.新建一个用于转发到指定页面的controller,通过视图解析器转发到WEB-INF目录下要访问的资源。
@Controller
@RequestMapping("/forward")
public class ForwardPageController {
@RequestMapping("/forwardProductAdd")
public String forwardProductAdd() {
return "product-add";
}
}
2.把要跳转的请求路径先跳转到controller去,由controller帮我们跳转到WEB-INF目录下。
onclick="location.href='${pageContext.request.contextPath}/forward/forwardProductAdd'">
主要功能实现分析 :
产品查询所有流程
产品添加流程
在产品添加的时候出现了类型转换异常,页面提交到服务器端的是字符串,无法转换为日期类型,所有我们需要配置一下类型转换器,有3种方法(1.实体类中加日期格式化注解。2.属性编辑器。3. 类型转换器Converter。我们这里用的是第一种)。
解决步骤:
1.只需在类型转换出现异常的属性上添加一个注解。
例:@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm”)
private Date departureTime; // 出发时间
订单查询流程
查询订单时包含有产品信息,当我们在查询订单时就需要把产品信息也查询出来,而且这是旅游的后台管理系统,所以根据业务需求一个订单只对应一个产品,是多对一的关系,因此在订单实体类中应包含一个产品对象引用。
@Select("select * from orders")
@Results({
@Result(id=true,property = "id",column = "id"),
@Result(property = "orderNum",column = "orderNum"),
@Result(property = "orderTime",column = "orderTime"),
@Result(property = "orderStatus",column = "orderStatus"),
@Result(property = "peopleCount",column = "peopleCount"),
@Result(property = "peopleCount",column = "peopleCount"),
@Result(property = "payType",column = "payType"),
@Result(property = "orderDesc",column = "orderDesc"),
@Result(property = "product",column = "productId",javaType = Product.class,one = @One(select = "cn.kjcoder.dao.ProductDao.findById"))
})
List<Orders> findAll() throws Exception;
分页查询
使用PageHelper实现分页查询,PageHelper是国内非常优秀的一款开源的mybatis分页插件。
使用步骤:
1.添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>xxxxx</version>
</dependency>
2.在spring配置文件中的SqlSessionFactory中传入pagehelper的插件
/* 传入PageHelper的插件 */
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
3.在需要进行分页的查询方法前调用PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个查询方法会进行分页。
public List<Orders> findAll(int page,int size) throws Exception {
//第一个参数为页码值,第二个参数为每页显示的条数
//这条语句必须写在调用dao方法的前面,并且中间不能有别的语句(紧跟着的第一个方法会进行分页)
PageHelper.startPage(page,size);
return ordersDao.findAll();
}
PageInfo是PageHelper为我们提供的一个分页Bean
@Controller
public ModelAndView findAll(@RequestParam(name = "page",required = true,defaultValue = "1")Integer page,@RequestParam(name = "size",required = true,defaultValue = "3")Integer size) throws Exception{
ModelAndView mv = new ModelAndView();
List<Orders> all = ordersService.findAll();
PageInfo pageInfo = new PageInfo(all);
mv.addObject("pageInfo",pageInfo);
mv.setViewName("orders-page-list");