SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。
其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它可以装载bean(也就是我们java中的类,当然也包括service dao里面的),有了这个我们就不用去new来创建对象。
SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制,相当于controller(等价于传统的servlet和struts的action),也就是说可以拦截网站上的请求,调用controller层中相应的方法去处理这个请求,比如说提交一张表单,springMVC就会拦截这个请求,并调用该相应方法去处理(对表单数据的增删查改),然后返回到相应页面或者是返回客户数据。
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架,也就是来管理sql,与数据库打交道的。
具体的内容可以看这篇SSM知识总结
刚学习后端开发都会先学习SSH框架,SSH框架是由spring+Struts+hibernate整合的,那跟现在学的SSM有什么区别呢?
首先都用到了sping,前面讲过了sping在这里也不提了。其次Struts被替换成springMVC,hibernate替换成了MyBatis。
两者都是实现了页面分离控制的功能,但Struts框架是类级别的拦截,每次请求就会创建一个Action,SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据,而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,虽然Struts中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
所以主要区别就在于struts是基于类开发,而springmvc是基于类中的方法开发,在配置过程中springMVC相当于要简单,springmvc使用更加简洁。
hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发,Mybatis 属于半自动化,sql需要手工完成,稍微繁琐,但封装了并不一定好,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案,所以手动编写sql,可以避免不需要的查询,提高系统性能。
所以说MyBatis简单,方便,而hibernate比较复杂,强大。
总结:两个框架各有各的优势,并不能说哪个框架就一定比哪个好,要根据项目来进行选择。
首先要有控制(Controller)层,负责具体的业务模块流程的控制,也就是去拦截客户发来的请求。
然后服务(Service)层,负责业务模块的逻辑应用设计,调用DAO层已定义的接口,去实现Service具体的实现类,也就是去和数据库(DAO)层打交道。
Dao层负责与数据库进行交互设计,用来处理数据的持久化工作,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。
最后一层View层,负责前台jsp页面的展示,此层需要与Controller层结合起来开发,可以由控制层来跳转到某个jsp页面。
总结:控制层来拦截到客户端发来的请求,并把数据交给服务层,服务层通过与DAO层打交道,利用DAO层对数据的增删查改,最后控制层和view层打交道,展现到某个jsp页面。
所以说在写后端过程中都是先写实体类entity,定义对象的属性,再写Mapper.xml,Dao接口,再服务层,控制层,最后就是写JSP页面调用,请求哪些参数,需要获取什么数据。
简单实现了一个登录注册功能,运用注解来实现的,你自己也可以去配置xml来实现,个人觉得配置xml没有那么方便好用。
private int id;
private String name;
private String password;
t_user
insert into
(name, password)
values ( #{name}, #{password})
public void addUser(User user);
public User findUser(@Param("name")String name, @Param("password")String password);
public interface UserService {
void regist(User user);
User login(String name, String password);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void regist(User user) {
userDao.addUser(user);
}
@Override
public User login(String name, String password) {
User user=userDao.findUser(name,password);
if(user != null){
return user;
}
return null;
}
}
不要忘记加上@Service注解
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("regist")
public String regist(User user,Model model){
userService.regist(user);
model.addAttribute("msg", "注册成功");
return "success";
}
@RequestMapping("login")
public String login(String name,String password,Model model){
User user=userService.login(name,password);
if(user != null){
model.addAttribute("msg", "登录成功");
model.addAttribute("username",user.getName());
return "success";
}
return "fail";
}
}
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/test
dataSource.user=root
dataSource.password=123456
从配置文件名字就可以看出spring-mvc.xml是配置控制层的,spring-dao.xml配置与数据库的属性,spring-service.xml配置服务层的。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
用户登录
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
用户注册
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
登录成功
${username}
${msg }
${abc}
去登录
去注册
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
失败
u are loser,this is a fail page!