简易式SSM整合(IDEA)

SSM

一、初识SSM

1、SSM框架

  • SSM是由 Spring+SpringMVC+Mybatis
1.1、Spring是一个轻量级的服务框架,两大重要部件:
  • IOC(控制反转)
  • AOP(切面编程)

IOC的控制反转主要是自动注入

  • set方法注入
  • constructor构造器注入

AOP的切面编程简单来说就是使用代理(即中间商)

  • spring官网: https://spring.io/
1.2、Mybatis是数据化持久层
  • 它支持定制化 SQL、存储过程以及高级映射。
    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
    MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
  • 中文官网:https://mybatis.org/mybatis-3/zh/getting-started.html
1.3、SpringMVC是处理接口请求
  • Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角色,这种分离让它们更容易进行定制

  • 简单项目整合开始!

二、Mybatis

1、先导入jar包

  • 重中之重
  • 先导入依赖
    • junit、数据库驱动、连接池、servlet、jsp、Mybatis、Mybatis-spring、spring 等
  • pom.xml
        <!--        junit、数据库驱动、连接池、servlet、jsp、Mybatis、Mybatis-spring、spring-->
        <dependencies>
            <!--            junit依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <scope>test</scope>
                <version>${junit.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${servlet.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.servlet/jsp-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jsp-api</artifactId>
                <version>${jsp.version}</version>
                <scope>provided</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis-spring.version}</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring-webmvc.version}</version>
            </dependency>
            <!--            lombok依赖-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>

        </dependencies>

2、创建数据库、表

-- auto-generated definition
create table ssm_users
(
    id   varchar(50)   not null
        primary key,
    name varchar(50)   not null comment '姓名',
    age  int           null comment '年龄',
    sex  int default 1 null comment '性别,1代表男,0代表女默认男,'
)
    charset = utf8;

3、根据数据库创建实体类

package com.bjwl.demoCrud.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author HSP
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

  private String id;
  private String name;
  private int age;
  private int sex;

  public User(String name, int age, int sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;
  }
}

4、创建mapper接口

package com.bjwl.demoCrud.dao;


import com.bjwl.demoCrud.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author:HSP
 * @Date:2022/4/4 13:19
 * @Description:
 * @projectName:ssm_demo
 */

@Repository
@Mapper
public interface UserMapper {

//    增删改查

    int add(User user);

    int delete(String id);

    int update(User user);

    User queryById(String id);

    List<User> queryAll();

}

5、编写mapper.xml文件

  • 必须首先指明这个Mapper是哪个接口的
  • 参数那,别名需要先设置
  • id标签对应的是接口的方法名
  • UserMapper.xml
<?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.bjwl.demoCrud.dao.UserMapper">

    <insert id="add" parameterType="user">
        insert into ssm.ssm_users
        values (#{id}, #{name}, #{age}, #{sex});
    </insert>

    <delete id="delete" parameterType="string">
        delete
        from ssm.ssm_users
        where id = #{id};
    </delete>

    <update id="update" parameterType="user">
        update ssm.ssm_users
        set name =#{name},
            age=#{age},
            sex=#{sex}
        where id = #{id}
    </update>

    <select id="queryById" resultType="user" parameterType="string">
        select *
        from ssm.ssm_users
        where id = #{id}
    </select>

    <select id="queryAll" resultType="user">
        select *
        from ssm.ssm_users
    </select>
</mapper>

6、将mapper.xml文件注册到mybatis中

  • 由于spring接管了数据库的配置,故,可以不用在mybatis中配置数据库映射。
  • 当前mybatis配置中只需要将mapper文件映射,还需要将别名设置即可
  • 指定mapper文件可以使用resource(在resources中的目录文件)、url、class(当mapper文件和类名在一个包下,且同名是一般用)
  • 数据库的配置可以直接配置在里面,也可以通过db.properties文件读取
  • db.properties
#这几个注释的配置是mybatis-config.xml里用的
#driver=com.mysql.cj.jdbc.Driver
#url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&useSSL=true&unicode=true&charsetEncoding=utf8
#username=admin
#password=he123456

druid.driverClassName=com.mysql.cj.jdbc.Driver
druid.url=jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
druid.username=admin
druid.password=he123456

##初始连接数,默认0
druid.initialSize=10
#最大连接数,默认8
druid.maxActive=30
#最小闲置数
druid.minIdle=10
#获取连接的最大等待时间,单位毫秒
druid.maxWait=2000
  • 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?,settings?,typeAliases?,typeHandlers?,
    objectFactory?,objectWrapperFactory?,reflectorFactory?,
    plugins?,environments?,databaseIdProvider?,mappers?-->
    

<!--    <properties resource="db.properties"/>-->

<!--    别名-->
    <typeAliases>
        <package name="com.bjwl.demoCrud.entity"/>
    </typeAliases>

<!--    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>-->

<!--    注入mappers-->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

7、创建测试类测试

 @Test
    public void testMybatis() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//        System.out.println(userMapper.queryAll());
        System.out.println(userMapper.add(new User("4", "magic", 21, 1)));
//        System.out.println(userMapper.update(new User("1", "magic", 21, 1)));
//        System.out.println(userMapper.delete("1"));
//        System.out.println(userMapper.queryById("1"));
        
        sqlSession.commit();


  • sqlSession.commit();重要的一步!!!

三、Spring

1、创建service层的UserService接口和实现类

package com.bjwl.demoCrud.service;


import com.bjwl.demoCrud.entity.User;
import java.util.List;

/**
 * @author:HSP
 * @Date:2022/4/4 14:20
 * @Description:
 * @projectName:ssm_demo
 */

public interface UserService {

    int add(User user);

    int delete(String id);

    int update(User user);

    User queryById(String id);

    List<User> queryAll();
}

2、实现类

package com.bjwl.demoCrud.service.impl;


import com.bjwl.demoCrud.dao.UserMapper;
import com.bjwl.demoCrud.entity.User;
import com.bjwl.demoCrud.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

/**
 * @author:HSP
 * @Date:2022/4/4 14:21
 * @Description:
 * @projectName:ssm_demo
 */

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

//   使用原始注入bean也行,使用注解也行
//    public void setUserMapper(UserMapper userMapper) {
//        this.userMapper = userMapper;
//    }

    @Override
    public int add(User user) {
        
//        使用UUID随机生成id
        String s = UUID.randomUUID().toString().toUpperCase().replaceAll("-", "");
        user.setId(s);
        return userMapper.add(user);
    }

    @Override
    public int delete(String id) {
        return userMapper.delete(id);
    }

    @Override
    public int update(User user) {
        return userMapper.update(user);
    }

    @Override
    public User queryById(String id) {
        return userMapper.queryById(id);
    }

    @Override
    public List<User> queryAll() {
        return userMapper.queryAll();
    }
}


3、整合dao

  • 使用spring-dao.xml接管mybatis-config.xml中的数据库、数据源配置

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


    <!--    扫描包-->
    <!--        <context:component-scan base-package="com.bjwl.demo01.dao"/>-->

    <!--    读取数据-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--    注入数据源,使用druid数据源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="url" value="${druid.url}" />
        <property name="driverClassName" value="${druid.driverClassName}" />
        <property name="username" value="${druid.username}" />
        <property name="password" value="${druid.password}" />
        <property name="initialSize" value="${druid.initialSize}"/>
        <property name="maxActive" value="${druid.maxActive}" />
        <property name="minIdle" value="${druid.minIdle}" />
        <property name="maxWait" value="${druid.maxWait}" />
    </bean>

    <!--    将数据源注入SqlSessionFactoryBean中-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <!--        接管mybatis配置-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

<!--    自动注入mapper接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--    扫描当前包下的mapper接口-->
        <property name="basePackage" value="com.bjwl.demoCrud.dao"/>
    </bean>

</beans>

4、整合service

  • 使用spring-service.xml注册bean跟数据库的事务

  • 在服务层开启事务

  • spring-service.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:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://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/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.bjwl.demoCrud.service"/>
    
        <!--    同在serviceImpl中的注释相同,若只用原始bean注册则可以放开此注释-->
    <!--<bean class="com.bjwl.demoCrud.service.impl.UserServiceImpl">
        <property name="userMapper" ref="userMapper"/>
    </bean>-->

    <!--    开启事务-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
<!--    注解-->
    <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

5、创建测试类

  • 在此处测试如果使用spring-service.xml肯定是不行的,他在这里肯定不够,会不认识mapper的

  • 所以需要将其整合

    • 将两个文件整合在另一个文件中
    • spring-service.xml使用import导入spring-dao.xml,这样使得他就可以识别了
  • 以下只是方法1,后面还会用到这种形式的

       @Test
        public void testService() {
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            UserServiceImpl bean = context.getBean(UserServiceImpl.class);
    
            System.out.println(bean.queryAll());
    //        System.out.println(bean.add(new User("4", "magic", 21, 1)));
    //        System.out.println(bean.update(new User("1", "magic", 21, 1)));
    //        System.out.println(bean.delete("1"));
    //        System.out.println(bean.queryById("1"));
        }
    
    

四、springMVC

1、整合controller控制层

  • 创建UserController
  • 因为没有写视图渲染所以使用 @ResponseBody直接返回字符串到前端
  • 解决返回前端字符串乱码问题value = "/访问路径", produces ="application/json;charset=utf-8"
    • 如:
    • @GetMapping(value = "/update", produces ="application/json;charset=utf-8")
package com.bjwl.demoCrud.controller;


import com.bjwl.demoCrud.entity.User;
import com.bjwl.demoCrud.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

/**
 * @author:HSP
 * @Date:2022/4/4 14:22
 * @Description:
 * @projectName:ssm_demo
 */

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

    @Autowired
    private UserService userService;

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("msg", "<h1>Hello,你好呀!</h1>");
        return "hello";
    }

    @GetMapping(value = "/add", produces ="application/json;charset=utf-8")
    @ResponseBody
    public String add(User user) {
        int add = userService.add(user);
        if (add > 0) {
            return "<h1>succeed!</h1>";
        }
        return "fail!";
    }

    @GetMapping(value = "/delete/{id}", produces ="application/json;charset=utf-8")
    @ResponseBody
    public String delete(@PathVariable("id") String id) {
        int delete = userService.delete(id);
        if (delete > 0) {
            return "<h1>succeed!</h1>";
        }
        return "fail!";
    }

    @GetMapping(value = "/update", produces ="application/json;charset=utf-8")
    @ResponseBody
    public String update(User user) {
        int update = userService.update(user);
        if (update > 0) {
            return "<h1>succeed!</h1>";
        }
        return "fail!";
    }

    @GetMapping(value = "/query/{id}",produces ="application/json;charset=utf-8")
    @ResponseBody
    public String queryById(@PathVariable("id") String id) {
        return userService.queryById(id).toString();
    }

    @GetMapping(value = "/list", produces ="application/json;charset=utf-8")
    @ResponseBody
    public String queryAll(){
        System.out.println(userService.queryAll().toString());
        return userService.queryAll().toString();
    }
}


2、使用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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://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">
    
<!--    扫描包-->
    <context:component-scan base-package="com.bjwl.demoCrud.controller"/>

<!--    开启注解驱动-->
    <mvc:annotation-driven/>

<!--    过滤静态资源-->
    <mvc:default-servlet-handler/>

<!--    配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="viewResolver">
<!--        前缀-->
        <property name="prefix" value="/WEB-INF/view/"/>
<!--        后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

3、将前面整合的spring配置文件融合

  • spring-dao.xml接管了数据库配置文件以及mybatis-config.xml中的别名和映射配置,并且注入数据源。
  • ``spring-service.xml`服务层的bean注入及事务的处理
  • spring-mvc.xml主要是视图解析的配置
  • 将三者集合到一块儿,在加载项目的时候扫描applicationContext.xml即把这三个spring配置全部扫描了。
  • 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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <import resource="classpath*:spring-dao.xml"/>
    <import resource="classpath*:spring-service.xml"/>
    <import resource="classpath*:spring-mvc.xml"/>

</beans>

4、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

<!--    字符编码过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!--        初始化字符编码为UTF-8-->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
<!--        强制转码-->
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
<!--    映射到所有路径都过滤-->
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

<!--    配置DispatcherServlet-->
    <servlet>
        <servlet-name>ssmCrudDemo</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        初始化配置文件所在地-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
<!--            resources文件下的applicationContext.xml-->
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
<!--        设置启动级别 1 为最高级-->
        <load-on-startup>1</load-on-startup>
    </servlet>
<!--    配置映射路径-->
    <servlet-mapping>
        <servlet-name>ssmCrudDemo</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>


5、最后是一个简单的前端页面

  • 启动访问的首页
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Hello</title>
</head>
<body>

<h1>Hello World</h1>
</body>
</html>

  • hello请求传输数据到到此页面
  • hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${msg}
</body>
</html>


  • 项目目录结构

  • 在这里插入图片描述

  • 类以及方法结构

  • 在这里插入图片描述

一个基本简易的SSM项目完成,比较简陋

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值