09-web后端开发(重要)
一、三层架构
web:表示层。负责接受前端发送的请求。并响应数据。
service:业务层。负责处理具体的业务逻辑。
dao:持久层。负责对数据库进行增删查改操作。
三层架构的目标(高内聚 低耦合 )

二、学生管理系统 (*)
1.准备环境
(步骤):创建新的模块,引入坐标
创建包结构(domain、util、servlet、service、mapper)
添加文件(Mybatis配置文件、工具类、实体类)
添加过滤器(全局处理中文乱码)
添加前端页面
部署测试
(具体):创建一个maven模块,将其java文件转换为web项目
在pom.xml文件中导入依赖
mysql mysql-connector-java 8.0.28 org.mybatis mybatis 3.5.9 org.projectlombok lombok 1.18.26 com.fasterxml.jackson.core jackson-databind 2.9.9 junit junit 4.12 cn.hutool hutool-all 5.4.3 javax.servlet javax.servlet-api 3.0.1 org.apache.maven.plugins maven-war-plugin 3.2.2
创建包结构,面向接口编程,导入各个文件

查询学生:(需要返回值 不需要参数 根据接口文档获取接口地址)
表示层
@WebServlet("/studentServlet")
public class StudentServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取请求参数String action = req.getParameter("action");if ("findAll".equals(action)) {findAll(req, resp);}else{System.out.println("error");}}//创建业务类对象StudentService studentService = new StudentServiceImpl();//查询(有返回值)private void findAll(HttpServletRequest req, HttpServletResponse resp) throws IOException {//2.调用业务逻辑List list = studentService.findAll();//3.响应结果String json = new ObjectMapper().writeValueAsString(list);resp.getWriter().write(json);}
业务层
public interface StudentService {List findAll();}
//查询学生信息@Overridepublic List findAll() {SqlSession sqlSession = MyBatisUtil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);try {List list = mapper.findAll();return list;} catch (Exception e) {throw new RuntimeException(e.getMessage());} finally {MyBatisUtil.close(sqlSession);}}
持久层
@Select("select * from vue.student")List findAll();
添加学生:(需要返回值 不需要参数 根据接口文档获取接口地址)
表示层
@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.获取请求参数String action = req.getParameter("action");if ("findAll".equals(action)) {findAll(req, resp);}else if("save".equals(action)){save(req,resp);}else{System.out.println("error");}}
//-------------------------------------------------------------------------------
//添加private void save(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取请求参数ServletInputStream is = req.getInputStream();//将获取的字节输出流转换为json个是的字符串String json = IoUtil.read(is, "utf-8");//将json字符串转化为javabeanStudent student = new ObjectMapper().readValue(json, Student.class);//2.调用业务逻辑studentService.save(student);//3.响应结果resp.getWriter().write("OK");}
业务层
void save(Student student);
//-------------------------------------------------
//添加学生信息@Overridepublic void save(Student student) {SqlSession sqlSession = MyBatisUtil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);try {mapper.save(student);} catch (Exception e) {throw new RuntimeException(e);} finally {MyBatisUtil.close(sqlSession);}}
持久层
@Insert("insert into vue.student values (#{id},#{name},#{birthday},#{address})")void save(Student student);
删除学生:(不需要返回值,需要参数)
表示层
//删除private void deleteById(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取请求参数String id = req.getParameter("id");//2.调用业务逻辑studentService.deleteById(id);//3。响应结果resp.getWriter().write("OK");}
业务层
//删除@Overridepublic void deleteById(String id) {//获取sqlSession,创建mapper对象SqlSession sqlSession = MyBatisUtil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//调用mapper删除方法try {mapper.deleteById(id);//无返回值直接调用删除方法} catch (Exception e) {throw new RuntimeException(e.getMessage());} finally {MyBatisUtil.close(sqlSession);}}
持久层
@Delete("delete from vue.student where id = #{id}")void deleteById(String id);
回显(需要返回值,需要参数)及修改(不需要返回值,需要参数)
表示层
//修改private void update(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取请求参数//如果页面发送的是ajax,并且格式为json 只能怪使用字节输入流来接收ServletInputStream is = req.getInputStream();//把流转换为字符串String json = IoUtil.read(is, "utf-8");//把json字符串转换为javabeanStudent student = new ObjectMapper().readValue(json,Student.class);//2.业务类对象调用业务逻辑studentService.update(student);//3.响应结果resp.getWriter().write("OK");}//回显private void findById(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取请求参数String id = req.getParameter("id");//2.用业务类调用业务逻辑方法Student student = studentService.findById(id);//把数据转换成前端识别的json格式字符串String json = new ObjectMapper().writeValueAsString(student);//3.响应结果resp.getWriter().write(json);}
应用层
//回显@Overridepublic Student findById(String id) {//获取sqlSession,创建mapper对象SqlSession sqlSession = MyBatisUtil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//调用mapper回显方法try {return mapper.findById(id);//返回Student对象} catch (Exception e) {throw new RuntimeException(e.getMessage());//向外抛} finally {MyBatisUtil.close(sqlSession);}}//修改@Overridepublic void update(Student student) {//获取sqlSession,创建mapper对象SqlSession sqlSession = MyBatisUtil.getSqlSession();StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//调用mapper修改方法try {mapper.update(student);//调用修改方法} catch (Exception e) {throw new RuntimeException(e.getMessage());} finally {MyBatisUtil.close(sqlSession);}}
持久层
@Select("select * from vue.student where id=#{id};")Student findById(String id);@Update("update vue.student set name=#{name},address=#{address} where id = #{id}")void update(Student student);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
