项目:一个简单的图书管理系统
主要复习ssm框架的使用,一步一步走,用于巩固ssm的知识
先把环境搭好,后面编写就会简单很多
1.导包
ssm需要很多包和配置,这也是springboot出生的原因,这些包一会冲突,一会版本不支持,属实是烦,先被配置和导包折磨一下,后面学springboot才能感觉有多方便,我常用的包大概就下面这些
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!-- $Id: pom.xml 642118 2008-03-28 08:04:16Z reinhard $ -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<name>LibraryManageSys</name>
<groupId>org.example</groupId>
<artifactId>LibraryManageSys</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<!--tomcat服务器插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
<dependencies>
<!--dependency>
<groupId>org.example</groupId>
<artifactId>[the artifact id of the block to be mounted]</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency-->
<!--spring及mvc常用依赖-->
<!--spring应用上下文-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.20</version>
</dependency>
<!--集成mvc-->
<dependency>
<groupId>org.bitbucket.swattu</groupId>
<artifactId>spring-mvc</artifactId>
<version>4.2.4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.20</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.20</version>
</dependency>
<!--mybatis的包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!--mybatis与spring集成的包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.7</version>
</dependency>
<!--mybatis分页插件-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
<!--数据库依赖的包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
<!--c3p0数据源的包-->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.1</version>
</dependency>
<!--jsp与servlet的包-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--测试的包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!--spring测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
</project>
这些包我也不是很了解,也没找到对这些包详细说明的文档,就先用着吧
2.编写pojo,dao层,service层
先实现一个简单的登录,主要为了搭建好环境
pojo:
package com.system.pojo;
import org.springframework.stereotype.Component;
@Component
public class Student {
private String studentid;
private String username;
private String password;
public String getStudentid() {
return studentid;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
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;
}
@Override
public String toString() {
return "Student{" +
"studentid='" + studentid + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
dao:
这里的dao层使用了mybatis的动态代理来实现业务,稍微复习一下
几个限定条件:
1.namespace需要是dao接口的全路径名,不止到包
2.id等于dao接口中的方法名称
3.resultType和返回值一致
4.parameterType和参数一致
那么这里的dao层代码就是
package com.system.dao;
import com.system.pojo.Student;
public interface studentMapper {
public Student verify(Student student);//验证学生
public void register(Student student);//注册学生
public Student findbyname(String name);//通过姓名查找学生
public Student findbyid(String id);//通过id查找学生
}
由于返回值要和resultType相同,有时候写一些判定可能不是很方便,所以可以在service接口改变
service:
package com.system.service;
import com.system.pojo.Student;
public interface studentService {
public boolean verify(Student student);//验证学生
public boolean register(Student student);//注册学生
public Student findbyname(String name);//通过姓名查找学生
public Student findbyid(String id);//通过id查找学生
}
serviceimpl:
package com.system.service.impl;
import com.system.dao.studentMapper;
import com.system.pojo.Student;
import com.system.service.studentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//服务类
@Service
public class studentImpl implements studentService{
@Autowired
private studentMapper mapper;
public boolean verify(Student student) {
if(mapper.verify(student)==null)//代表不存在当前对象
return false;
return true;
}
public boolean register(Student student) {
if (findbyid(student.getStudentid())!=null)//已经存在该id的学生
return false;
mapper.register(student);
return true;
}
public Student findbyname(String name) {
return mapper.findbyname(name);
}
public Student findbyid(String id) {
return mapper.findbyid(id);
}
}
3.配置studentMapper
编写sql语句,注意使用了动态代理,要注意这几个条件
<?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.system.dao.studentMapper">
<select id="verify" parameterType="student" resultType="student">
select * from student where username=#{username} and password=#{password}
</select>
<insert id="register" parameterType="student">
insert into student values(#{studentid},#{username},#{password})
</insert>
<select id="findbyname" parameterType="string" resultType="student">
select * from student where username=#{username}
</select>
<select id="findbyid" parameterType="string" resultType="student">
select * from student where studentid=#{studentid}
</select>
</mapper>
4.编写spring,springmvc,mybatis的配置文件
上面的类中都加了注解,所以要在配置文件中实现对这些注解的扫描以及配置数据源
jdbc配置文件:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///librarymanager
jdbc.username=root
jdbc.password=123456
spring配置文件:主要配置注解扫描,配置mybatis和spring的集成,配置mybatis的动态代理
<?xml version="1.0" encoding="UTF-8"?>
<!--spring配置类-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描service层-->
<context:component-scan base-package="com.system.service"/>
<!--导入jdbc配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--配置c3p0数据源-->
<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}"/>
</bean>
<!--配置mybatis与spring的集成-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:SqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
<!--分页插件-->
<property name="plugins">
<array>
<!-- 传入插件的对象 -->
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<props>
<prop key="helperDialect">mysql</prop>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</array>
</property>
</bean>
<!--扫描dao层,使用动态代理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.system.dao"/>
</bean>
</beans>
springmvc配置:主要扫描controller层和配置视图解析器
<?xml version="1.0" encoding="UTF-8"?>
<!--springmvc配置类-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
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
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--扫描controller层-->
<context:component-scan base-package="com.system.controller"/>
<!--配置视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="./view"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
mybatis配置文件:说明mapper位置,取别名
<?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">
<!--mybatis配置类-->
<configuration>
<typeAliases>
<!--批量取别名,类名就是别名,不区分大小写-->
<package name="com.system.pojo"/>
</typeAliases>
<mappers>
<mapper resource="./mapper/studentMapper.xml"/>
</mappers>
</configuration>
5.编写web.xml配置
这一步也是很重要的,需要使用监听器加载spring容器,还要配置springmvc
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--说明配置文件的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--默认的监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<!--设置欢迎页-->
<welcome-file-list>
<welcome-file>view/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
6.编写一个controller和一个jsp进行测试
package com.system.controller;
import com.system.pojo.Student;
import com.system.service.impl.studentImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class studentController {
@Autowired
private studentImpl service;
@RequestMapping(value = "/verify",method = RequestMethod.POST)
public String verify(Student student){
if(!service.verify(student))
return "/error/loginerror";
return "index";
}
}
jsp:
<%--
Created by IntelliJ IDEA.
User: 707770262
Date: 2022/11/4
Time: 16:47
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/verify" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" value="登录">
</form>
</body>
</html>
测试环境,数据库连接,controller层使用都正常。
这里还要注意的是视图的路径,controller设置的是相对于项目根路径而言的,jsp中使用el表达式
${pageContext.request.contextPath}项目根目录
还要注意spring这些引入jdbc等配置文件都要说明是classpath,不说明在测试时是正常的,但是发布到tomcat上就有问题了,他就找不到了,需要说明classpath他才会找到。
代码后面一定会进行更改,这里只是列举主要的配置,主要用于自己复习,对搭建ssm项目有大致的了解,菜鸟一枚,有问题希望指出。