1.什么是SSM?
SSM是Spring、SpringMVC、Mybatis的框架整合。
2.什么是Spring?
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
优点:
1.通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了开发。
2.通过Spring的AOP特性,很容易实现事务,日志,权限的控制。
3.提供了对其他优秀开源框架的集成支持。
4.低侵入式。
3.什么是Spring Mvc?
Spring MVC属于Spring Framework的后续产品,已经融合在Spring Web Flow里面,它原生支持的Spring特性,让开发变得非常简单规范。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
优点:
1.pringMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,是的我们开发更简洁。
2.与Spring无缝衔接。
3.灵活的数据验证,格式化,数据绑定机制。
4.什么是Mybatis?
MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。可以这么理解,MyBatis是一个用来帮你管理数据增删改查的框架。
优点:
1.sql写在xml文件中,便于统一管理和优化,解除sql和程序代码的耦合。
2.提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建。
3.提供xml标签,支持编写动态sql。
缺点:
1.工作量较大,特别是在表的字段多,关联表多的情况下。
2.sql语句的编写依赖于数据库,移植性差。
3.不支持级联删除,级联更新,需要自己对表进行删除。
SSM框架就是把Spring、SpringMVC、Mybatis的集大成者,分为持久层、服务层、显示层、控制层,把它们的优点汇聚一身,实现代码的易维护,低耦合、高内聚。
案例(用户的增删改功能)
控制层
@Controllerpublic class UserController {@Autowiredprivate UserService userService;@GetMapping(value = "/list")public String list(HttpSession session){List users = userService.findAll();session.setAttribute("users",users);int recordsCount = userService.totalCount();session.setAttribute("count",recordsCount);return "userlist";}@GetMapping("/addUser")public String showAdd(){return "addUser";}@PostMapping("/addUser")public String showList(User user, HttpSession session){userService.insertOne(user);return list(session);}@GetMapping("/delUser")public String showList2(User user,HttpSession session){userService.deleteOne(user.getId());return list(session);}@GetMapping("/echo")public String echoUser(Integer id,Model model){User user = userService.findOne(id);model.addAttribute("user",user);return "updUser";}@PostMapping("/updUser")public String updUser(User user,HttpSession session){userService.updateOne(user);return list(session);}}
持久层
@Repositorypublic interface UserDao {/** * 根据id查询学生信息 */@Select("select * from user where id = #{id} and id is not null")public User findOne(Integer id);@Select("select * from user")public List findAll();@Insert("insert into user values(null,#{username},#{phone},#{password},#{email})")public int insertOne(User user);@Select("select * from user\n" +"\n" +" \n" +" and username like #{user.username}\n" +" \n" +" \n" +" and phone = #{user.phone}\n" +" \n" +" \n" +" and email = #{user.email}\n" +" \n" +"\n" +"")public List findAllByCondition(User user);@Delete("delete from user where id = #{id}")public int deleteOne(Integer id);@Update("update user set username=#{username},phone=#{phone},password=#{password},email=#{email} where id = #{id}")public int updateOne(User user);@Select("select count(*) from user")public int totalCount();}
服务层
public interface UserService {public User findOne(Integer id);public boolean insertOne(User user);public List findAllByCondition(User user);public boolean deleteOne(Integer id);public boolean updateOne(User user);public List findAll();public int totalCount();}
@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserDao userDao;@Overridepublic User findOne(Integer id) {return userDao.findOne(id);}@Transactional(rollbackFor = {Exception.class})@Overridepublic boolean insertOne(User user) {return userDao.insertOne(user) > 0;}@Overridepublic List findAllByCondition(User user) {if (user.getUsername()!=null && user.getUsername().length()>0){user.setUsername("%"+user.getUsername()+"%");}return userDao.findAllByCondition(user);}@Transactional(rollbackFor = {Exception.class})@Overridepublic boolean deleteOne(Integer id) {return userDao.deleteOne(id) > 0;}@Transactional(rollbackFor = {Exception.class})@Overridepublic boolean updateOne(User user) {return userDao.updateOne(user) > 0;}@Overridepublic List findAll() {return userDao.findAll();}@Overridepublic int totalCount() {return userDao.totalCount();}}
pojo类
@Data@NoArgsConstructor@AllArgsConstructor@ToStringpublic class User {private Integer id;private String username;private String phone;private String password;private String email;}
还有很多配置类的源码,这里不过多展示了。