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

2024-03-25 1935阅读

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

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

控制层

@Controller
public class UserController {
    @Autowired
    private 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);
    }
}

持久层

@Repository
public 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();
}
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Override
    public User findOne(Integer id) {
        return userDao.findOne(id);
    }
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public boolean insertOne(User user) {
        return userDao.insertOne(user) > 0;
    }
    @Override
    public List findAllByCondition(User user) {
        if (user.getUsername()!=null && user.getUsername().length()>0){
            user.setUsername("%"+user.getUsername()+"%");
        }
        return userDao.findAllByCondition(user);
    }
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public boolean deleteOne(Integer id) {
        return userDao.deleteOne(id) > 0;
    }
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public boolean updateOne(User user) {
        return userDao.updateOne(user) > 0;
    }
    @Override
    public List findAll() {
        return userDao.findAll();
    }
    @Override
    public int totalCount() {
        return userDao.totalCount();
    }
}

 pojo类

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private Integer id;
    private String username;
    private String phone;
    private String password;
    private String email;
}

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

效果图:

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

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

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

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

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

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

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

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]