本篇博客将讲述Idea中如何整合Maven+SSM
第一步:配置好项目的环境
1.创建一个普通的maven项目
2.将此项目转换为web项目
1.在project Structure中的Facets中勾选Web模板
2.还需要修改一下里面的目录格式,看下面的两张图片:
修改完毕后点击下面的OK,项目最终呈现出来的目录结构如下:
3.Tomcat环境配置
1.先点击Run-> Edit Configurations…
2.在勾选Tomcat模块,这里我选用本机的Tomcat
然后配置一下Tomcat的属性信息。
接着记得把项目打成war包。
如果是非maven的web项目还需要以下操作,而由于我们本篇用的Maven进行开发,所以下面的操作可以忽略掉。
4. 引入项目需要相关jar
在pom.xml中加入下面的依赖:
<dependencies>
<!--Servlet API-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--c3p0-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!--JSTL-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
</dependencies>
第二步:配置文件的书写
1.Web.xml的相关配置
在Web.xml中配置下面的监听器和Servelt拦截器,使项目支持SpringWeb 和 SpringMVC的开发,并指定了Spring,SpringMVC配置文件(applicationContext.xml,applicationContext-controller.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">
<!--配置Springweb支持的监听器-->
<context-param>
<!--监听器的父类ContextLoader中有一个属性contextConfigLocation,该属性保存着容器配置文件applicationContext.xml的位置-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<!--配置Spring-web.jar提供的监听器,此监听器可以在服务器启动时 初始化IOC容器
初始化Ioc容器(applicationContext.xml),必须告诉监听器此容器的位置-->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--项目整合springmvc-->
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-controller.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--上面param-value 当xml 命名为servletname的值-servlet.xml 并且放在web-Inf 目录下可以不用配置 -->
<!--拦截一切请求,给DispatcherServlet 让它自己去找@requestMapping-->
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
2.配置数据库信息文件,db.properties,注意存放的目录在resources下面
由于Spring参与了整合,MyBatis的配置完全可以交由Spring进行处理,核心思想就是,在Spring的IOC容器中将MyBatis核心sqlSessionFactory配置进去
3.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"
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">
<!--使数据库信息文件被识别-->
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${mysql.driver}"></property>
<property name="jdbcUrl" value="${mysql.url}"></property>
<property name="user" value="${mysql.username}"></property>
<property name="password" value="${mysql.password}"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--加载mybatis配置文件-->
<!-- <property name="configLocation" value="classpath:conf.xml"></property>-->
<!--加载mapper.xml路径-->
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
</bean>
<!--批量产生mapper-->
<bean id="mappers" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<property name="basePackage" value="mapper"></property>
<!--上面的basePackage所在的property的作用 :
将mapper包中,所有的接口 产生与之对应的动态代理对象
(对象名就是首字母小写的接口名):比如我现在的包产生的对象是studentMapper
-->
</bean>
<bean id="loginService" class="service.impl.LoginServiceImpl">
<property name="loginMapper" ref="loginMapper"></property>
</bean>
</beans>
4.applicationContext-controller.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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="controller"></context:component-scan>
<!--配置视图解析器() 该解析器的作用是将东西渲染成success.jsp页面-->
<!--如果发现jsp中包含了jstl语言,则自动转为JstlView-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--mvc标配-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
第三步:写一个具体的项目
就写个登录校验的小项目吧
1.数据库建立下面的表:
2.实体类
package entity;
public class Login {
private String yy;
private String mm;
public Login() {
}
public Login(String yy, String mm) {
this.yy = yy;
this.mm = mm;
}
public String getYy() {
return yy;
}
public void setYy(String yy) {
this.yy = yy;
}
public String getMm() {
return mm;
}
public void setMm(String mm) {
this.mm = mm;
}
}
3.前端页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index</title>
</head>
<body>
<form action="check" method="post">
用户名:<input type="text" name="yy"/><br/>
密 码:<input type="text" name="mm"/><br/>
<input type="submit" value="登录"/>
</form>
</body>
</html>
4.controller:
package controller;
import entity.Login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import service.LoginService;
import java.util.List;
@SessionAttributes(value = "logins")
@Controller
public class Handler {
@Autowired
LoginService loginService;
@PostMapping("check")
public String checking(Login login){
int n = loginService.checking(login);
if(n>0){
return "success";
}else {
return "failure";
}
}
@GetMapping("all")
public String queryAll(Model model){
List<Login> logins = loginService.queryAll();
model.addAttribute("logins",logins);
return "lu";
}
}
5.service:(接口这里我就省略了)
package service.impl;
import entity.Login;
import mapper.LoginMapper;
import org.springframework.beans.factory.annotation.Autowired;
import service.LoginService;
import java.util.List;
public class LoginServiceImpl implements LoginService {
LoginMapper loginMapper;
public LoginMapper getLoginMapper() {
return loginMapper;
}
public void setLoginMapper(LoginMapper loginMapper) {
this.loginMapper = loginMapper;
}
public int checking(Login login) {
return loginMapper.checking(login);
}
public List<Login> queryAll() {
return loginMapper.queryAll();
}
}
mapper:
package mapper;
import entity.Login;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface LoginMapper {
// @Select("select count(*) from login where yy=#{yy} and mm=#{mm}")
int checking(Login login);
// @Select("select * from login")
List<Login> queryAll();
}
6.写mapper.xml,有下面两种位置可书写
由于maven项目默认要求配置文件都要放在resources中,没有放入resources目录下的配置文件都不会识别
- 将配置文件写在resources下面的mapper文件夹中(本文就是这种方式)
<?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">
<!--namespace:该mapper.xml映射文件的 唯一标识符-->
<mapper namespace="mapper.LoginMapper">
<select id="checking" parameterType="entity.Login" resultType="int">
select count(*) from login where yy = #{yy} and mm = #{mm}
</select>
<select id="queryAll" resultType="entity.Login">
select * from login
</select>
</mapper>
- 如果想放在java目录下依旧能识别,只需在pom.xml中加入下面的东西
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
最后项目的总体目录如下:
第四步,运行该项目
效果图如下: