Java Web项目的层次结构及常见分包

Java Web项目的层次结构及常见分包

Web项目中的层次

Controller
Service
Dao
  • Controller层:表现层(视图)层。用来显示数据和接收用户数据
  • Service层:业务逻辑层,用来处理页面。先写接口,后写实现类
  • Dao层:持久层(数据访问层)。用来操作数据库

项目中常见的分包

1.controller包
controller
向用户展现的功能,实现用户交互。

public class UserController {public UserService userService;/*** 用户管理列表页*/@RequestMapping(value="/list",method=RequestMethod.GET)public ModelAndView list(ModelAndView model){model.setViewName("user/user_list");return model;}/*** 获取用户列表*/@RequestMapping(value="/get_list",method=RequestMethod.POST)@ResponseBodypublic Map<String, Object> getList(@RequestParam(value="username",required=false,defaultValue="") String username,Page page){Map<String, Object> ret = new HashMap<String, Object>();Map<String, Object> queryMap = new HashMap<String, Object>();queryMap.put("username", "%"+username+"%");queryMap.put("offset", page.getOffset());queryMap.put("pageSize", page.getRows());ret.put("rows", userService.findList(queryMap));ret.put("total", userService.getTotal(queryMap));return ret;}/*** 编辑用户操作*/@RequestMapping(value="/delete",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> delete(@RequestParam(value="ids[]",required=true) Long[] ids){Map<String, String> ret = new HashMap<String, String>();if(ids == null){ret.put("type", "error");ret.put("msg", "请选择要删除的数据!");return ret;}String idsString = "";for(Long id:ids){idsString += id + ",";}idsString = idsString.substring(0,idsString.length()-1);if(userService.delete(idsString) <= 0){ret.put("type", "error");ret.put("msg", "删除失败!");return ret;}ret.put("type", "success");ret.put("msg", "修改成功!");return ret;}/*** 编辑用户操作*/@RequestMapping(value="/edit",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> edit(User user){Map<String, String> ret = new HashMap<String, String>();if(user == null){ret.put("type", "error");ret.put("msg", "数据出错");return ret;}if(StringUtils.isEmpty(user.getUsername())){ret.put("type", "error");ret.put("msg", "用户名不能为空!");return ret;}if(StringUtils.isEmpty(user.getPassword())){ret.put("type", "error");ret.put("msg", "密码不能为空!");return ret;}User existUser = userService.findByUserName(user.getUsername());if(existUser != null){if(user.getId() != existUser.getId()){ret.put("type", "error");ret.put("msg", "该用户名已经存在!");return ret;}}if(userService.edit(user) <= 0){ret.put("type", "error");ret.put("msg", "修改失败!");return ret;}ret.put("type", "success");ret.put("msg", "修改成功!");return ret;}/*** 添加用户操作*/@RequestMapping(value="/add",method=RequestMethod.POST)@ResponseBodypublic Map<String, String> add(User user){Map<String, String> ret = new HashMap<String, String>();if(user == null){ret.put("type", "error");ret.put("msg", "数据出错");return ret;}if(StringUtils.isEmpty(user.getUsername())){ret.put("type", "error");ret.put("msg", "用户名不能为空!");return ret;}if(StringUtils.isEmpty(user.getPassword())){ret.put("type", "error");ret.put("msg", "密码不能为空!");return ret;}User existUser = userService.findByUserName(user.getUsername());if(existUser != null){ret.put("type", "error");ret.put("msg", "该用户名已经存在!");return ret;}if(userService.add(user) <= 0){ret.put("type", "error");ret.put("msg", "添加失败!");return ret;}ret.put("type", "success");ret.put("msg", "添加成功!");return ret;}}

2.service包
用来处理页面。先写接口,后写实现类(用service.impl包)

  • 接口
    service
public interface UserService {public User findByUserName(String username);public int add(User user);public int edit(User user);public int delete(String ids);public List<User> findList(Map<String,Object> queryMap);public int getTotal(Map<String,Object> queryMap);
}
  • 实现类

service.impl

public class UserServiceImpl implements UserService{@Autowiredprivate UserDao userDao;@Overridepublic User findByUserName(String username) {// TODO Auto-generated method stubreturn userDao.findByUserName(username);}@Overridepublic int add(User user) {// TODO Auto-generated method stubreturn userDao.add(user);}@Overridepublic List<User> findList(Map<String,Object> queryMap) {// TODO Auto-generated method stubreturn userDao.findList(queryMap);}@Overridepublic int getTotal(Map<String, Object> queryMap) {// TODO Auto-generated method stubreturn userDao.getTotal(queryMap);}@Overridepublic int edit(User user) {// TODO Auto-generated method stubreturn userDao.edit(user);}@Overridepublic int delete(String ids) {// TODO Auto-generated method stubreturn userDao.delete(ids);}}

3.dao包
dao
操作数据库,实现数据的增删改查

public interface UserDao {public User findByUserName(String username);public int add(User user);public int edit(User user);public int delete(String ids);public List<User> findList(Map<String,Object> queryMap);public int getTotal(Map<String,Object> queryMap);
}

4.entity包
entity
用来编写实体类(模型),entity包中类的数据类型,变量名必须和数据库表的数据类型属性名相对应。
数据库内容

public class User {private Long id;//用户id,主键、自增private String username;//用户名private String password;//密码public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

5.util包
用来存放工具类。
如字符串的处理,日期类的处理
util

public class StringUtil {/*** 将给定的list按照指定的分隔符分割成字符串返回*/public static String joinString(List<Long> list,String split){String ret = "";for(Long l:list){ret += l + split;}if(!"".equals(ret)){ret = ret.substring(0,ret.length() - split.length());}return ret;}public static String generateSn(String prefix,String suffix){return prefix + new Date().getTime() + suffix;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse中tomcat的简单配置

Eclipse中tomcat的简单配置 将Eclipse与tomcat相关联 如果下拉选项中没有jdk1.8.0_131&#xff0c;就点击后面的选项 把服务器视图调出来&#xff0c;方便之后调试 将tomcat服务器调入 如果要添加项目&#xff0c;点击右键&#xff0c;选择Add and Remove… 最后&#xff0…

AI智能体学会动物进化法则:李飞飞等提出深度进化RL

来源&#xff1a;机器之心编辑&#xff1a;杜伟、魔王、陈萍在过去 6 亿年中&#xff0c;进化带来了不同类型的「无尽之形最美」&#xff08;endless forms most beautiful&#xff09;&#xff0c;从古老的两侧对称虫到多种多样的动物形态。这些动物还展示出了显著的具身智能&…

DevExpress v18.1新版亮点——WPF篇(五)

用户界面套包DevExpress v18.1日前终于正式发布&#xff0c;本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能&#xff0c;快来下载试用新版本&#xff01;点击下载>> Spreadsheet Control Spreadsheet Shapes 从简单的线条、矩形…

tomcat修改端口号与eclipse中的tomcat保持一致

tomcat修改端口号与eclipse中的tomcat保持一致 将本地tomcat与eclipse中tomcat的配置信息保持一致&#xff1a;即将eclipse中的tomcat设置为托管模式 1. 添加项目 2. 查看server.xml文件中tomcat的端口号 3. 第一次创建tomcat实例后&#xff0c;双击tomcat服务器&#xff0c;选…

(数据科学学习手札45)Scala基础知识

一、简介 由于Spark主要是由Scala编写的&#xff0c;虽然Python和R也各自有对Spark的支撑包&#xff0c;但支持程度远不及Scala&#xff0c;所以要想更好的学习Spark&#xff0c;就必须熟练掌握Scala编程语言&#xff0c;Scala与Java较为相似&#xff0c;且在Scala中可以调用很…

京东《未来科技趋势白皮书》,101页pdf

来源&#xff1a;专知2020年&#xff0c;疫情震荡全球&#xff0c;经济波动剧烈&#xff0c;无论是国家还是企业&#xff0c;都希望通过把握未来科技“脉搏”&#xff0c;驱散经济下行阴影&#xff0c;实现组织升级迭代。逝者如斯&#xff0c;新的十年&#xff0c;哪些关键技术…

JSP中get和post请求方式的区别及乱码解决方法

JSP中get和post请求方式的区别及乱码解决方法 get提交方式&#xff1a;默认method“get” 和 地址栏、超链接请求方式默认都属于get提交方式 form表单的method属性&#xff1a;提交服务器的http方法&#xff0c;一般为post和get get与post请求方式的区别&#xff1a; get方式 …

RISC-V有何特别之处?

作者&#xff1a;Erik Engheim译者&#xff1a;冬雨整理&#xff1a;陈思20 世纪 90 年代末&#xff0c;RISC 和 CISC 爆发了一场大战&#xff0c;自那以后&#xff0c;大家却说 RISC 和 CISC 的区别没那么重要了了。许多人表示&#xff0c;指令集也就那么回事&#xff0c;对 C…

数据库存取BLOB类型音乐文件的过程及常见错误

数据库存取BLOB类型音乐文件的过程及常见错误 数据库端的准备工作&#xff1a; 新建表&#xff0c;用来存放音乐文件&#xff1a;mymusic 第一列&#xff1a;id 类型&#xff1a;int 第二列&#xff1a;music 类型&#xff1a;blob 将音乐文件存入数据库 /*** */ package cn…

Trie可持久化Trie

WARNING&#xff1a;以下代码未经测试&#xff0c;若发现错误&#xff0c;欢迎指出qwq~ Trie树&#xff08;字典树&#xff09; 一种简单的数据结构&#xff0c;可存储大量字符串&#xff0c;可在$O(len)$的时间内完成插入&#xff0c;删除&#xff0c;查找等操作。 下面是一个…

视觉的目的是什么?从监督学习到对比学习,回顾CV发展史

来源&#xff1a;AI科技评论作者&#xff1a; 周纵苇知乎摘要&#xff1a;视觉&#xff0c;对于人类或动物来说&#xff0c;似乎是一件稀松平常的事情&#xff0c;我们甚至都不需要去有意识地训练自己&#xff0c;就可以天赋一般地认识世界。对于机器而言&#xff0c;理解图片却…

MVC原理及案例分析

MVC原理及案例分析 关于MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;一种软件设计典范&#xff0c;用一种业务逻辑、数据、界面显示分离的方法组织代码&#xff0c;将业务逻辑聚集到…

人工智能的鱼与熊掌:精度与可解释性

来源&#xff1a;陈德旺科学网博客链接地址&#xff1a;http://blog.sciencenet.cn/blog-57940-1270913.html 人工智能自1956年诞生之日&#xff0c;就肩负用计算机程序模拟人类&#xff08;或生物体&#xff09;智能的初心与使命&#xff0c;从而理解智能的工作原理与运作机制…

MVC与三层架构的联系及三层架构实现学生注册功能

MVC与三层架构的联系及三层架构实现学生注册功能 三层架构的逻辑关系&#xff1a; MVC和三层架构的联系&#xff1a; 三层架构实现学生注册功能的逻辑&#xff1a; 学生注册页面&#xff1a; 输入学生信息&#xff1a; 完成学生注册: 代码实现&#xff1a; add.jsp <% …

MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用 原文:MVC5EF6 入门完整教程11--细说MVC中仓储模式的应用摘要&#xff1a; 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识。 第二阶段11&#xff5e;20篇将会侧重于专题的讲解&#xff0c;一篇文章解决一个实际问题。 根据…

Java Web实现信息管理

Java Web实现信息管理 前言&#xff1a; 大二上学期刚学完Oracle&#xff0c;老师就要求用Java语言操作Oracle&#xff0c;当时真的是懵了。回顾自己前两年的生活&#xff0c;大一上学期学习C语言&#xff0c;下学期学习Java&#xff0c;当时教课老师是学硬件的。课上讲一些理…

计算机科学界至今未解决的四大难题

作者&#xff1a;Shalitha Suranga译者&#xff1a;弯月 责编&#xff1a;张文出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在现实生活中&#xff0c;很多难题的解决方案都用到了计算机科学的基础理论。例如&#xff0c; Git 分布式版本控制系统建立…

按字编址与按字节编址

按字编址与按字节编址 要清楚按字编址和按字节编址的区别&#xff0c;先要知道 比特(bit)&#xff0c;字节(byte)&#xff0c;字(word) 之间的关系。 在计算机系统中&#xff0c;总线以固定大小的一块数据进行传输&#xff0c;这一块的数据也称为字(word)&#xff0c;如今的计…

2021年AI关键趋势,AI芯片初创公司可能发生并购

来源&#xff1a;雷锋网作者&#xff1a;包永刚编译&#xff1a;雷锋网人工智能&#xff08;AI&#xff09;和机器学习仍然是技术决策者、行业人士和投资者关注的重点。标普全球市场财智&#xff08;S&P Intelligence&#xff09;2020 7月发布的调查显示&#xff0c;有58%的…

CPU组成结构

CPU组成结构 CPU总体构图 CPU中央处理器&#xff08;Central Processing Unit&#xff09; CPU的结构框图&#xff1a;CPU内部由ALU&#xff08;算术逻辑单元&#xff09;、CU&#xff08;控制器&#xff09;、寄存器&#xff08;PC、IR、PSW、DR、通用寄存器等&#xff09;、…