java dao层和base层_Java中DAO层、Service层和Controller层的区别

DAO层:

叫做数据访问层,全称为date access object ,是一种比较底层,比较基础的操作,具体到某个表的增删改查,也就是说某个dao一定是和数据库的某张表一一对应,其中封装了增删改查的操作。建议Dao只做原子操作,增删改查。

Service层:

叫服务层,被称为服务,粗略的理解就是对一个dao 或者多个dao进行再次封装,封装成一个服务,所以这里就不会是一个原子操作了,需要事务控制。

需要根据系统的实际业务需求进行逻辑代码的编写,有些业务逻辑需要通过与数据库交互的,则业务逻辑层需要调用数据访问层(dao)的相关方法实现与数据库的交互,对于一些不需要与数据库进行交互的,则直接编写业务代码,将执行结果反馈给(Controller)即可;

Controller层:

负责请求转发,接收页面过来的参数,传给service处理,接到返回值,再传给页面。只负责与数据库的数据交互,将数据进行存储读取操作

总结:

个人理解DAO面向表,Service面向业务。后端开发时先数据库设计出所有表,然后对每一张表设计出DAO层,然后根据具体的业务逻辑进一步封装DAO层成一个Service层,对外提供成一个服务

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,基于SSM框架的留言功能的设计和实现步骤如下: 1. 创建Maven项目,引入Spring、SpringMVC和MyBatis的相关依赖。 2. 在web.xml配置DispatcherServlet,并指定SpringMVC的配置文件位置。 ``` <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> ``` 3. 在SpringMVC配置文件开启组件扫描和注解驱动,并配置视图解析器。 ``` <context:component-scan base-package="com.example.controller" /> <mvc:annotation-driven /> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 4. 创建数据库,并在MyBatis配置数据源和SQL映射文件。 ``` <dataSource type="POOLED"> <property name="driver" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> <mapper namespace="com.example.dao.MessageDao"> <select id="findAllMessages" resultType="com.example.entity.Message"> SELECT * FROM message </select> </mapper> <mapper namespace="com.example.dao.ReplyDao"> <select id="findAllReplies" resultType="com.example.entity.Reply"> SELECT * FROM reply </select> </mapper> ``` 5. 创建实体类Message和Reply,用于映射数据库的表和字段。 ``` public class Message { private int id; private String content; private Date createTime; private Date updateTime; private List<Reply> replies; // 省略getter和setter方法 } public class Reply { private int id; private int messageId; private String content; private int parentId; private Date createTime; private Date updateTime; private List<Reply> replies; // 省略getter和setter方法 } ``` 6. 创建DAO接口MessageDao和ReplyDao,并在MyBatis配置对应的SQL映射。 ``` public interface MessageDao { List<Message> findAllMessages(); } public interface ReplyDao { List<Reply> findAllReplies(); } ``` 7. 创建Service接口MessageService和ReplyService,并注入DAO依赖,实现查询所有留言和所有回复的方法。 ``` public interface MessageService { List<Message> findAllMessages(); } @Service public class MessageServiceImpl implements MessageService { @Autowired private MessageDao messageDao; @Override public List<Message> findAllMessages() { List<Message> messages = messageDao.findAllMessages(); for (Message message : messages) { List<Reply> replies = messageDao.findRepliesByMessageId(message.getId()); message.setReplies(replies); } return messages; } } public interface ReplyService { List<Reply> findAllReplies(); } @Service public class ReplyServiceImpl implements ReplyService { @Autowired private ReplyDao replyDao; @Override public List<Reply> findAllReplies() { List<Reply> replies = replyDao.findAllReplies(); for (Reply reply : replies) { List<Reply> subReplies = replyDao.findSubRepliesByParentId(reply.getId()); reply.setReplies(subReplies); } return replies; } } ``` 8. 创建Controller,并注入Service依赖,实现查询所有留言和所有回复的接口。 ``` @Controller @RequestMapping("/message") public class MessageController { @Autowired private MessageService messageService; @RequestMapping("/findAll") public ModelAndView findAll() { List<Message> messages = messageService.findAllMessages(); ModelAndView mav = new ModelAndView("message"); mav.addObject("messages", messages); return mav; } } @Controller @RequestMapping("/reply") public class ReplyController { @Autowired private ReplyService replyService; @RequestMapping("/findAll") public ModelAndView findAll() { List<Reply> replies = replyService.findAllReplies(); ModelAndView mav = new ModelAndView("reply"); mav.addObject("replies", replies); return mav; } } ``` 9. 在jsp页面展示查询结果。 ``` <!-- message.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>留言列表</title> </head> <body> <h1>留言列表</h1> <table> <thead> <tr> <th>ID</th> <th>内容</th> <th>创建时间</th> <th>更新时间</th> </tr> </thead> <tbody> <c:forEach items="${messages}" var="message"> <tr> <td>${message.id}</td> <td>${message.content}</td> <td>${message.createTime}</td> <td>${message.updateTime}</td> </tr> <c:forEach items="${message.replies}" var="reply"> <tr> <td>${reply.id}</td> <td>${reply.content}</td> <td>${reply.createTime}</td> <td>${reply.updateTime}</td> </tr> <c:forEach items="${reply.replies}" var="subReply"> <tr> <td>${subReply.id}</td> <td>${subReply.content}</td> <td>${subReply.createTime}</td> <td>${subReply.updateTime}</td> </tr> </c:forEach> </c:forEach> </c:forEach> </tbody> </table> </body> </html> <!-- reply.jsp --> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>回复列表</title> </head> <body> <h1>回复列表</h1> <table> <thead> <tr> <th>ID</th> <th>留言ID</th> <th>内容</th> <th>父级回复ID</th> <th>创建时间</th> <th>更新时间</th> </tr> </thead> <tbody> <c:forEach items="${replies}" var="reply"> <tr> <td>${reply.id}</td> <td>${reply.messageId}</td> <td>${reply.content}</td> <td>${reply.parentId}</td> <td>${reply.createTime}</td> <td>${reply.updateTime}</td> </tr> <c:forEach items="${reply.replies}" var="subReply"> <tr> <td>${subReply.id}</td> <td>${subReply.messageId}</td> <td>${subReply.content}</td> <td>${subReply.parentId}</td> <td>${subReply.createTime}</td> <td>${subReply.updateTime}</td> </tr> <c:forEach items="${subReply.replies}" var="subSubReply"> <tr> <td>${subSubReply.id}</td> <td>${subSubReply.messageId}</td> <td>${subSubReply.content}</td> <td>${subSubReply.parentId}</td> <td>${subSubReply.createTime}</td> <td>${subSubReply.updateTime}</td> </tr> </c:forEach> </c:forEach> </c:forEach> </tbody> </table> </body> </html> ``` 至此,我们完成了基于SSM框架的留言功能的设计和实现。对于查询所有留言和所有回复的接口,我们可以通过访问以下URL进行访问: - 查询所有留言:http://localhost:8080/message/findAll - 查询所有回复:http://localhost:8080/reply/findAll
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值