点击第一个create new project
a,选择左侧的maven,b,勾选create from archetype
c,选择下面的org.apache.maven.archetypes:maven-archetype-webapp(千万别选错)
点击下一步next
在GroupId里输入团队名,一般是com.xxx.yyy格式,是公司域名的反写,com代表,company,中间xxx是项目名缩写,yyy一般是公司名缩写,在这里我就不写了,我是com+我名字的缩写lzh
ArtifactId就写项目名全称
写完以后点击next下一步
这一步配置maven和maven本地库的地址,一般会有默认选项我们可以直接next,但是最好还是根据自己maven下载的位置和设置来配置,在选择文件夹之前必须先勾选override,这样才能选择文件夹,找到maven下载的位置,选择conf文件夹下的settings.xml文件,然后再选择本地库地址,这样pom下载下来的本地包都就都会存储在这里、点击next下一步
创建工程的最后一步,分别输入project name工程名和project location工程位置,不过也会有默认,一般会存在你平时的workspace,这里作者喜欢放桌面,因为这样操作比较直观,当然是不好的,这个相信读者都会自己配置,就不说了,点击Finish完成创建
创建成功后进入idea,这时候右下角会有一个event log提示maven工程需要imported,点击右边那个,这样是告诉编辑器,下次pom有新的依赖注入,允许自动import包,比较方便
弄完以后文件目录是这样的
打开pom文件,pom中一般我们只需要配置dependencies这个地方,这是写jar包的地方,格式读者可以参考一下下面我圈起来的地方(下面我把一个SSM项目需要的jar包的pom贴出来,读者可以直接复制)
这里是maven中pom.xml的所有依赖,包括SSM的基础包,文件上传所需要的包和json的包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.1.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- mybatis 包 -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mybatis spring-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- mysql -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!-- 数据源 -->
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.2</version>
</dependency>
<!-- log4j -->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- json -->
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.jackson/jackson-mapper-asl -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<!-- 文件上传 -->
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- 分页-->
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
等待片刻,等pom自动自动下载完所有jar包
再在pom的中添加一下代码(如果不添加,会出现tomcat发布的时候发布不了mapper.xml文件的情况)
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
完成后,接下来我们再src下的main下面新建java包
并将java包标记为sources root目录
同样在 main 文件下新建 resources文件夹,再将resources文件标注为资源文件根目录Resources Root
同样的,我们需要对webapp这个包也做同样的处理,标记为资源文件根目录Resources Root
接下来在WEB-INF下新建jsp包,用来存放我们的jsp文件(后面的文件配置也默认jsp在此包下)
标记完后文件夹颜色和样式会变成这样,则说明成功了(java包变蓝色,resources包有四根金条,webapp中间有蓝色的点,下面的WEB-INF包有一个空心圆)
前面都是简单的依样画葫芦,所有的文件路径以及pom的编写都结束以后
才到了真正需要记住的,和需要思考的环节,那就是Spring,SpringMVC,Mybaits的整合部分
不过在做整合之前,配置文件中有时候需要很多对应class或者mapper的存在,
所以我们先从java代码部分入手
也就是说,我们先把简单的实体类pojo,数据库操作层mapper,控制层controller和服务层service都先写好,再去配置整合,这样读者更加容易懂
我们在java文件夹下,新建com.lzh,
这里lzh是作者的名字,跟之前新建项目时候的group.id一致(一般来说不是个人都写的是com.公司名缩写)
点击ok,我们再在com.lzh文件夹下新建(pojo,mapper,controller,service和util)五个文件夹,分别存放实体类,操作数据类,控制层业务类,接口服务类和工具类,此时文件结构是这样的
好,到这一步,我们先放下idea,我们去准备数据库和表(使用mysql数据库)请自行下载
作者使用navicat操作mysql数据库,就是下面这个软件
进入mysql数据库
1.新建数据库
点击确认
2.新建查询,创建user表
use test;
CREATE TABLE user (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(30) ,
PRIMARY KEY (id)
) DEFAULT CHARSET=UTF8;
3.准备数据
use test;
INSERT INTO `user` VALUES(NULL,"皮卡丘");
在test数据库中,user表里,插入一条数据
数据准备完成,接下来我们回到项目,在pojo文件夹下,新建User类
跟数据库中的字段匹配,User类中字段分别是id,和name
package com.lzh.pojo;
public class User {
public Integer id;
public String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
再mapper包下新建UserMapper接口,注意是接口,interface
新建get方法,根据id查询user并返回User类
package com.lzh.mapper;
import com.lzh.pojo.User;
public interface UserMapper {
public User get(Integer id);
}
继续再mapper包下新建UserMapper.xml文件用来写入sql语句操作数据库
注意这里的namespace一定得对应上包名类名,(如果复制作者的代码,请修改namespace换成自己的mapper的路径)
select中, id是对应UserMapper接口的get方法名,resultType对应的是返回类型,paraaterMap对应的是参数类型
(不了解的同学可以先去看Mybatis的资料,还有很多Mybatis更多高级的语法此处不会提到)
<?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.lzh.mapper.UserMapper">
<select id="get" resultType="User" parameterType="Integer">
select * from user where id= #{id}
</select>
</mapper>
在service包下新建UserService接口,写入get方法用来获得User并返回
public interface UserService {
public User get(int id);
}
接着在service包下新建UserServiceImpl类用来实现UserService接口和其中的get方法
@Service标注了这是一个Service
@Autowired自动装配UserMapper,为我们省去了new的环节,这也是spring注解的特性
方法中调用了UserMapper中的get方法,我们再在后面传入id,接下来就交给UserMapper其中的我们写的sql语句自己的去操作了
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public User get(int id) {
return userMapper.get(id);
}
}
接下来我们在controller包下新建UserController,终于到了业务控制层
@Controller
@RequestMapping("")
public class UserController {
@Autowired
UserService userService;
@RequestMapping("test")
public ModelAndView get(int id){
ModelAndView mav=new ModelAndView();
mav.setViewName("test");
User user=userService.get(id);
mav.addObject("user",user);
return mav;
}
}
接下来我们到了整合SSM配置环节
打开webapp包下WEB-INF包,编辑web.xml文件
配置spring和springMVC
<!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>
<!-- spring的配置文件-->
<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>
<!-- spring mvc核心:分发servlet -->
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- spring mvc的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
再resources包下新建applicationContext.xml 用于配置数据库连接池和mybatis 中mapper扫描配置
(注:代码复制过去的时候别忘了修改文件中数据库账户密码来匹配自己的mysql数据库还有各种包路径也需要修改)
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:annotation-config />
<context:component-scan base-package="com.lzh.service" />
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="" />
<property name="username" value="" />
<property name="password" value="" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="3" />
<property name="minIdle" value="3" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 1" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="typeAliasesPackage" value="com.lzh.pojo" />
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:com/lzh/mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
</value>
</property>
</bean>
</array>
</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.lzh.mapper"/>
</bean>
</beans>
继续在resources下新建springMVC.xml文件
将controller生命加入spring管理
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<context:annotation-config/>
<!-- 将controller生命周期纳入spring管理-->
<context:component-scan base-package="com.lzh.controller">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 开启注解-->
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/plain;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"/>
<!--视图定位-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1"/>
<property name="defaultViews">
<list> <!-- JSON View -->
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
</bean>
</list>
</property>
</bean>
<!--开通静态资源的访问-->
<mvc:default-servlet-handler/>
<!-- 对上传文件的解析-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 上传文件大小上限,单位为字节(10MB) -->
<property name="maxUploadSize">
<value>10485760</value>
</property>
<!-- 请求的编码格式,必须和jSP的pageEncoding属性一致,以便正确读取表单的内容,默认为ISO-8859-1 -->
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
</beans>
新建mybatis-config.xml文件用来配置mybatis,不过作者目前只用到一个驼峰命名
(有兴趣的小伙伴可以自定百度一下,这是一种命名规范,也用于java命名方法和数据库命名方法的对接)
<?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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
再再WEB-INF/jsp下面新建一个test.jsp文件
${user}接收controller控制器传过来的user,要使用jstl语句需要添加第一句,也可以通过用idea自动修改添加
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title></title>
</head>
<body>
${user}
</body>
</html>
接下来部署tomcat,点击add configuration
点击左上角的加号,找到Tomcat Server中的local
(注:如果找不到tomcat server,可以拉到最底端找到 items more,点击在里面找)
点击了loca之后显示这个页面,点击其中的fix或者上面的Deployment
点击右边的加号,选择Artifact
选择第二个war exploded,点击OK完成配置tomcat,点击ok,启动tomcat
启动完后刚进来的页面是这样的
我们需要通过在地址栏输入刚才在控制器中 @RequestMapping(“test”)的test再加上id,就可以访问这个test页面了,
我们的url输入的是
http://localhost:8080/test?id=1
因为此时user表中只有一个皮卡丘,id是1,所以 在后面加上?id=1用来传输sql语句所需要的id
查询成功