实训总结day6

今天主要是完成了登录功能和商品信息的查询以及查询结果的分页功能。
老师已经提供了这个项目完整的jsp页面,我们只需做稍加修改即可,而且dao层的几乎全部代码已经由mybatis的逆向工程一键自动生成(如果要做多表连接操作还需手动写),我们只需写少量的代码完成service层和controller层的实现即可。
这样一来,不去关注dao层的具体实现以后,每当我们需要添加一个功能,都从service层入手,套路都是一致的。

  1. 首先定义一个接口,该接口里的抽象方法可看做是实现某个具体功能的抽象。我们需要关注的是这个接口的抽象方法需要的哪些参数,参数类型、返回值类型是什么。2.
  2. 然后需要定义该接口具体的实现类,这个实现类必须使用SpringMVC框架提供的@Service注解为一个服务。同时,要使用mybatis逆向工程为我们生成的mapper接口的对象,不用自己手工创建,我们就需要使用另一个注解@Autowired进行依赖注入,有了这个mapper接口的对象,我们省去了很多麻烦,[包括:加载mabatis的资源配置文件生成一个InputStream对象,利用这个InputStream对象创建SqlSessionFactory的具体实例sqlsession的工厂,然后这个工厂调用openSession( )方法实例化数据库连接对象sqlSession,sqlSession在利用反射机制创建出一个集具体功能于一身的mapper对象。] 这些活我们都不用自己干了,Spring一个注解搞定。其次,如果要做查询操作,我们还需要创建用来封装条件的对象adminExample,它的实现类也是由逆向工厂自动生成。
  3. 然后完成控制层代码的实现,控制层必须使用@Autowired依赖注入Service接口的对象。如果需要存取查询的结果,还需要使用一些内置对象比如model,session等。
  4. 然后再相应jsp页面取出存取的对象,做所需操作。

登录功能实现案例

service接口:

public interface AdminService {
    //登录判断
    public boolean login(String name,String pwd);
}

service实现类:

@Service
public class AdminServiceImpl implements AdminService {
    //切记切记,要有mapper接口的对象,此对象由Spring创建并注入
    @Autowired  //Spring根据类型进行依赖注入
    AdminMapper adminMapper;
    @Override
    public boolean login(String name, String pwd) {
        boolean flag = false;
        //传入用户名,查到admin对象,取出对象中的密码与传来的密码进行对比,判断登录是否成功
        //创建封装条件的对象adminExample
        AdminExample adminExample = new AdminExample();
        //添加用户名为查找条件
        adminExample.createCriteria().andANameEqualTo(name);
        List<Admin> list = adminMapper.selectByExample(adminExample);
        if(list.size()>0){
            Admin admin = list.get(0);
            if(admin.getaPass().equals(pwd)){
                flag = true;
            }
        }
        return flag;
    }
}

controller代码:

@Controller
@RequestMapping("/admin")
public class AdminController {
    //切记,必须要有service的对象
    @Autowired     //spring把依赖都加好了,然后给你,这里如果用new反而错了
    AdminService adminService;
    //完成登录处理
    @RequestMapping("/login")
    public String login(String name, String pwd, Model model){
        boolean flag = adminService.login(name,pwd);
        if(flag){
            model.addAttribute("adminName",name);
            return "main";
        }else {
            model.addAttribute("error","用户名或密码错误");
            return "login";
        }
    }
}

对查询结果的分页

关于分页功能,这是一个难点,我们使用到了一个jar包(pagehelper-5.1.2.jar)帮我们处理,值得一提的是,mybatis框架的大部分功能几乎都可以被Spring框架替代(我们这个项目其实还是用的mybatis),而分页功能却还没有,在我们项目的资源配置文件中也体现了这一点,mybatis框架的核心配置文件SqlMapConfig.xml中仅仅注册了一个分页插件。
pagehelper-5.1.2.jar 这个分页jar包功能很强大,它几乎囊括了我们能想到所有各种类型的分页需求。
对查询结果进行分页处理,相当于也是添加了一个新的功能,还是那套流程。(不过在jsp页面上得会使用)

//进行分页的处理
    public PageInfo splitPage(int page,int pageSize);
    @Override
    public PageInfo splitPage(int page, int pageSize) {
        ProductInfoExample productInfoExample = new ProductInfoExample();
        //为了在最前面显示新上线的商品,我们这里进行排序操作,指定数据库中的列名排序
        productInfoExample.setOrderByClause("p_id desc");
        //使用分页查询设置数据,切记,在提取集合之前,一定要使用分页工具设置当前页与每页的记录数
        PageHelper.startPage(page,pageSize);
        //这一步查询到的是根据id倒序排列的所有商品
        List<ProductInfo> list = productInfoMapper.selectByExample(productInfoExample);
        PageInfo<ProductInfo> pageInfo = new PageInfo<>(list);
        return pageInfo;
    }
    @RequestMapping("/split")
    //@RequestParam可以给参数设置初始值
    public String split(@RequestParam(defaultValue = "1") Integer page,Model model){
        PageInfo info = productInfoService.splitPage(page,PAGE_SIZE);
        model.addAttribute("info",info);
        return "product";
    }
    @ResponseBody
    @RequestMapping("/ajaxSplit")
    public void ajaxSplit(@RequestParam(defaultValue = "1") Integer page,HttpSession session){
        PageInfo info = productInfoService.splitPage(page,PAGE_SIZE);
        session.setAttribute("info",info);
        return ;
    }
发布了46 篇原创文章 · 获赞 16 · 访问量 2636

猜你喜欢

转载自blog.csdn.net/qq_43598138/article/details/103847735
今日推荐