09-web后端开发(重要)

一、三层架构

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

二、学生管理系统 (*)

        1.准备环境
                (步骤):创建新的模块,引入坐标
                                 创建包结构(domain、util、servlet、service、mapper)
                                 添加文件(Mybatis配置文件、工具类、实体类)
                                 添加过滤器(全局处理中文乱码)
                                 添加前端页面
                                 部署测试
                 (具体):创建一个maven模块,将其java文件转换为web项目
                                  在pom.xml文件中导入依赖

mysqlmysql-connector-java8.0.28org.mybatismybatis3.5.9org.projectlomboklombok1.18.26com.fasterxml.jackson.corejackson-databind2.9.9junitjunit4.12cn.hutoolhutool-all5.4.3javax.servletjavax.servlet-api3.0.1org.apache.maven.pluginsmaven-war-plugin3.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);


 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部