day16_接口加强练习

day16_接口加强练习

1 mybatis在web应用中 替代原生jdbc

1后端使用三层代码结构

开发过程中 要做(好自测) 容易定位错误出现的位置

dao 完成 本地junit测试

service 完成 本地junit测试

controller 完成 用接口测试工具 测试

2测试人员测什么

以各种奇怪的角度 测试应用程序的使用

2 接口练习

写出完整的服务接口 再通过postman做测试

1.练习sql使用 2 mybatis使用 3 三层代码结构的使用

1.展示所有用户信息 (练习查询的动态sql)

带查询条件(支持动态查询)

用户名 模糊查询

是否有效 精确查询

sql语句

复制代码
-- 根据条件 查询用户信息
select * from admin_user
where username like CONCAT('%','i','%')
and   isvalid = 1

dao

复制代码
    // 如果带条件 方法名尽量起 by XXX
    List<AdminUser> listUserByCondition(AdminUser inputUser);
​
复制代码
    <select id="listUserByCondition" resultMap="AdminUserMap">
​
        select * from admin_user
        <where>
            <if test="username !=null and username !=''">
                username like CONCAT('%',#{username},'%')
            </if>
            <if test="isvalid !=null">
                and   isvalid = #{isvalid}
            </if>
        </where>
​
    </select>

service

复制代码
package com.javasm.service.impl;
​
import com.javasm.dao.AdminUserDao;
import com.javasm.dao.TbAreaDao;
import com.javasm.entity.AdminUser;
import com.javasm.entity.TbArea;
import com.javasm.service.AdminUserService;
import com.javasm.utils.MyBatisHealper;
import org.apache.ibatis.session.SqlSession;
​
import java.util.List;
​
/**
 * @className: AdminUserServiceImpl
 * @author: gfs
 * @date: 2025/10/22 16:37
 * @version: 0.1
 * @since: jdk17
 * @description:
 */
public class AdminUserServiceImpl implements AdminUserService {
​
    @Override
    public List<AdminUser> listUserByCondition(AdminUser inputUser) {
        SqlSession sqlSession = MyBatisHealper.getSqlSession();
        AdminUserDao mapper = sqlSession.getMapper(AdminUserDao.class);
        List<AdminUser> listUser = mapper.listUserByCondition(inputUser);
        MyBatisHealper.backSqlSession(sqlSession);
        return listUser;
    }
}
​

controller

复制代码
package com.javasm.controller;
​
import com.alibaba.fastjson.JSON;
import com.javasm.entity.AdminUser;
import com.javasm.entity.ReturnCode;
import com.javasm.entity.ReturnResult;
import com.javasm.service.AdminUserService;
import com.javasm.service.impl.AdminUserServiceImpl;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
​
/**
 * @className: listUserServlet
 * @author: gfs
 * @date: 2025/10/22 16:39
 * @version: 0.1
 * @since: jdk17
 * @description:
 */
@WebServlet("/listUser")
public class ListUserServlet extends HttpServlet {
​
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1接收参数 转换格式 封装对象
        req.setCharacterEncoding("utf-8");
        String username = req.getParameter("username");
        String isvalidStr = req.getParameter("isvalid");
        Integer isvalid = null;
        if(isvalidStr!=null && !"".equals(isvalidStr)){
            isvalid = Integer.parseInt(isvalidStr);
        }
        AdminUser inputUser = new AdminUser(username,isvalid);
​
        //2调用service
​
        AdminUserService adminUserService = new AdminUserServiceImpl();
        List<AdminUser> listUsers = adminUserService.listUserByCondition(inputUser);
​
        //3根据执行结果 反馈数据
        ReturnResult returnResult = new ReturnResult();
        if(listUsers.size()>0){
            //查询成功
            returnResult.setCode(ReturnCode.QUERY_SUCCESS.getCode());
            returnResult.setMsg(ReturnCode.QUERY_SUCCESS.getMsg());
            returnResult.setReturnData(listUsers);
        }else{
            //查询无数据
            returnResult.setCode(ReturnCode.QUERY_NODATA.getCode());
            returnResult.setMsg(ReturnCode.QUERY_NODATA.getMsg());
        }
​
        //通过数据流返回json
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print(JSON.toJSONString(returnResult));
        writer.close();
​
​
​
​
    }
}
​

2.查询所有菜单信息(练习高级映射)

没有传入参数

需要有父子嵌套关系

sql语句

复制代码
select am2.*,
             am1.mid as submid,am2.menuname as submenuname,am2.url as suburl 
​
from admin_menu am1  inner join admin_menu am2 on am1.pid = am2.mid
​

dao

复制代码
 List<AdminMenu>  listMenuWithSubMenu();
复制代码
<select id="listMenuWithSubMenu" resultMap="AdminMenuWithSubMenuMap">
        select am2.*,
               am1.mid as submid,am2.menuname as submenuname,am2.url as suburl
​
        from admin_menu am1  inner join admin_menu am2 on am1.pid = am2.mid
​
    </select>
​
​
    <resultMap type="com.javasm.entity.AdminMenu" id="AdminMenuMap">
        <id property="mid" column="mid" jdbcType="INTEGER"/>
        <result property="menuname" column="menuname" jdbcType="VARCHAR"/>
        <result property="pid" column="pid" jdbcType="INTEGER"/>
        <result property="url" column="url" jdbcType="VARCHAR"/>
        <result property="show" column="show" jdbcType="INTEGER"/>
        <result property="glyphicon" column="glyphicon" jdbcType="VARCHAR"/>
    </resultMap>
​
​
    <resultMap type="com.javasm.entity.AdminMenu" id="AdminMenuWithSubMenuMap" extends="AdminMenuMap">
        <collection property="subMenu" ofType="com.javasm.entity.AdminMenu">
            <id property="mid" column="submid" jdbcType="INTEGER"/>
            <result property="menuname" column="submenuname" jdbcType="INTEGER"/>
            <result property="url" column="suburl" jdbcType="INTEGER"/>
        </collection>
​
    </resultMap>

service

复制代码
package com.javasm.service.impl;

import com.alibaba.fastjson.JSON;
import com.javasm.dao.AdminMenuDao;
import com.javasm.entity.AdminMenu;
import com.javasm.service.AdminMenuService;
import com.javasm.utils.MyBatisHealper;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @className: AdminMenuServiceImpl
 * @author: gfs
 * @date: 2025/10/22 17:06
 * @version: 0.1
 * @since: jdk17
 * @description:
 */
public class AdminMenuServiceImpl implements AdminMenuService {

    @Override
    public List<AdminMenu> listMenuWithSubMenu() {
        SqlSession sqlSession = MyBatisHealper.getSqlSession();
        AdminMenuDao mapper = sqlSession.getMapper(AdminMenuDao.class);
        List<AdminMenu> listMenus = mapper.listMenuWithSubMenu();
        MyBatisHealper.backSqlSession(sqlSession);
        return listMenus;
    }
}

controller

复制代码
package com.javasm.controller;

import com.alibaba.fastjson.JSON;
import com.javasm.entity.AdminMenu;
import com.javasm.entity.ReturnCode;
import com.javasm.entity.ReturnResult;
import com.javasm.service.AdminMenuService;
import com.javasm.service.impl.AdminMenuServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @className: LiserMenuServlet
 * @author: gfs
 * @date: 2025/10/22 17:07
 * @version: 0.1
 * @since: jdk17
 * @description:
 */
@WebServlet("/listMenu")
public class ListMenuServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //1接收参数 转格式 封装对象

       //2 调用service
        AdminMenuService adminMenuService = new AdminMenuServiceImpl();
        List<AdminMenu> listMenus = adminMenuService.listMenuWithSubMenu();

       //3反馈数据
        ReturnResult returnResult =
                new ReturnResult(ReturnCode.QUERY_SUCCESS.getCode(),
                                 ReturnCode.QUERY_SUCCESS.getMsg(),
                                 listMenus);

        //通过数据流返回json
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print(JSON.toJSONString(returnResult));
        writer.close();
    }
}

3.查询指定用户的菜单信息

用户编号

需要有父子嵌套关系

sql语句

复制代码
select am2.*,
		   am1.mid as submid,am1.menuname as submenuname,am1.url as suburl 
from rel_admin_user_menu rum inner join admin_menu am1 on rum.mid = am1.mid
														 inner join admin_menu am2  on am1.pid = am2.mid

where uid = 7

dao

复制代码
   List<AdminMenu> listMenuByUser(Integer uid);
复制代码
    <select id="listMenuByUser" resultMap="AdminMenuWithSubMenuMap">
        select am2.*,
               am1.mid as submid,am1.menuname as submenuname,am1.url as suburl
        from rel_admin_user_menu rum inner join admin_menu am1 on rum.mid = am1.mid
                                     inner join admin_menu am2  on am1.pid = am2.mid

        where uid = #{uid}


    </select>

    <resultMap type="com.javasm.entity.AdminMenu" id="AdminMenuMap">
        <id property="mid" column="mid" jdbcType="INTEGER"/>
        <result property="menuname" column="menuname" jdbcType="VARCHAR"/>
        <result property="pid" column="pid" jdbcType="INTEGER"/>
        <result property="url" column="url" jdbcType="VARCHAR"/>
        <result property="show" column="show" jdbcType="INTEGER"/>
        <result property="glyphicon" column="glyphicon" jdbcType="VARCHAR"/>
    </resultMap>


    <resultMap type="com.javasm.entity.AdminMenu" id="AdminMenuWithSubMenuMap" extends="AdminMenuMap">
        <collection property="subMenu" ofType="com.javasm.entity.AdminMenu">
            <id property="mid" column="submid" jdbcType="INTEGER"/>
            <result property="menuname" column="submenuname" jdbcType="INTEGER"/>
            <result property="url" column="suburl" jdbcType="INTEGER"/>
        </collection>

    </resultMap>

service

复制代码
    @Override
    public List<AdminMenu> listMenuByUser(Integer uid) {
        SqlSession sqlSession = MyBatisHealper.getSqlSession();
        AdminMenuDao mapper = sqlSession.getMapper(AdminMenuDao.class);
        List<AdminMenu> listMenus = mapper.listMenuByUser(uid);
        MyBatisHealper.backSqlSession(sqlSession);
        return listMenus;
    }

controller

复制代码
package com.javasm.controller;

import com.alibaba.fastjson.JSON;
import com.javasm.entity.AdminMenu;
import com.javasm.entity.ReturnCode;
import com.javasm.entity.ReturnResult;
import com.javasm.service.AdminMenuService;
import com.javasm.service.impl.AdminMenuServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

/**
 * @className: ListMenuByUser
 * @author: gfs
 * @date: 2025/10/22 17:27
 * @version: 0.1
 * @since: jdk17
 * @description:
 */
@WebServlet("/listMenuByUser")
public class ListMenuByUser extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1接参数 转格式 封装对象
        String uidStr = req.getParameter("uid");
        Integer uid = null;
        if(uidStr!=null && !"".equals(uidStr)){
            uid = Integer.parseInt(uidStr);
        }
        //2调用service
        AdminMenuService adminMenuService = new AdminMenuServiceImpl();
        List<AdminMenu> listMenus = adminMenuService.listMenuByUser(uid);

        //3.根据执行结果反馈
        ReturnResult returnResult = new ReturnResult();
        if(listMenus.size()>0){
            //查询成功
            returnResult.setCode(ReturnCode.QUERY_SUCCESS.getCode());
            returnResult.setMsg(ReturnCode.QUERY_SUCCESS.getMsg());
            returnResult.setReturnData(listMenus);
        }else{
            //查询无数据
            returnResult.setCode(ReturnCode.QUERY_NODATA.getCode());
            returnResult.setMsg(ReturnCode.QUERY_NODATA.getMsg());
        }

        //通过数据流返回json
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        writer.print(JSON.toJSONString(returnResult));
        writer.close();

    }
}
相关推荐
提笔了无痕19 小时前
什么是Redis的缓存问题,以及如何解决
数据库·redis·后端·缓存·mybatis
vx Biye_Design1 天前
servlet宠物医院管理系统-计算机毕业设计源码77418
java·vue.js·spring·servlet·eclipse·mybatis
梁辰兴1 天前
企业培训笔记:外卖平台后端--套餐管理模块--回显套餐信息
笔记·vue·mybatis·springboot·外卖管理系统
kkkkk0211062 天前
微服务学习笔记(黑马商城)
java·spring boot·spring·spring cloud·sentinel·mybatis·java-rabbitmq
夜幽青玄2 天前
mybatis-plus调用报 org.springframework.dao.DataIntegrityViolationException 错误处理
开发语言·python·mybatis
毕业设计制作和分享2 天前
springboot150基于springboot的贸易行业crm系统
java·vue.js·spring boot·后端·毕业设计·mybatis
SpiderPex3 天前
论MyBatis和JPA权威性
java·mybatis
瑞士卷@3 天前
MyBatis入门到精通(Mybatis学习笔记)
java·数据库·后端·mybatis
optimistic_chen3 天前
【Java EE进阶 --- SpringBoot】Mybatis - plus 操作数据库
数据库·spring boot·笔记·java-ee·mybatis·mybatis-plus