基于IDEA+Maven创建SSM框架项目

 
一、项目运行效果:
 
 
 
 
 
二、整体项目结构如下:
 
 
 
 
三、步骤
 
3.1.新建一个Maven工程
 
打开IDEA-->File-->New-->Project-->选择Maven-->勾选Create from archetype-->选择maven-archetype-webapp-->Next
 
 
填写GroupId(组织名称),和 ArtifactId(项目名)-->Next
 
 
选择使用的Maven的安装目录及settings.xml文件-->Next
 
 
确定项目名及项目路径-->点击Finish
 
 
等待一会项目构建完成后,目录结构如下:
 
 
 
 
3.2.新建目录结构,并设置目录属性
 
添加目录属性:
 
1)右键src/main/java-->Mark Directory as-->Sources Root。  此目录下写java代码
 
2)右键src/main/resources-->Mark Directory as-->Resources Root。  此目录下放资源配置文件
 
3)右键src/test/java-->Mark Directory as-->Test Sources Root。  此目录下写java测试代码
 
 
 
 
3.3.在src/main/java目录下新建包
 
 
1) 新建com.yongbosoft.pojo包:实体类
 
2) 新建com.yongbosoft.mapper包:  mapper接口
 
3) 新建com.yongbosoft.service包: 业务接口
 
4) 新建 com.yongbosoft.controller包: 控制类
 
 
3.4.在src/main/resources下新建目录、文件
 
 
1)新建applicationContext.xml文件:配置spring、mybatis
 
 
 
 
2)新建springmvc.xml文件:配置springMVC
 
3)新建db.properties文件:数据库配置
 
4)新建log4j.properties文件:日志配置
 
5)新建mapper目录,右键sources-->New-->Directory-->mapper-->OK: 写Mapper接口的配置
 
 
 
3.5. 数据库设计
 
这里使用MySQL数据库
 
1)新建数据库:adcms
 
create DATABASE acms;
2)新建数据表:user
 
SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(64) NOT NULL,
  `password` varchar(64) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张刚', '123', '10');
INSERT INTO `user` VALUES ('2', '王丽', '123', '20');
INSERT INTO `user` VALUES ('3', '李伟', '123', '30');
 
 
3.6.配置pom.xml
 
6.1、配置spring、mybatis版本号
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <!-- spring版本号 -->
        <spring.version>4.3.5.RELEASE</spring.version>
        <!-- mybatis版本号 -->
        <mybatis.version>3.4.1</mybatis.version>
    </properties>
 
6.2、配置依赖
 
  <dependencies>
    <!--单元测试-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <!-- 数据库 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
      <scope>runtime</scope>
    </dependency>
    <!-- 数据库连接池 -->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>
    <!-- MyBatis -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!-- mybatis/spring整合包 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!-- Spring -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</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-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--json所需要的依赖-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.7.3</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.7.3</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.7.3</version>
    </dependency>
  </dependencies>
 
 
 
3.7.编写配置文件
 
1)web.xml
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <!-- 上下文参数 -->
  <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>
  <!-- SpringMVC前端控制器 -->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <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>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- 字符编码过滤器器 -->
  <filter>
    <filter-name>encoding</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>encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
 
 
 
2) 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:tx="http://www.springframework.org/schema/tx"
       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
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd" default-autowire="byName">
    <!-- 注解扫描 -->
    <context:component-scan base-package="com.yongbosoft.service"></context:component-scan>
 
    <!-- 加载属性文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 数据源 -->
    <!--<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>-->
    <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}"/>
        <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
        <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
        <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
        <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
        <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
    </bean>
    <!-- SqlsessionFactory -->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 包别名 -->
        <property name="typeAliasesPackage" value="com.yongbosoft.pojo"></property>
        <!--指定mapper接口xml文件位置-->
        <property name = "mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
    <!-- Mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.yongbosoft.mapper"></property>
        <property name="sqlSessionFactoryBeanName" value="factory"></property>
    </bean>
    <!-- 事务管理器 -->
    <bean id="txManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 声明式事务 -->
    <!-- 在多线程高并发时,为避免同时提交,可在tx:method后面添加isolation="REPEATABLE_READ" -->
    <tx:advice id="txAdvice" transaction-manager="txManage">
        <tx:attributes>
            <tx:method name="ins*"/>
            <tx:method name="del*"/>
            <tx:method name="upd*"/>
            <tx:method name="*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
</beans>
 
 
 
3) springmvc.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:mvc="http://www.springframework.org/schema/mvc"
       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
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 扫描注解 -->
    <context:component-scan base-package="com.yongbosoft.controller"></context:component-scan>
    <!-- 注解驱动 -->
    <!-- <mvc:annotation-driver></mvc:annotation-driver> -->
    <mvc:annotation-driven></mvc:annotation-driven>
 
</beans>
 
 
 
4) db.properties
 
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/adcms
jdbc.username=root
jdbc.password=XXXXX
 
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2
注意修改数据库信息,例如:username、password的值。 
 
 
 
5) log4j.properties
 
log4j.rootCategory=DEBUG, CONSOLE, LOGFILE
 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{YYYY-MM-dd hh:mm:ss} %m %n
 
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=E:/my.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%m %n
 
 
3.8.编写java代码
 
1)com.yongbosoft.pojo包下新建类:User.java
 
package com.yongbosoft.pojo;
 
public class User {
    private int id;
    private String username;
 
    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;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                '}';
    }
}
 
 
 
2)com.jispon.mapper包下新建接口:UserMapper.java
 
package com.yongbosoft.mapper;
 
import com.yongbosoft.pojo.User;
 
import java.util.List;
 
public interface UserMapper {
    /**
     * 查询所有用户
     * @return
     */
    List<User> selAllUser();
}
 
 
resource/mapper目录下新建接口的配置文件:UserMapper.xml
 
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.yongbosoft.mapper.UserMapper">
    <select id="selAllUser" resultType="user">
select * from user
</select>
</mapper>
 
为验证代码/配置是否正确,建议写完一个Mapper进行一次单元测试
 
编写单元测试类:
 
在src/test/java下新建类: UserTest.java
 
 
 
 
UserTest.java代码如下:
 
package com.yongbosoft.test;
 
import com.yongbosoft.mapper.UserMapper;
import com.yongbosoft.pojo.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
import java.util.List;
 
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class TestUser {
 
    @Autowired
    private UserMapper userMapper;
 
    @Test
    public void testSelAllUser(){
        List<User> users = userMapper.selAllUser();
        System.out.println(users);
    }
}
 
 运行单元测试,点击@Test方法左侧的运行图标(三角形),点击Run 'testSelAllUser()' 运行
 
 
运行成功截图如下:
 
 
如果运行不成功,请检查前面的配置及相关代码。
 
 
3)编写service业务
 
新建UserService接口:右键com.yongbosoft.service包-->New-->Java Class
 
 
 
UserService.java代码如下:
 
package com.yongbosoft.service;
 
import com.yongbosoft.pojo.User;
 
import java.util.List;
 
public interface UserService {
    List<User> findAllUser();
}
 
编写UserService接口实现类
 
右键com.yongbosoft.service包-->New-->Java Class-->impl.UserServiceImpl
 
 
 
UserServiceImpl.java代码如下:
 
package com.yongbosoft.service.impl;
 
import com.yongbosoft.mapper.UserMapper;
import com.yongbosoft.pojo.User;
import com.yongbosoft.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> findAllUser() {
        return userMapper.selAllUser();
    }
}
 
 
 
4)编写控制类
 
右键com.yongbosoft.controller包-->New-->Java Class-->UserController-->OK
 
 
 
package com.yongbosoft.controller;
 
import com.yongbosoft.pojo.User;
import com.yongbosoft.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
 
import java.util.List;
 
@Controller
public class UserController {
    @Autowired
    private UserService userService;
 
    /**
     * 返回json数据
     * @return
     */
    @RequestMapping("/find")
    @ResponseBody
    public List<User> findUser(){
        return userService.findAllUser();
    }
 
    /**
     * 返回jsp页面
     * @param model
     * @return
     */
    @RequestMapping("/allUser")
    public String findUser1(Model model){
        List<User> user = userService.findAllUser();
 
        model.addAttribute("user", user);
        return "index.jsp";
    }
}
 
 
 
5)编写页面index.jsp
 
src/main/webapp/index.jsp内容如下:
 
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
</head>
<body>
<h2>Hello World!</h2>
user:${requestScope.user }
</body>
</html>
 
 
3.9.运行测试
 
1)运行配置,详细可参考:IDEA设置tomcat及部署web项目
 
点击Run-->Edit Configurations-->点击弹窗左上角"+"-->Tomcat Server-->Local-->修改服务名为ssmdemo(名称随意写)-->Server-->检查Application server是否为本地的Tomcat-->选择运行后访问的浏览器
 
 
点击Deployment-->点击右侧的“+”-->选择Artifact-->选择ssmdeml:war exploded-->在Application context中填写URL访问路径-->OK
 
 
 
查看服务器名为刚才配置的服务器名称ssmdemo, 点击右侧的运行图标(三角形)运行。
 
 
 
 
2)浏览器访问:
 
2.1)http://localhost/ssm_demo01/getByUser
 
可以看到服务器直接返回json数据到浏览器
 
 
 
 
 
 
2.2) http://localhost/ssm_demo01/listAllUser
 
可看到服务器返回了jsp的内容,并可以通过${requestScope.user }取到服务器的数据。
 
 
 
至此,基于IDEA+maven整合SpringMVC、Spring、Mybatis框架完成!
 
源码下载地址:http://bbs.yongbosoft.com/bbs/html/1bbc4a7a9bc54da0a946af494442e2ae.html
 
欢迎大家交流探讨!