SSM的基本搭建,自己看的。

搭建这个项目的时候的版本:DK8、tomcat 9、Maven3.6.1、Idea2021.1.3、MySQL8

创建Maven下的webapp项目。先导入依赖,一般在网上搜SSM的依赖,一大堆,找个顺眼的copy就好,一般都要有spring相关、mysql相关、mybatis相关、jstl相关,别问我为什么随便找,因为我菜不会细看。另外可以加一个lombok依赖,这仅代表我个人习惯。这些都写在pom.xml文件里

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>compile</scope>
    </dependency>
    <!--数据库驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    <!-- 数据库连接池 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <!--Servlet - JSP -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

    <!--Mybatis-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.2</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.2</version>
    </dependency>


    <!--分页插件-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.0.0</version>
    </dependency>

    <!--Mybatis generator-->
    <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
    <dependency>
      <groupId>org.mybatis.generator</groupId>
      <artifactId>mybatis-generator-core</artifactId>
      <version>1.4.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <!--Spring-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.4</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>5.1.9.RELEASE</version>
    </dependency>

    <!--            Ajax-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.5</version>
    </dependency>

    <!--        JSR303数据校验 -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.1.0.Final</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.20</version>
    </dependency>

<!--    alibaba数据库连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.6</version>
    </dependency>
  </dependencies>

然后建自己的数据库,我是这样的,名字叫ssm_demo,里面有id,username,password,salt

create database ssm_demo;
create table ssm_demo.user
(
    id       Integer auto_increment
        primary key,
    username varchar(20) not null,
    password varchar(20) not null,
    salt     varchar(20) not null
);

左边的是刚建好项目时的样子,右边是把必有的包和类先创好的样子

         

这里要注意的是你的bean里的实体类名字和属性及其数据类型要和数据库里的那个一样。下边的代码依次是User、UserMapper、UserService、UserServiceImpl、UserController。基础用法也就是增删查改。

//User
//这四个都是lombok依赖来的。第一个是自动生成getter/setter方法,第二个三个是无参和有参的构造,最后一个是输出的格式化。
//你也可以不要他们去写getter/setter啥的,但是我觉得那样不如这样看的舒服。
//其中数据库的varchar和类里边的String是对应的
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private Integer id;
    private String username;
    private String password;
    private String salt;
}
//UserMapper
// 格式:返回类型 自定义的名字 (参入的参数)
public interface UserMapper {
    //增
    @Select("insert into ssm_demo.user(username, password, salt) values (#{username}, #{password}, #{salt})\n")
    void insert(User user);

    //删
    @Delete("delete from ssm_demo.user where id = #{is}")
    void delete(int id);

    //查
    @Select("select * from ssm_demo.user")
    List<User> findAll();

    //改
    @Update("update ssm_demo.user set username=#{username},password=#{password},salt=#{salt} where id = #{id}")
    void update(User user);
}
//UserService
// 这里的方法和UserMapper的一毛一样,copy来就行
public interface UserService {
    //增
    int insert(User user);
    //删
    int delete(int id);
    //查
    List<User> findAll();
    //改
    int update(User user);
}
//UserServiceImpl
//他要去实现(implements)UserService里的方法,之后报红线,alt+回车,实现方法,确定。
//@Service注解就是说这个类归于Spring去管理。@Resource或者@Autowired是帮你创建对象的。
//我们要去调用UserMapper里边的方法,所以我们要用注解的方式去把UserMapper引入进来。
@Service
public class UserServiceImpl implements UserService {
    @Autowired private UserMapper userMapper;
    //增
    @Override
    public int insert(User user) {
        return userMapper.insert(user);
    }
    //删
    @Override
    public int delete(int id) {
        return userMapper.delete(id);
    }
    //查
    @Override
    public List<User> findAll() {
        return userMapper.findAll();
    }
    //改
    @Override
    public int update(User user) {
        return userMapper.update(user);
    }
}
//UserController
//我们要用UserService的方法,所以我们要@Autowired
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired private UserService userService;

        @GetMapping("/insert")
    public String insert(User user,HttpServletResponse response,HttpServletRequest request) throws IOException {
        response.sendRedirect(request.getContextPath()+"/user/findAll");
        userService.insert(user);
        return "list";
    }
    //删
    @PostMapping("/delete")
    public String delete(int id,HttpServletResponse response,HttpServletRequest request) throws IOException {
        response.sendRedirect(request.getContextPath()+"/user/findAll");
        userService.delete(id);
        return "list";
    }
    //查
    @RequestMapping("/findAll")
    public ModelAndView findAll(ModelAndView modelAndView){
        modelAndView.setViewName("list");
        modelAndView.addObject("list",userService.findAll());
        return modelAndView;
    }
    //改
    @RequestMapping("/update")
    public String update(User user,HttpServletResponse response,HttpServletRequest request) throws IOException {
        response.sendRedirect(request.getContextPath()+"/user/findAll");
        userService.update(user);
        return "list";
        }
}

 然后去资源根resources去创建配置文件,依次是applicationContext,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
       http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!--    开启注解扫描,只需要对service和mapper进行扫描即可,不需要扫描controller,和上一个一样。include是包含,exclude就是不包含。上面只扫描controller,所以include;这个不包含,所以exclude-->
    <context:component-scan base-package="my">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--    spring整合MyBatis框架-->
    <!--    配置连接处-->
<!--    -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm_demo?characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC&amp;"/>
        <property name="user" value="root"/>
        <property name="password" value="lx9871.."/>
    </bean>

    <!--    配置工厂对象SQLSessionFactory,大概意思就是有了工厂才能去加工SQL语句,class也是直接SqlSessionFactoryBean
            name 和 ref 就都写 dataSource-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--    配置接口所在包,就是你去扫描哪个包。class搜MapperScannerConfigurer,name就是basePackage,value就是mapper包-->
    <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="my.mapper"/>
    </bean>
</beans>
<?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-4.2.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <!--    开启注解扫描,只扫描controller-->
    <!-- 第一行是说你需要扫描哪个包,这个包就是你自己定义的那个。一般都是bean包的上一级软件包。
        这里的第二行和第三行是在一行内,type的意思就是用什么类型去解析,我们用注解annotation。
        expression的意思是表示你这个是什么注解,我们去摁ctrl+N,搜controller,
        点有注解图标@的那个然后去copy它的包,然后写点,controller-->
    <context:component-scan base-package="my">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
    </context:component-scan>

    <!--    配置视图解析器对象-->
    <!-- id是自己取得名字,class是说你要用什么东西我们用到的是视图解析器,直接写InternalResourceviewResolve就出来了
         prefix和suffix分别是前后缀,就是你在打开网页的时候,路径的前后缀,因为我的jsp文件放到了/WEB-INF/pages下-->
    <bean id="nternalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--    过滤静态资源,这个可写可不写了,爆红也没事,就是以后你正儿八经做项目的时候,这些就可以过滤掉不被识别-->
    <mvc:resources location="/css/" mapping="/css/**"/>
    <mvc:resources location="/images/" mapping="/css/**"/>
    <mvc:resources location="/js/" mapping="/css/**"/>

    <!--    开启SpringMVC注解在支持   相当重要,必须要写!-->
    <mvc:annotation-driven/>
</beans>

webapp下的WEB-INF里有个web.xml 

<!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

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

  <!--  设置配置文件的路径,就是说你要去扫描你已经写好的那个文件,classpath:配置文件名-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

  <!--  配置前段控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <!--  加载springmvc.xml配置文件-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!--    启动服务器,创建改Servlet-->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

  <!--  解决中文乱码过滤器-->
  <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>

</web-app>

在下面的webapp里创建个pages包,然后建一个list的jsp文件 ,下面分别的index和list


<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>增</h3>
<form action="/user/insert" method="get">
    姓名:<input type="text" name="username"/><br/>
    密码:<input type="text" name="password"/><br/>
    密盐:<input type="text" name="salt"/><br/>
    <input type="submit" value="save">
</form>

<h3>删</h3>
<form action="/user/delete" method="post">
    删除:<input type="text" name="id"/><br/>
    <input type="submit" value="del">
</form>

<h3>查</h3>
<a href="/user/findAll">查询全部</a>

<h4>改</h4>
<form action="/user/update" method="post">
    编号:<input type="text" name="id"><br>
    姓名:<input type="text" name="username"/><br/>
    密码:<input type="text" name="password"/><br/>
    密盐:<input type="text" name="salt"/><br/>
    <input type="submit" value="update">
</form>
</body>
</html>

<html>
<head>
    <title>Title</title>
</head>
<body>

<table border="1">
    <tr>
        <td>编号</td>
        <td>用户</td>
        <td>密码</td>
        <td>密盐</td>
    </tr>
    <c:forEach items="${list}" var="list">
        <tr>
            <td>${list.id}</td>
            <td>${list.username}</td>
            <td>${list.password}</td>
            <td>${list.salt}</td>
        </tr>
    </c:forEach>
</table>

</body>
</html>

一般来说,增删查改的功能就已经OK了,虽然丑了点,但还是那句话,因为我菜。但是另外一个操蛋的事儿就是我报错了。

我弄了好久之后,才有个大概的猜测,我的tomcat版本不支持。我朋友的8.5就可以,我的9.0就不行。what's up!!!!!!!                看他的文章就OK。再不行就去网上搜下。

https://blog.csdn.net/robert789654/article/details/106338060/

然后我就多了好多个文件,放在了WEB-INF里面。md。

最后我简单复习一下SSM各种类的调用,可能不是很恰当,但是这个顺序很好记。

 创建类正着来的顺序:

1.首先创建了一个实体类bean,为其他类提供了一个属性;

2.创建一个mapper类去存放方法,然后让他去用SQL语句去查结果。SQL语句查询到的结果会给方法去接收,然后方法把查到的东西先暂时性的攥到手里。

3.创建了service类,他也要去拿结果,但是程序员都知道接口是不能new对象的,所以他需要一个实现类impl,这个impl继承了接口并实现了他的方法,就要去创建mapper的对象,才能够与mapper去交接,拿到mapper拿到的数据。既然impl拿到数据了,就相当于service也拿到数据了。

4.最后创建controller类,他是与页面关系最近的,controller需要service拿到的数据,输出给页面,所以我们就去创建了service对象并与他交接,然后拿到数据,展现给前端。

反着来的顺序:

1.controller需要数据,要去找service

2.service需要数据,就让impl找mapper

3.mapper想办法,就用sql的办法去拿到数据

4.数据有什么,有的是 实体类bean里的东西

打比方其实就相当于四层,皇上找大臣,大臣找小臣,小臣找平民,平民拿东西。

最后的最后,这个文章是我自己复习记的笔记,如果可以的话也希望大佬们纠错,就是不要太暴力,谢谢各位。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值