搭建jdk、myeclipse等环境的过程网上资源很多,这里也给出一个链接供大家参考:http://blog.csdn.net/zhshulin/article/details/30779873
搭建环境好以后就可以直接创建Maven项目,点击 new ->Maven Project->next->maven-archetype-webapp->填入项目名称finish即可.
1)、搭建好项目后需要引入所需的架包,可以在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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SSMDemo</groupId> <artifactId>SSMDemo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SSMDemo Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <!-- spring版本号 --> <spring.version>4.0.2.RELEASE</spring.version> <!-- mybatis版本号 --> <mybatis.version>3.2.6</mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version>1.7.7</slf4j.version> <log4j.version>1.2.17</log4j.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!--Expression Language (depends on spring-core) Define this if you use Spring Expression APIs (org.springframework.expression.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <!-- Bean Factory and JavaBeans utilities (depends on spring-core) Define this if you use Spring Bean APIs (org.springframework.beans.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- Aspect Oriented Programming (AOP) Framework (depends on spring-core, spring-beans) Define this if you use Spring AOP APIs (org.springframework.aop.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!--Application Context (depends on spring-core, spring-expression, spring-aop, spring-beans) This is the central artifact for Spring’s Dependency Injection Container and is generally always defined --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Various Application Context utilities, including EhCache, JavaMail, Quartz, and Freemarker integration Define this if you need any of these integrations --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!--Transaction Management Abstraction (depends on spring-core, spring-beans, spring-aop, spring-context) Define this if you use Spring Transactions or DAO Exception Hierarchy (org.springframework.transaction.*/org.springframework.dao.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- JDBC Data Access Library (depends on spring-core, spring-beans, spring-context, spring-tx) Define this if you use Spring’s JdbcTemplate API (org.springframework.jdbc.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- Object-to-Relation-Mapping (ORM) integration with Hibernate, JPA, and iBatis. (depends on spring-core, spring-beans, spring-context, spring-tx) Define this if you need ORM (org.springframework.orm.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <!-- Object-to-XML Mapping (OXM) abstraction and integration with JAXB, JiBX, Castor, XStream, and XML Beans. (depends on spring-core, spring-beans, spring-context) Define this if you need OXM (org.springframework.oxm.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${spring.version}</version> </dependency> <!-- Web application development utilities applicable to both Servlet and Portlet Environments (depends on spring-core, spring-beans, spring-context) Define this if you use Spring MVC, or wish to use Struts, JSF, or another web framework with Spring (org.springframework.web.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring MVC for Servlet Environments (depends on spring-core, spring-beans, spring-context, spring-web) Define this if you use Spring MVC with a Servlet Container such as Apache Tomcat (org.springframework.web.servlet.*) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- Support for testing Spring applications with tools such as JUnit and TestNG This artifact is generally always defined with a ‘test’ scope for the integration testing framework and unit testing stubs --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</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.2.2</version> </dependency> <!-- 导入Mysql数据库链接jar包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!-- 日志记录依赖包,很多都依赖此包,像log4j,json-lib等等 --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency> <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <!-- JSTL标签类 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- 日志文件管理包 --> <!-- 格式化对象,方便输出日志 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.41</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- jackson 包 start--> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-asl</artifactId> <version>1.9.11</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.11</version> </dependency> <!-- jackson 包 结束--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>SSMDemo</finalName> </build> </project>
2)将工程转化为web工程该过程有俩步第一右键项目点击Properties->Deployment Assembly(在此设置我们需要发布哪些文件夹下的内容),需要发布的包格式如下所示,没有的文件夹可以自己新建
第二部是将项目转化为web项目,还是在Properties中点击project Facets直接点apply(它会自动帮你勾选所需的)
3)在resources中创建四个文件夹来存放我们的资源文件:
spring-mybatis:存放Spring-mybatis的配置文件,Spring-mybatis.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:mybatis="http://mybatis.org/schema/mybatis-spring" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.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"> <!-- 加载资源文件: 数据库连接文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:/properties/jdbc.properties"/> </bean> <!-- 配置数据源 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </bean> <!-- 配置 mybatis --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 扫描entity --> <property name="typeAliasesPackage" value="com.ssmdemo.entity"/> <!-- 注册mapper.xm --> <property name="mapperLocations" value="classpath*:/mapper/*.xml"/> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ssmdemo.dao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> <!-- 添加事务管理 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 采用注解方式管理事务 --> <tx:annotation-driven transaction-manager="transactionManager"/> </beans>
springmvc-servlet:存放springmvc的配置文件,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-4.3.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"> <!-- 启用srping mvc注解 --> <!-- <mvc:annotation-driven />开启设置可以替代 --> <!-- <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> --> <mvc:annotation-driven/> <!-- 静态资源 --> <mvc:resources location="/img/" mapping="/img/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <!-- 拦截器 --> <!-- <mvc:interceptors></mvc:interceptors> --> <!-- 自动扫描的包,使Spring支持自动检测组件,如注解的Controller --> <context:component-scan base-package="com.ssmdemo"/> <!--视图解析器: 定义视图的前缀后缀 --> <bean id="resourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
properties:存放日志文件、数据库连接池的文件
jdbc.properties
<?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-4.3.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"> <!-- 启用srping mvc注解 --> <!-- <mvc:annotation-driven />开启设置可以替代 --> <!-- <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/> --> <mvc:annotation-driven/> <!-- 静态资源 --> <mvc:resources location="/img/" mapping="/img/**"/> <mvc:resources location="/js/" mapping="/js/**"/> <!-- 拦截器 --> <!-- <mvc:interceptors></mvc:interceptors> --> <!-- 自动扫描的包,使Spring支持自动检测组件,如注解的Controller --> <context:component-scan base-package="com.ssmdemo"/> <!--视图解析器: 定义视图的前缀后缀 --> <bean id="resourceView" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/page/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
日志配置文件:log4j.properties
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! # For all other servers: Comment out the Log4J listener in web.xml to activate Log4J. log4j.rootLogger=debug,console,txt # Direct Log Messages To Console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.Target=System.out log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L - %m%n log4j.appender.txt=org.apache.log4j.RollingFileAppender log4j.appender.txt.File=${webapp.root}/WEB-INF/log/log.txt log4j.appender.txt.MaxFileSize=500KB log4j.appender.txt.MaxBackupIndex=1 log4j.appender.txt.layout=org.apache.log4j.PatternLayout log4j.appender.txt.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n # org.hibernate #log4j.logger.org.hibernate=debug # org.hibernate.SQL #log4j.logger.org.hibernate.SQL=debug # Log Schema Export Update #log4j.logger.org.hibernate.tool.hbm2ddl=debug
<?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.ssmdemo.dao.UserDao"> <insert id="add" parameterType="User"> insert into user(username,password,email) values(#{username},#{password},#{email}) </insert> <update id="update" parameterType="User"> update user set username = #{username}, password = #{password}, email = #{email} where id = #{id} </update> <delete id="delete" parameterType="Integer"> delete from user where id = #{id} </delete> <select id="findByID" parameterType="Integer" resultType="User"> select * from user where id = #{id} </select> <resultMap type="User" id="userMap"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <result column="email" property="email"/> <!-- <association property="classes" column="class_id" select="findByID"></association> --> </resultMap> <select id="findAll" resultMap="userMap"> select * from user </select> </mapper>
#Spring config#log4j.logger.org.springframewaork = DEBUG #Mybatis config#log4j.logger.org.mybatis=DUBUG#log4j.logger.net.openwares.test.mapper = TRACE#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG#JDBC configlog4j.logger.java.sql.Connection = DEBUG log4j.logger.java.sql.Statement = DEBUG log4j.logger.java.sql.PreparedStatement = DEBUG log4j.logger.java.sql.ResultSet =DEBUGmapper:存放数据库的实体对应的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.ssmdemo.dao.UserDao"> <insert id="add" parameterType="User"> insert into user(username,password,email) values(#{username},#{password},#{email}) </insert> <update id="update" parameterType="User"> update user set username = #{username}, password = #{password}, email = #{email} where id = #{id} </update> <delete id="delete" parameterType="Integer"> delete from user where id = #{id} </delete> <select id="findByID" parameterType="Integer" resultType="User"> select * from user where id = #{id} </select> <resultMap type="User" id="userMap"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="password" property="password"/> <result column="email" property="email"/> <!-- <association property="classes" column="class_id" select="findByID"></association> --> </resultMap> <select id="findAll" resultMap="userMap"> select * from user </select> </mapper>
至此框架的配置过程就完成了,现在我们要开始写后台文件了,SSM也是一个典型的三层架构模式,所以它也拥有entity . dao , service , controller这些包,4)实体类中的User.java 文件
package com.ssmdemo.entity; public class User { private Integer id; private String username; private String passsword; private String email; public Integer getId() { return id; } public void setId(Integer 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; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
5)dao层,其中写的是数据库底层的增删改方法,UserDao.java文件package com.ssmdemo.dao; import java.util.List; import org.springframework.stereotype.Repository; import com.ssmdemo.entity.User; @Repository(value="userDao") public interface UserDao { /** * 此方法对应于数据库中的表 ,user * 新写入数据库记录 * * @param record */ void add(User user); /** * 此方法对应于数据库中的表 ,user * 根据主键来更新符合条件的数据库记录 * * @param record */ void update(User user); /** * 此方法对应于数据库中的表 ,user * 根据主键删除数据库的记录 * * @param id */ void delete(Integer id); /** * 此方法对应于数据库中的表 ,user * 根据指定主键获取一条数据库记录 * * @param id */ User findByID(Integer id); /** * 此方法对应于数据库中的表 ,user * 查询所有数据库记录 */ List<User> findAll(); }
6)service层,业务逻辑层 其中写的是各类业务方法,该包的目录结构类似于SSH框架中service的目录结构,该包存放的是接口,和一个实现类的包UserService.java
package com.ssmdemo.service; import java.util.List; import com.ssmdemo.entity.User; public interface UserService { public void add(User user); public void update(User user); public void delete(Integer id); public User findByID(Integer id); public List<User> findAll(); }
UserServiceImpl.javapackage com.ssmdemo.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import com.ssmdemo.dao.UserDao; import com.ssmdemo.entity.User; import com.ssmdemo.service.UserService; @Service(value = "userService") @Transactional public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; public void add(User user) { userDao.add(user); } public void update(User user) { userDao.update(user); } public void delete(Integer id) { userDao.delete(id); } @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true) public User findByID(Integer id) { return userDao.findByID(id); } @Transactional(propagation = Propagation.NOT_SUPPORTED,readOnly = true) public List<User> findAll() { return userDao.findAll(); } }
7)controller,该包的功能可以理解为SSH中的action,但其实并不是 它们的意思有很大的不同,UserController.java
package com.ssmdemo.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.test.context.TestExecutionListeners; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.ssmdemo.entity.User; import com.ssmdemo.service.UserService; @Controller @RequestMapping(value="/user") public class UserController { @Autowired private UserService userService; /** * 用户信息列表 * @return * 如果采用JSON传值,那么需要注释掉下方方法中的代码 * List<User> userList = userService.findAll(); * mv.addObject("userList", userList); * 直接返回一个空视图名称 * 页面异步加载数据,请查看下方注释方法 */ @RequestMapping(value = "/userList") public ModelAndView userList(){ List<User> userList = userService.findAll(); ModelAndView mv = new ModelAndView(); mv.addObject("userList", userList); mv.setViewName("userList"); return mv; } /** * 用户信息列表 页面异步加载 * @return * @ResponseBody 注解的作用是将目标类型数据转换成json格式 * 另外页面需要加入jquery js */ /*@RequestMapping(value = "/list") public @ResponseBody List<User> list(){ List<User> userList = userService.findAll(); return userList; } */ /** * 跳转到添加信息视图 * @return */ @RequestMapping(value = "/addLoad") public ModelAndView addLoad(){ ModelAndView mv = new ModelAndView(); mv.setViewName("add"); return mv; } /** * 添加信息 * @param user * @return */ @RequestMapping(value = "/add",method = RequestMethod.POST) public String add(User user){ userService.add(user); return "redirect:/user/userList"; } /** * 修改信息获取,跳转到修改信息视图 * @param id * @return */ @RequestMapping(value = "/editLoad") public ModelAndView editLoad(@RequestParam(value = "id") Integer id){ User user = userService.findByID(id); ModelAndView mv = new ModelAndView(); mv.addObject("user", user); mv.setViewName("edit"); return mv; } /** * 修改信息 * @param user * @return */ @RequestMapping(value = "/edit",method = RequestMethod.POST) public String edit(User user){ userService.update(user); return "redirect:/user/userList"; } /** * 删除用户 * @param id * @return */ @RequestMapping(value = "/delete") public String delete(@RequestParam(value = "id") Integer id){ userService.delete(id); return "redirect:/user/userList"; }
至此一个简易的SSM框架就搭建好了,我们现在在进行一个千寻漫画的开发,前台是移动安卓端,后台是一个SSM框架写的,拥有爬虫技术去搜索漫画后把漫画发给安卓端去显示的系统,后续在开发的过程中如果有一些自己的心得体会也会记录下来,供自己以及大家学习分享!