idea使用maven搭建SSM框架实现简单的增删改查crud(spring,springMVC,MyBatis ,mysql数据库)

本文介绍了如何使用IDEA、Maven搭建SSM(Spring、SpringMVC、MyBatis)框架,并实现MySQL数据库的增删改查功能。详细讲解了Spring的IoC思想、SpringMVC的作用以及MyBatis的数据库操作。同时,文章还涵盖了项目结构、配置文件、数据库表创建以及测试过程。

1.使用框架为SSM(spring,springMVC,MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

Spring
  Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。
  Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。

SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

MyBatis
   mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

2.使用的数据库是MySQL数据库,后期会简单说明安装使用pgsql数据库和oracle数据库;
3.使用的开发工具是idea,项目管理工具是maven
4.主要实现的功能是 登陆页面,然后连接数据库实现CRUD
5.ORM对象关系映射思想,三层架构思想(表现层,业务逻辑层,持久层)
6.我会在最后放pom.xml的配置信息和依赖
7.整合策略
先整合Spring、Mybatis框架,Mybatis整合Spring后整合SpringMVC
然后在已有整合的基础上开发一个SpringMVC的入门案例而已
8.整合目标(原来Mybatis中的一些配置等交给Spring去管理)

1.数据库连接池以及事务管理都交给Spring容器来完成
2.SqlSessionFactory对象应该放到Spring容器中作为单例对象管理
3.Mapper动态代理对象交给Spring管理,我们从Spring容器中直接获得Mapper的代理对象(sqlSession.getMapper(XXX.class),现在直接从Spring容器中获得需要使用的dao层mapper代理对象【直接注入对象使用】)

9.整合所需jar分析

1.Junit测试jar
2.Mybatis的jar
3.Spring相关jar(spring-context、spring-test、spring-jdbc、spring-tx、spring-aop、aspectjweaver)
4.Mybatis/Spring整合包jar Mybatis-spring-xxx.jar(mybatis官方维护的一个jar)
5.Mysql数据库驱动jar
6.druid数据库连接池的jar
7.Log4j日志jar

一、框架环境的搭建
1.直接使用maven的骨架创建一个webapp的项目
**加粗样式**
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
刚开始进来,会加载一下,成功之后就是这样
在这里插入图片描述
目前目录是下面这样的
在这里插入图片描述
现在开始补全包哈 创建一个java包 一定记得去添加属性
在这里插入图片描述
在这里插入图片描述

整体项目的结构在这里插入图片描述
一、实体类pojo的编写:Student.java,之前这里我们每次都会引用setter和getter,包括tostring的方法,可是用了这个spring的框架之后,这里就可以省略,是的代码看起来更舒服,更加的简洁。

package com.myssm.pojo;

/**
 * @author lj
 * @Create 2020-12-22-15:12
 * @description  实体类
 */
public class Student {

    private int id;
    private String name;
    private String sex;
    private String address;

     // 因为spring的@Autowired注释来做依赖注入 ,所以这里省略了 setter和getter   tostring的方法
}

二、写业务层的StudentService接口

package com.myssm.service;

import com.myssm.pojo.Student;

import java.util.List;

/**
 * @author lj
 * @Create 2020-12-22-15:13
 * @description   业务层   增删改查是数据库的学生信息
 */
public interface StudentService {

      // 1.根据学生的id查询一条信息

      Student selectById(int id);

      // 2.插入一条学生信息

      void insertData(Student student);

      //更新一条数据

     void updata(Student student);

      //3.查询所有学生的信息

     List<Student> findAll();

      //4.根据学生id删除一条数据

    void deleteById(int id);
}

在这里插入图片描述

二、写DAO层 持久层 StudentMapper接口(其实这里就是和实体类之间做了映射)

package com.myssm.dao;

import com.myssm.pojo.Student;

import java.util.List;

/**
 * @author lj
 * @Create 2020-12-22-15:12
 * @description
 */
public interface StudentMapper {
    // 1.根据学生的id查询一条信息

    Student selectById(int id);

    // 2.插入一条学生信息

    void insertData(Student student);

    //更新一条数据

    void updata(Student student);

    //3.查询所有学生的信息

    List<Student> findAll();


    //4.根据学生id删除一条数据

    void deleteById(int id);

}

在这里插入图片描述

四、写业务层 StudentService接口的实现类:StudentServiceImpl

package com.myssm.service.impl;

import com.myssm.dao.StudentMapper;
import com.myssm.pojo.Student;
import com.myssm.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author lj
 * @Create 2020-12-22-15:33
 * @description
 */
@Service
public class StudentServiceImpl implements StudentService {

   @Autowired
   private StudentMapper studentMapper;

    @Override
    public Student selectById(int id) {
        return studentMapper.selectById(id);
    }

    @Override
    public void insertData(Student student) {
      studentMapper.insertData(student);
    }

    @Override
    public void updata(Student student) {
    studentMapper.updata(student);
    }

    @Override
    public List<Student> findAll() {
        return studentMapper.findAll();
    }

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


在这里插入图片描述
五、写控制类

StudentController类就是一个controller

备注:由于StudentController类加了value="/student"的“@RequestMapping”的注解,所有相关路径都要加上"/student",即请求的url分别为:

http://127.0.0.1:8080/student/title
http://127.0.0.1:8080/student/content
“@RequestMapping"的value值前后是否有“/”对请求的路径没有影响,即value=“student”
、”/student"、"/student/"其效果是一样的

“@RequestMapping” 的属性

value: 指定请求的实际url

  1. 普通的具体值。如前面的value="/student"。
  2. 含某变量的一类值 @RequestMapping(value="/get/{studentId}")
    public String getStudentById(@PathVariable String studentId,Model model){
    model.addAttribute(“studentId”, studentId);
    return “student”;
    } 路径中的StudentId可以当变量,@PathVariable 注解即提取路径中的变量值

使用ModelAndView类用来存储处理完后的结果数据,以及显示该数据的视图。从名字上看ModelAndView中的Model代表模型,View代表视图,这个名字就很好地解释了该类的作用。业务处理器调用模型层处理完用户请求后,把结果数据存储在该类的model属性中,把要返回的视图信息存储在该类的view属性中,然后让该ModelAndView返回该Spring
MVC框架。框架通过调用配置文件中定义的视图解析器,对该对象进行解析,最后把结果数据显示在指定的页面上。

具体作用:

1、返回指定页面

ModelAndView构造方法可以指定返回的页面名称,

也可以通过setViewName()方法跳转到指定的页面 ,

2、返回所需数值

使用addObject()设置需要返回的值,addObject()有几个不同参数的方法,可以默认和指定返回对象的名字。

在这里插入图片描述

package com.myssm.controller;

import com.myssm.pojo.Student;
import com.myssm.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * @author lj
 * @Create 2020-12-22-15:11
 * @description
 *
 * 在某类前面加上:@Controller ,表明某类是一个controller
 * @RequestMapping 请求路径映射,如果标注在某个controller的类级别上,
 * 则表明访问此类路径下的方法都要加上其配置的路径;
 * 最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求
 */

@Controller
@RequestMapping(value = "/student")
public class StudentController {

    @Autowired
    private StudentService studentService;


    //最常用是标注在方法上,表明哪个具体的方法来接受处理某次请求
    @RequestMapping(value = "/findAll")
    public  ModelAndView findAll(){

        List<Student> students = studentService.findAll();

        ModelAndView modelAndView = new ModelAndView();

        modelAndView.addObject("student",students);
        modelAndView.setViewName("students/findAll");
     return  modelAndView;
    }
}

六、表现层的包补齐如下:
其实就是在pages页面:页面是welcome欢迎的页面,进去页面有一个学生信息的页面students,页面信息展示的是findAll查询到的所有信息返回页面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查看所有学生的信息</title>
</head>
<body>
 <!--返回信息以表格的形式   设置表格的变宽和大小-->
    <table border="1px solid black" cellspacing="0px">
        <!--for循环-->
        <c:forEach var="stu" items="${students}">
            <tr>
                <td>${stu.id}</td>
                <td>${stu.stuName}</td>
                <td>${stu.sex}</td>
                <td>${stu.stuAddress}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

七、创建配置文件,并且开始写配置文件

在这里插入图片描述

数据库的配置文件:


> jdbc.driver=com.mysql.cj.jdbc.Driver
> jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
> jdbc.username=root jdbc.password=1234

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:这里需要修改成自己的包路径,以及自己的配置文件路径

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    <!--扫描service层的类-->
    <context:component-scan base-package="com.myssm.service"/>


    <!--加载数据库配置文件-->
    <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="locations" value="classpath:config/jdbcConfig.properties"/>
    </bean>

    <!--druid数据库连接池-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--配置mybaits的SqlSessionFactoryBean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="druidDataSource"/>
        <property name="configLocation" value="classpath:config/mybatis-config.xml"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!--使用mybaits接口代理开发模式-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--扫描dao接口所在的包-->
        <property name="basePackage" value="com.myssm.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

在这里插入图片描述
mybatis配置文件resources/config/mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="config/jdbcConfig.properties">
        <!--<property name="password" value="F2Fa3!33TYyg"/>-->
    </properties>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>



</configuration>

这里的springmvc配置文件

在这里插入图片描述

<?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:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--开启注解扫描,扫描controller层-->
    <context:component-scan base-package="com.myssm.controller"/>

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

    <!--mvc注解支持-->
    <mvc:annotation-driven/>
</beans>

映射文件resources/mapper/StudentMapper.xml

在这里插入图片描述

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.myssm.dao.StudentMapper">
    <select id="findAll" resultType="com.myssm.pojo.Student">
        select * from t_student
    </select>

    <select id="selectById" parameterType="int" resultType="com.myssm.pojo.Student">
        select * from t_student where id = #{id}
    </select>

    <insert id="insert" parameterType="com.myssm.pojo.Student"
            useGeneratedKeys="true" keyProperty="id">
        insert into t_student(stu_name, sex, stu_address) values(#{name}, #{sex}, #{address})
    </insert>

    <update id="update" parameterType="com.myssm.pojo.Student">
        update t_student set
        stu_name = #{name},
        sex = #{sex},
        stu_address = #{address}
        where id = #{id}
    </update>

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

全局配置文件webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
  <web-app version="2.4"
           xmlns="http://java.sun.com/xml/ns/j2ee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置监听器,加载/WEB-INF目录下的配置文件-->
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!--加载applicationContext.xml-->
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:/config/applicationContext.xml</param-value>
    </context-param>

    <!--log4j2-->
    <context-param>
      <param-name>log4jConfigurationLocation</param-name>
      <param-value>classpath:/config/log4j.properties</param-value>
    </context-param>
    <context-param>
      <param-name>log4jRefreshIntervel</param-name>
      <param-value>60000</param-value>
    </context-param>
    <listener>
      <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>

    </listener>

    <!--解决post请求中文乱码的过滤器-->
    <filter>
      <filter-name>characterEncodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>characterEncodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--配置前端控制器DispatcherServlet-->
    <servlet>
      <servlet-name>dispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <!--配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml-->
      <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/config/springmvc.xml</param-value>
      </init-param>
      <!--服务器启动的时候,让DispatcherServlet对象创建-->
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
      <servlet-name>dispatcherServlet</servlet-name>
      <url-pattern>/</url-pattern>
    </servlet-mapping>


</web-app>

创建数据库表

CREATE TABLE t_student ( id int NOT NULL AUTO_INCREMENT,
stu_name varchar(30) DEFAULT NULL, sex char(1) DEFAULT NULL,
stu_address varchar(30) DEFAULT NULL, PRIMARY KEY (id) )
ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO t_student VALUES
(1,‘tom’,‘f’,‘shanghai’),(3,‘lisa’,‘m’,‘tianjin’),(4,‘george’,‘f’,‘hunan’);

开始测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值