ssm项目第三天记录手稿:

1.分页:

在这里插入图片描述

1.1.引入分页依赖:

<!--分页依赖-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.2</version>
        </dependency>

1.2.applicationContext.xml:

  <!-- 把交给IOC管理 SqlSessionFactory -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <!-- 传入PageHelper的插件 -->
            <property name="plugins">
                <array>
                    <!-- 传入插件的对象 -->
                    <bean class="com.github.pagehelper.PageInterceptor">
                        <property name="properties">
                            <props>
                             	<!--改为自己用的数据库-->
                                <prop key="helperDialect">oracle</prop>
                                <!--reasonable为true为了使页数不会越界,即点首页的上一页和尾页的下一页不会出错跳到别的地方-->
                                <prop key="reasonable">true</prop>
                            </props>
                        </property>
                    </bean>
                </array>
            </property>
        </bean>

1.3.应用

OrdersServiceImpl类:

 @Autowired
    private IOrdersDao ordersDao;
    @Override
    public List<Orders> findAll(Integer page,Integer pageSize) {
    //一点要用在查询所有的方法上面,中间不可有其他代码,page总页数,pageSize每页记录条数
        PageHelper.startPage(page,pageSize);
        return ordersDao.findAll();
    }

1.4.查看哪一页和设置每页多少条记录数是从前端发出的请求,因此在查看订单管理时在aside.jsp中设置默认的首页序号和每页记录条数如下:

<li id="system-setting"><a
						href="${pageContext.request.contextPath}/orders/findAll.do?page=1&pageSize=4"> <i
							class="fa fa-circle-o"></i> 订单管理
					</a></li>

特别注意:page=1&pageSize=4是有讲究的,page和pageSize是连接controller端的关键,page和pageSize作为参数在前端请求的参数和后端使用的请求参数名称要一致,如下:
controller类:@RequestParam(name = "page",required = true ,defaultValue = "1") Integer page, @RequestParam(name = "pageSize" , required = true , defaultValue = "10") Integer pageSize中的name的值分别与page=1&pageSize=4对应且相同,建议书写时复制粘贴。

 @Autowired
    private IOrdersService ordersService;
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "page",required = true ,defaultValue = "1") Integer page,
                                @RequestParam(name = "pageSize" , required = true , defaultValue = "10") Integer pageSize){
        System.out.println("测试"+page+""+pageSize);
        ModelAndView mv = new ModelAndView();
        List<Orders> ps = ordersService.findAll(page,pageSize);
        PageInfo pageInfo = new PageInfo(ps);
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("orders-page-list1");
        return mv;
    }

1.5.上示代码中的PageInfo类的了解:

属性介绍:

{pageNum=1,当前页码

pageSize=1,每页个数

size=1,当前页个数

startRow=1,由第几条开始

endRow=1,到第几条结束

total=3,总条数

pages=3,总页数

list=Page{count=true, pageNum=1, pageSize=1, startRow=0, endRow=1, total=3, pages=3, reasonable=false, pageSizeZero=false}[com.zhiyou.zt.bean.Users@6572421],当前页数据

prePage=0,上一页

nextPage=2,下一页

isFirstPage=true,是否为首页

isLastPage=false,是否为尾页

hasPreviousPage=false,是否有上一页

hasNextPage=true,是否有下一页

navigatePages=8,每页显示的页码个数

navigateFirstPage=1,首页

navigateLastPage=3,尾页

navigatepageNums=[1, 2, 3]}页码数

使用心得:由

list=Page{count=true, pageNum=1, pageSize=1, startRow=0, endRow=1, total=3, pages=3, reasonable=false, pageSizeZero=false}[com.zhiyou.zt.bean.Users@6572421],当前页数据

prePage=0,上一页

nextPage=2,下一页

以及上面的其他属性的值以及项目经验,一旦在前端请求了一个诸如查询所有的请求,在controller使用PageInfo对象将page,pageSize封装后,该PageInfo对象其他属性值就会自动根据page,pageSize的值生成,同时前端直接通过对象.属性值就可以获得相应的值,后面介绍,代码:

 @Autowired
    private IOrdersService ordersService;
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(name = "page",required = true ,defaultValue = "1") Integer page,
                                @RequestParam(name = "pageSize" , required = true , defaultValue = "10") Integer pageSize){
        System.out.println("测试"+page+""+pageSize);
        ModelAndView mv = new ModelAndView();
        List<Orders> ps = ordersService.findAll(page,pageSize);
        PageInfo pageInfo = new PageInfo(ps);
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("orders-page-list1");
        return mv;
    }

主要是:

List<Orders> ps = ordersService.findAll(page,pageSize);
        PageInfo pageInfo = new PageInfo(ps);
        //下面的"pageInfo"中的值就是pageInfo对应在前端的对象映射,前端直接利用"pageInfo"中的值.就可以获得该对象的属性值。
        mv.addObject("pageInfo",pageInfo);

**还有及其重要的一点就是List<Orders> ps = ordersService.findAll(page,pageSize);中的ps就是pageInfo对象中的属性list。**因此在orders-page-list1.jsp中的遍历:

<c:forEach items="${pageInfo.list}" var="orders">

										<tr>
											<td><input name="ids" type="checkbox"></td>
											<td>${orders.id }</td>
											<td>${orders.orderNum }</td>
											<td>${orders.product.productName }</td>
											<td>${orders.product.productPrice }</td>
											<td>${orders.orderTimeStr }</td>
											<td class="text-center">${orders.orderStatusStr }</td>
											<td class="text-center">
												<button type="button" class="btn bg-olive btn-xs">订单</button>
												<button type="button" class="btn bg-olive btn-xs" onclick="location.href='${pageContext.request.contextPath}/orders/findById.do?id=${orders.id}'">详情</button>
												<button type="button" class="btn bg-olive btn-xs">编辑</button>
											</td>
										</tr>

1.6.页数跳转:

特别注意参数不能用错

<div class="box-tools pull-right">
                        <ul class="pagination">
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=1&pageSize=${pageInfo.pageSize}" aria-label="Previous">首页</a>
                            </li>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum-1}&pageSize=${pageInfo.pageSize}">上一页</a></li>
                            <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
								<li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageNum}&pageSize=${pageInfo.pageSize}">${pageNum}</a></li>
							</c:forEach>
                            <li><a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pageNum+1}&pageSize=${pageInfo.pageSize}">下一页</a></li>
                            <li>
                                <a href="${pageContext.request.contextPath}/orders/findAll.do?page=${pageInfo.pages}&pageSize=${pageInfo.pageSize}" aria-label="Next">尾页</a>
                            </li>
                        </ul>
                    </div>

                </div>

1.7.每页记录数的设置:

注意id = "changePageSize"不可缺,至于缺漏出现的后果我忘了,原因是changePageSize()函数用到这个变量。

  <div class="box-footer">
                    <div class="pull-left">
                        <div class="form-group form-inline">
                            总共2 页,共14 条数据。 每页
                            <select class="form-control" id = "changePageSize" onchange="changePageSize()">
                                <option>1</option>
                                <option>2</option>
                                <option>3</option>
                                <option>4</option>
                                <option>5</option>
                            </select></div>
                    </div>
<script>
function changePageSize() {
			//获取下拉框的值,这就是上面说changePageSize不可缺的原因
			var pageSize = $("#changePageSize").val();

			//向服务器发送请求,改变每页显示条数
			location.href = "${pageContext.request.contextPath}/orders/findAll.do?page=1&pageSize="
					+ pageSize;
		}
		$(document).ready(function() {
			// 选择框
			$(".select2").select2();

			// WYSIHTML5编辑器
			$(".textarea").wysihtml5({
				locale : 'zh-CN'
			});
		});
</script>

2.订单详情:

在这里插入图片描述

2.1.前端请求

点击每个订单的详情,是根据每个订单的id查询其他关联信息的,因此传参${orders.id}
orders-page-list1:

<button type="button" class="btn bg-olive btn-xs" onclick="location.href='${pageContext.request.contextPath}/orders/findById.do?id=${orders.id}'">详情</button>

2.2.后端各层代码

controller:

@Autowired
    private IOrdersService ordersService;
@RequestMapping("/findById.do")
    public ModelAndView findById(@RequestParam(name = "id" , required = true) String ordersID){
        ModelAndView mv = new ModelAndView();
        Orders orders  = ordersService.findById(ordersID);
        mv.addObject("orders",orders);
        mv.setViewName("orders-show");
        return mv;
    }

service实现类:

 @Autowired
    private IOrdersDao ordersDao;
  @Override
    public Orders findById(String ordersID){
        return ordersDao.findById(ordersID);
    }

dao类:

 @Select("select * from orders where id=#{ordersID}")
    @Results({
            @Result(id=true,column = "id",property = "id"),//bug,注意此处column = "id"就是最后一个@Result中的column = "id"
            @Result(column = "orderNum",property = "orderNum"),
            @Result(column = "orderTime",property = "orderTime"),
            @Result(column = "orderStatus",property = "orderStatus"),
            @Result(column = "peopleCount",property = "peopleCount"),
            @Result(column = "payType",property = "payType"),
            @Result(column = "orderDesc",property = "orderDesc"),
            /*在一对一和一对多中,
            在IProductDao的findById方法中要穿String id参数并且方法返回值取决于property的类型值;
            方法的返回值与javaType对应;
            column填写的内容是查询结果的依据,也就是根据什么查询所得结果;
            property填写的是查询的结果在主表中的对应的实体属性名称。*/
            @Result(column = "productId",property = "product",javaType = Product.class,one = @One(select = "edu.xlh.ssm.dao.IProductDao.findById")),
            @Result(column = "memberId",property = "member",javaType = Member.class,one = @One(select = "edu.xlh.ssm.dao.IMemberDao.findById")),
            @Result(column = "id",property = "travellers",javaType = java.util.List.class,many = @Many(select = "edu.xlh.ssm.dao.ITravellerDao.findById"))
    })
    public Orders findById(String ordersID);

其他相关dao类操作;

IProductDao:

//根据方法中的参数id来查
@Select("select * from product where id = #{id}")
    public Product findById(String id);

IMemberDao:

 @Select("select * from member where id=#{id}")
    public Member findById(String id);

ITravellerDao:

/*在多对多的关联关系中,常常拆解成一对多(使用一个中间表将两个表的主键作为组合主键),此例以订单表为主表,为一,旅客表为副表,为多,在旅客表中没有与订单表关联的关系,因此通过订单表id到中间表中查询对应多个旅客id,再根据旅客id查询对应旅客信息。*/
  @Select("select * from traveller where id in(select travellerId from order_traveller where orderId=#{ordersId})")
    public List<Traveller> findById(String ordersId);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值