第二次实训课笔记
实训感受
- 今天学了SSM框架,在导入Maven包的时候,花了很长时间。第一次接触感觉比较陌生,相信多练习以后会好很多。
- 今天布置了团队工作,画一个思维导图,我第一次做队长,感觉肩上有责任,要跟队友们一起好好完成这次项目。
总的来说,今天比较能够进入状态了,跟队友的交流也多了一些,对SSM框架有了初步的认识。
实训过程
- 讲解昨天布置的登录模块
- 新建一个Maven项目。等待包的加载。
- 导入配置文件,本次项目有五个配置文件。
(1),applicationContext.xml:文件中主要存储一些配置信息,用于完成Spring和MyBatis之间的组合,主要用于配置bean自动扫描,数据库和事务等等。
(2),pom.xml:主要存储数据库连接的代码
(3),properties.xml:用于处理日志
(4),spring-mvc.xml:用于注射映射器和适配器
(5),web.xml:用于依赖的声明等等 - 编写代码
文件结构
controller层
package com.zr.controller;
import com.zr.dao.IUserDao;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("login.do")
public ModelAndView login(String username,String password){
boolean flag=userService.login(username,password);
ModelAndView modelAndView=new ModelAndView();
if(flag){
modelAndView.setViewName("../ok");
}
else {
modelAndView.setViewName("../failure");
}
return modelAndView;
}
}
service层
UserServiceImpl.java
package com.zr.service.impl;
import com.zr.bean.User;
import com.zr.dao.IUserDao;
import com.zr.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private IUserDao userDao;
@Override
public boolean login(String username, String password) {
User user=userDao.findUserByUsername(username);
if(user!=null&&user.getPassword().equals(password)){
return true;
}
else {
return false;
}
}
}
IUserService.java
package com.zr.service;
public interface IUserService {
boolean login(String username,String password);
}
dao层
package com.zr.dao;
import com.zr.bean.User;
public interface IUserDao {
User findUserByUsername(String username);
}
bean层
package com.zr.bean;
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int 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;
}
}
mapper
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zr.dao.IUserDao">
<select id="findUserByUsername" parameterType="String" resultType="com.zr.bean.User">
select * from tb_user where username=#{username}
</select>
</mapper>
结果展示
登录界面
登录成功
登录失败
总结
Spring MVC 拥有控制器,作用跟Struts类似,接收外部请求,解析参数传给服务层。
Spring 容器属于协调上下文,管理对象间的依赖,提供事务机制。
持久层:DAO层(mapper)
DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,
DAO层的设计首先是设计DAO的接口,
然后在Spring的配置文件中定义此接口的实现类,
然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,
DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
业务层:Service层
Service层:Service层主要负责业务模块的逻辑应用设计。
首先设计接口,再设计其实现的类
接着再在Spring的配置文件中配置其实现的关联。这样我们就可以在应用中调用Service接口来进行业务处理。
Service层的业务实现,具体要调用到已定义的DAO层的接口,
封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得非常简洁。
表现层:Controller层
Controller层:Controller层负责具体的业务模块流程的控制。
在此层里面要调用Service层的接口来控制业务流程。
控制的配置也同样是在Spring的配置文件里面进行,针对具体的业务流程,会有不同的控制器,我们具体的设计过程中可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块,这样不仅使程序结构变得清晰,也大大减少了代码量。
Service逻辑层设计
Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。
SSM框架是spring MVC ,spring和mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层。
使用spring MVC负责请求的转发和视图管理。
spring实现业务对象管理,mybatis作为数据对象的持久化引擎。
在执行上,用户的指令通过mapping映射到controller层,Controller调用业务逻辑处理后,跳转到ModelAndView,然后DispacherSerclet查询视图解析器,找到ModelAndView指定的视图,最后讲该视图显示到客户端web上。