【学习日记】(SSM-part 1)使用SSM实现基础的CRUD功能

【个人学习笔记】使用SSM实现基础的CRUD功能

关于SSM:

SSM(Spring + Spring MVC + MyBatis)

Spring :Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
控制反转 (IoC):依赖注入是控制反转的一种技术,控制反转是一个通用的概念,大致理解为将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
面向切面 (AOP):系统是由许多组件组成,每个组件各负责一块特定功能,还有可能承担日志,事务管理和安全等系统服务中去,这些系统服务称为横切关注点,因为它可以跨越系统的多个组件。

Spring MVC :Spring MVC是一种实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,基于MVC的构架思想可以对Web层起到一定的解耦作用,简化日常开发。
MVC思想将一个应用分成三个基本部分:Model(模型)、View(视图)、Controller(控制器)

MyBatis:MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
相比于之前的Servlet开发,我们除了需要自己提供 SQL 外,还必须操作 Connection、Statment、ResultSet,不仅如此,为了访问不同的表,不同字段的数据,我们需要些很多雷同模板化的代码,闲的繁琐又枯燥。而使用了 MyBatis 之后,只需要提供 SQL 语句就好了。

基于SSM实现基础的CRUD功能

开发环境: IDEA 2019、Tomcat 7.0.1041、Mysql 5.5.5

1 新建SSM文件

新建一个Maven项目,按图所示步骤
在这里插入图片描述输入GroupId等直到 finish
在这里插入图片描述初次创建需要等一会,并在右下角提示上点击右下角自动导入
在这里插入图片描述创建完成得到目录如图所示,没有src的文件夹可以去看一下我之前发的一篇博客,里面有详细解决办法。
在这里插入图片描述
接下来根据所需要的功能创建需要用到的模块的包。

2 创建目录(后端逻辑处理方面)

(1)首先在main目录下,新建文件夹java和文件夹resources,并分别将java文件设置为SourcesRoot和resources文件设置为ResourcesRoot,设置方法如下:
在这里插入图片描述后端逻辑处理大概目录主要如下
在这里插入图片描述
新建xml文件可以直接新建一个file文件加上.xml后缀即可,新建properties配置文件如图:
在这里插入图片描述

3 后端逻辑部分代码

(1)数据库配置文件 db.properties
主要用来存放连接数据库的一些信息,在此之前需要现在本地mysql中新建相关的表,我是用的库名为ssm,表名字段机构如图:
在这里插入图片描述db.properties配置如下(修改和自己数据库的信息相对应):

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?useSSL=false
jdbc.username=root
jdbc.password=

(1)spring和springMVC的配置文件 applicationContext.xml和spring-mvc.xml
这部分是ssm框架中spring和springMVC部分的配置文件(这部分代码是照搬加部分修改的,修改部分就根据注释改和自己匹配的一些内容)
applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
		http://www.springframework.org/schema/context
		http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/aop
		http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
    <!-- 1.配置数据库相关参数properties的属性:${url} -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 2.配置数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="2"/>
    </bean>

    <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描bean包 使用别名 -->
        <property name="typeAliasesPackage" value="com.tengshan.bean"></property>

        <!--配置加载映射文件 UserMapper.xml-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

    </bean>
    <!-- 自动生成dao,mapper-->
    <!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 给出需要扫描Dao接口包 -->
        <property name="basePackage" value="com.tengshan.dao"/>
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    
    <!--自动扫描-->
    <context:component-scan base-package="com.tengshan"/>
    <!-- 配置事务-->
    <!-- 5.配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 6.开启事务注解-->
    <tx:annotation-driven></tx:annotation-driven>
</beans>

spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-4.3.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <!-- 1.注解扫描位置-->
    <context:component-scan base-package="com.tengshan.controller" />

    <!-- 2.配置映射处理和适配器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

    <!-- 3.视图的解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

(4)实体类User
在实体类中需要声明User的熟悉,和数据库中的信息一致
(tips:通过Ctrl+ins可以快捷插入getter and setter 以及toString)

 private int id;
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.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;
    }

(5)实现CRUD功能(实现的顺序是差不多的,这里几种操作一起实现)

首先在userDao写好接口,声明实现的几种方法

public interface UserDao {
    //根据名字进行查找 
    User findByUserName(String username);
    //查询
    List<User> findAll();
    //新增
    void add(User user);
    //删除 根据id
    void deleteById(int id);
    //更新
    User selectUserById(int id);
    void update(User user);
}

在userMapper.xml 中写好需要执行的sql语句,其中更新内容部分,我们需要先在数据库中根据id查询到当先数据展示出来,进行修改之后再更新数据库,所以一共需要两个步骤,此处的id对应dao文件中的方法名。

<?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.tengshan.dao.UserDao" >

<select id="findByUserName" parameterType="String" resultType="user">
        select * from user_ssm where username = #{username}
    </select>

<select id="findAll" resultType="user">
        select * from user_ssm
    </select>

<insert id="add" parameterType="user">
        insert into user_ssm (username,password) values (#{username},#{password})
    </insert>

<delete id="deleteById" parameterType="int">
        delete from user_ssm where id=#{id}
    </delete>

<select id="selectUserById" parameterType="int" resultType="user">
        select * from user_ssm where id = #{id}
    </select>

<update id="update" parameterType="user">
        update user_ssm set username=#{username},password=#{password} where id=#{id}
    </update>
</mapper>

修改好sql语句之后,需要在service业务处理层声明同样操作的接口方法,之后再在impl调用dao目录下的方法实现功能

public interface UserService {

    int login(String username, String password);

    List<User> findAll();

    void add(User user);

    void deleteById(int id);

    User selectUserById(int id);

    void update(User user);
}

UserServiceImpl.java

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public int login(String username, String password) {
        User user = userDao.findByUserName(username);
        if(user!=null && user.getPassword().equals(password)){  //用户存在 且 密码相同
            return user.getId();
        }
        return -1;
    }
    
    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }

    @Override
    public void add(User user) {
        userDao.add(user);
    }

    @Override
    public void deleteById(int id) {
        userDao.deleteById(id);
    }

    @Override
    public User selectUserById(int id) {
        return userDao.selectUserById(id);
    }

    @Override
    public void update(User user) {
        userDao.update(user);
    }
}

最后在controller中进行逻辑处理,将得到的数据按功能进行处理和映射到jsp页面中。


@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/login.do")
    //登陆
    public ModelAndView login(User user){
        int id = userService.login(user.getUsername(),user.getPassword());
        ModelAndView mv = new ModelAndView();
        if(id != -1){
            mv.setViewName("main");
        }else{
            mv.setViewName("../failer");
        }
        return mv;
    }

    //查询
    @RequestMapping("findAll.do")
    public ModelAndView findAll(){
        List<User> users = userService.findAll();
        ModelAndView mv = new ModelAndView();
        mv.addObject("users",users);
        mv.setViewName("user-list");
        return mv;
    }
    
    //添加
    @RequestMapping("add.do")
    public String add(User user){
        userService.add(user);
        return "redirect:findAll.do";
    }

    //删除
    @RequestMapping("deleteById.do")
    public String deleteById(int id){
        userService.deleteById(id);
        return "redirect:findAll.do";
    }

    //更新
    //带着id查询到的结果跳转到更新界面
    @RequestMapping("/toUpdate.do")
    public ModelAndView toUpdate(int id){
        User user = userService.selectUserById(id);
        ModelAndView mv = new ModelAndView();
        mv.setViewName("user-update");
        mv.addObject("user",user);
        return mv;
    }
    //点击保存 更新内容
    @RequestMapping("/update.do")
    public String update(User user){
        userService.update(user);
        return "redirect:findAll.do";
    }
}

这里的@RequestMapping对应jsp界面里面的表单数据的action路由,再分别在每个表单下实现相应的功能即可,这里用到的jsp界面是借用实习公司开发的jsp界面,暂时先不能发出来。
本文主要记录ssm实现CRUD的后端逻辑过程,主要内容均由老师讲授加上一些个人理解和网上一些资源,如有不正确的地方,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值