【发布时间】:2017-05-25 22:19:24
【问题描述】:
我已阅读有关 DAO 类和服务类的信息,但我不明白它们的用途。 我已经用 spring 和 hibernate 在 maven 中启动了一个项目,直到现在我已经在 servlet.xml 中添加了 hibernate 的配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>com.fabbydesign.model.Useradmin</value>
</list>
</property>
</bean>
控制器的登录方法如下:
@RequestMapping(value = "/do.html", method = RequestMethod.POST)
public String doLogin(@Valid @ModelAttribute("userLogin") LoginForm lf, BindingResult bindingResult, Map<String, Object> model, HttpServletRequest request){
//bindingResult.rejectValue("username", "label.title"); - to add new message error
logger.trace("showLogin - post");
//check fields if the filds are filled and respects the size from beans
if(bindingResult.hasErrors())
return "login";
boolean userExists = loginService.checkLogin(lf.getUsername(), lf.getPassword());
if(!userExists){
bindingResult.rejectValue("username", "login.username.wrongUserOrPassword");
return "login";
}
else{//set session
request.getSession().setAttribute(adminSesName, true);
}
return "redirect:/admin/dashboard.html";
}
loginServiceImpl:
@Service("loginService")
公共类 LoginServiceImpl 实现 LoginService {
@Autowired
private LoginDAO loginDAO;
public void setLoginDAO(LoginDAO loginDAO) {
this.loginDAO = loginDAO;
}
public Boolean checkLogin(String userName, String userPassword) {
return loginDAO.checkLogin(userName, userPassword);
}
和 loginDAOimpl:
@Repository("loginDAO")
公共类 LoginDAOImpl 实现 LoginDAO {
@Resource(name = "sessionFactory")
protected SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
return sessionFactory.openSession();
}
final static Logger logger = Logger.getLogger(LoginDAOImpl.class);
public boolean checkLogin(String username, String password) {
Boolean userFound = false;
Session session = sessionFactory.openSession();
String sql = "from Useradmin where username = ?";
Query<?> query = session.createQuery(sql);
query.setParameter(0, username);
List<?> list = query.list();
if ((list != null) && (list.size() == 1)) {
Useradmin ua = (Useradmin) list.get(0);
if (BCrypt.checkpw(password, ua.getPassword())) {
userFound = true;
}
}
return userFound;
}
那么,我应该在服务类和 DAO 类中写什么? 我的理解是,从数据库中操作数据的代码需要保留在 DAO 类中,但服务类是干什么用的? 谢谢!
【问题讨论】:
-
服务类用于业务逻辑
-
DAO - 数据库层,运行数据查询
-
您可以暂时阅读这些 SO 帖子:DAO,Service classes
-
我投票结束这个问题,因为这个问题是关于架构而不是编程问题
标签: java spring hibernate dao service-layer