首先现在自己电脑上安装maven,还有eclipse的maven IDE,具体步骤这里就不多说了.
具体配置maven仓库还有设置eclipse IDE支持的jdk版本(默认是jdk1.5我自己用的是jdk1.8)请参阅:
测试用的数据库信息: mysql
CREATE DATABASE maven;
CREATE TABLE user_table (
id INT PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(50),
pass_word VARCHAR(50)
)
INSERT INTO user_table(user_name, pass_word) VALUES('zhao', '123123');
INSERT INTO user_table(user_name, pass_word) VALUES('qian', '111111');
INSERT INTO user_table(user_name, pass_word) VALUES('sun', '222222');
INSERT INTO user_table(user_name, pass_word) VALUES('li', '333333');
第一步NEW Maven Project:
Next-->
继续Next-->
没什么说的 Finish.
建好之后,整个目录结构如下,另外自己还需要做一些小改动,因为自动创建的项目里面不包含/WEB-INF/web.xml(webapp相当于WebContent)文件.需要自己手动创建一个,
修改之后如下:
在pom.xml文件中引入所需要的jar包.具体怎么引入可以参考: http://maven.aliyun.com/mvn/search 以及https://mvnrepository.com/ 这是两个maven的中央仓库,一个是国外的,一个是阿里的,如果网速不给力就用国内的吧
以下是pom.xml文件信息:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stk.maven</groupId>
<artifactId>ssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<!-- 自定义spring.version的值为4.3.0.RELEASE以便下面调用 -->
<spring.version>4.3.0.RELEASE</spring.version>
<mybatis.version>3.4.6</mybatis.version>
<mysql.version>5.1.47</mysql.version>
<c3p0.version>0.9.5.2</c3p0.version>
</properties>
<!-- 在里面添加各种引入 -->
<dependencies>
<!-- c3p0 引入 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>${c3p0.version}</version>
</dependency>
<!-- JSP标准标签库 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 日志相关包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<!-- 单元测试相关包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
<!-- 引入mybatis-spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 引入mysql的包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 引入mabatis的包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 引入支持spring的包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</project>
第一次的话会有点慢,多等一会他会自动从中央仓库下载你没有的jar包,以后再用就直接调用本地仓库了.
接下来配置我们的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>ssm</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 引入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>
<!-- Web 前端控制器 -->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 拦截所有请求 -->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
在web.xml同级目录下创建和上面的<servlet-name>相对应的?-servlet.xml配置文件(Spring Bean Configuration File),我上面设置的是SpringMVC,所以我创建的文件名是springMVC-servlet.xml.
在springMVC-servlet.xml文件中引入bean, context, mvc标签内容如下:
springMVC-servlet.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-4.3.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!-- springMVC 只是控制跳转逻辑
use-default-filters: 默认是true 就是保持默认的过滤行为(扫描所有注释)
当它设置为false 并且和<context:include-filter>标签一起用时,就可以只扫描包含的包,其他不扫描
-->
<context:component-scan base-package="com.stk.controller" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 动态 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 处理静态资源 -->
<mvc:default-servlet-handler />
</beans>
视图解析器中将所有视图都放在WEB-INF/views/下,所以将该目录创建:
创建com.stk.controller包存放所有的Controller:
接下来在源目录下创建applicationContext.xml文件(文件类型是Spring Bean Configuration File):
在applicationContext.xml的namespace中引入beans, context, mybatis, tx标签:
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"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
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-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<!-- spring 管理控制所有的业务逻辑 -->
<!-- 引入配置文件 -->
<context:property-placeholder location="classpath:dataconfig.properties"/>
<!-- 引用C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"></property>
<property name="jdbcUrl" value="${jdbc.url}"></property>
<property name="user" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- spring 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 用<context:exclude-filter> 标记除了Controller 组件外别的都扫描 -->
<context:component-scan base-package="com.stk">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 开启基于注解的事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- 整合mybatis: -->
<!-- 创建SQLSessionFactory 对象 -->
<bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 指定mapper 文件的位置 -->
<property name="mapperLocations" value="classpath:com/stk/mappers/*.xml"></property>
</bean>
<!-- 扫描所有的mapper 让其能自动注入 -->
<mybatis-spring:scan base-package="com.stk.dao"/>
</beans>
数据源我们放在专门的配置文件中resource/dataconfig.properties;
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/maven
jdbc.username=root
jdbc.password=root
根据数据库创建Java对象:
User类:
package com.stk.beans;
public class User {
private int id;
private String userName;
private String passWord;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]";
}
public User() {
super();
}
}
创建 com/stk/dao,com/stk/service包用来保存dao层接口以及service层
下面创建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<a href="getAllUser">获取用户信息</a>
</body>
</html>
创建dao层接口: UserMapper.java
package com.stk.dao;
import java.util.List;
import com.stk.beans.User;
public interface UserMapper {
public List<User> getAllUser();
}
创建service层实现: UserService.java
package com.stk.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.stk.beans.User;
import com.stk.dao.UserMapper;
@Service
public class UserService implements UserMapper {
@Autowired
private UserMapper userMapper;
public List<User> getAllUser() {
return userMapper.getAllUser();
}
}
在Controller中控制调用:UserController.java
package com.stk.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.stk.beans.User;
import com.stk.service.UserService;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getAllUser")
public String getAllUser(Map<String, Object> map) {
List<User> allUser = userService.getAllUser();
map.put("allUser", allUser);
return "showuser";
}
}
在views目录下创建showuser.jsp, 并显示用户信息
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<table>
<tr>
<td>Id</td>
<td>UserName</td>
<td>PassWord</td>
</tr>
<c:forEach items="${allUser}" var="allUser">
<tr>
<td>${allUser.id}</td>
<td>${allUser.userName}</td>
<td>${allUser.passWord}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
在/resources/com/stk/mappers目录中创建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.stk.dao.UserMapper">
<!-- public List<User> getAllUser(); -->
<select id="getAllUser" resultType="com.stk.beans.User">
SELECT id, user_name
userName, pass_word passWord FROM user_table
</select>
</mapper>
到此整个框架完成,可以测试运行了:
(这个problem不用管,不影响运行)