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();
}
}