当前位置:   article > 正文

超级简单的SSM框架(全注解,源码+分析,看一眼就会)

ssm框架

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的集大成者,分为持久层、服务层、显示层、控制层,把它们的优点汇聚一身,实现代码的易维护,低耦合、高内聚。

案例(用户的增删改功能)

控制层

  1. @Controller
  2. public class UserController {
  3. @Autowired
  4. private UserService userService;
  5. @GetMapping(value = "/list")
  6. public String list(HttpSession session){
  7. List<User> users = userService.findAll();
  8. session.setAttribute("users",users);
  9. int recordsCount = userService.totalCount();
  10. session.setAttribute("count",recordsCount);
  11. return "userlist";
  12. }
  13. @GetMapping("/addUser")
  14. public String showAdd(){
  15. return "addUser";
  16. }
  17. @PostMapping("/addUser")
  18. public String showList(User user, HttpSession session){
  19. userService.insertOne(user);
  20. return list(session);
  21. }
  22. @GetMapping("/delUser")
  23. public String showList2(User user,HttpSession session){
  24. userService.deleteOne(user.getId());
  25. return list(session);
  26. }
  27. @GetMapping("/echo")
  28. public String echoUser(Integer id,Model model){
  29. User user = userService.findOne(id);
  30. model.addAttribute("user",user);
  31. return "updUser";
  32. }
  33. @PostMapping("/updUser")
  34. public String updUser(User user,HttpSession session){
  35. userService.updateOne(user);
  36. return list(session);
  37. }
  38. }

持久层

  1. @Repository
  2. public interface UserDao {
  3. /**
  4. * 根据id查询学生信息
  5. */
  6. @Select("select * from user where id = #{id} and id is not null")
  7. public User findOne(Integer id);
  8. @Select("select * from user")
  9. public List<User> findAll();
  10. @Insert("insert into user values(null,#{username},#{phone},#{password},#{email})")
  11. public int insertOne(User user);
  12. @Select("<script>select * from user\n" +
  13. "<where>\n" +
  14. " <if test=\"user.username != null and user.username != ''\">\n" +
  15. " and username like #{user.username}\n" +
  16. " </if>\n" +
  17. " <if test=\"user.phone != null and user.phone != ''\">\n" +
  18. " and phone = #{user.phone}\n" +
  19. " </if>\n" +
  20. " <if test=\"user.email != null and user.email != ''\">\n" +
  21. " and email = #{user.email}\n" +
  22. " </if>\n" +
  23. "</where>\n" +
  24. "</script>")
  25. public List<User> findAllByCondition(User user);
  26. @Delete("delete from user where id = #{id}")
  27. public int deleteOne(Integer id);
  28. @Update("update user set username=#{username},phone=#{phone},password=#{password},email=#{email} where id = #{id}")
  29. public int updateOne(User user);
  30. @Select("select count(*) from user")
  31. public int totalCount();
  32. }

服务层

  1. public interface UserService {
  2. public User findOne(Integer id);
  3. public boolean insertOne(User user);
  4. public List<User> findAllByCondition(User user);
  5. public boolean deleteOne(Integer id);
  6. public boolean updateOne(User user);
  7. public List<User> findAll();
  8. public int totalCount();
  9. }

  1. @Service
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserDao userDao;
  5. @Override
  6. public User findOne(Integer id) {
  7. return userDao.findOne(id);
  8. }
  9. @Transactional(rollbackFor = {Exception.class})
  10. @Override
  11. public boolean insertOne(User user) {
  12. return userDao.insertOne(user) > 0;
  13. }
  14. @Override
  15. public List<User> findAllByCondition(User user) {
  16. if (user.getUsername()!=null && user.getUsername().length()>0){
  17. user.setUsername("%"+user.getUsername()+"%");
  18. }
  19. return userDao.findAllByCondition(user);
  20. }
  21. @Transactional(rollbackFor = {Exception.class})
  22. @Override
  23. public boolean deleteOne(Integer id) {
  24. return userDao.deleteOne(id) > 0;
  25. }
  26. @Transactional(rollbackFor = {Exception.class})
  27. @Override
  28. public boolean updateOne(User user) {
  29. return userDao.updateOne(user) > 0;
  30. }
  31. @Override
  32. public List<User> findAll() {
  33. return userDao.findAll();
  34. }
  35. @Override
  36. public int totalCount() {
  37. return userDao.totalCount();
  38. }
  39. }

 pojo类

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. @ToString
  5. public class User {
  6. private Integer id;
  7. private String username;
  8. private String phone;
  9. private String password;
  10. private String email;
  11. }

还有很多配置类的源码,这里不过多展示了。

效果图:

 

增删改已经全部显示完成。这就是优雅的SSM框架,非常的简单! 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/402883
推荐阅读
相关标签
  

闽ICP备14008679号