初学者SSM框架的创建过程

来源:互联网 发布:jdbc mysql原理 编辑:程序博客网 时间:2024/05/31 19:01

搭建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 =DEBUG

mapper:存放数据库的实体对应的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.java

package 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")@Transactionalpublic class UserServiceImpl implements UserService {@Autowiredprivate 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 {@Autowiredprivate 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框架写的,拥有爬虫技术去搜索漫画后把漫画发给安卓端去显示的系统,后续在开发的过程中如果有一些自己的心得体会也会记录下来,供自己以及大家学习分享!


                                             
1 0