前言:ssm框架是spring+springMvc+Mybatis的缩写,是继SSH框架后又一个主流的java EE企业级框架,适用于搭建各种大型的企业级应用系统。这不,我所在公司的产品也是基于该主流框架进行搭建的。初识SSM框架是各种的不适应,不过使用久了发现ssm框架异常顺手。使用几个月下来可以说在开发公司产品项目上已经没什么大问题了,但是我才发现我做的开发都是在前辈搭建好框架的基础上进行的开发,其实就是ctrl+c,ctrl+v的模式,这不就是搬运工嘛,我可不想只做搬运工。因为我自己以前也做过业务,深知客户销售管理的重要性,所以我就想着干脆自己做一个crm的销售管理系统吧,顺便也把SSM框架重头到尾自己亲手搭建一遍,岂不快哉!
说干就干!
1.首先导入所有ssm所需要用到的包,如下图所示:(网上搜索ssm框架所需要的jar包一搜一大把,不懂的可私聊我拿包)
还有一个包千万别忘记导入了:
根据你所选择的数据库导入相应的jar包
此步骤虽说简单,但这个步骤成功了,就向着项目搭建成功迈出了一大步了。
2.创建项目结构:
创建resource文件夹,用于存放mybatis以及spring的xml文件的地方(此步骤一定需要注意,要把resource标注为资源文件包,不然后续启动服务器,是无法扫描到xml文件的)
static文件夹用于存放静态的资源文件,比如你项目需要引用的前端后台框架模板或者js,css等文件
下面就开始代码部分:
1.创建SysUser实体类
1 public class SysUser { 2 private int userId;//用户ID 3 private String userName;//用户名 4 private String password;//密码 5 private String name; //姓名 6 private String rights;//权限 7 private String roleId;//角色 8 private String lastLoginTime;//最后登录时间 9 private String ip;//登录IP 10 private String status;//状态 11 private String bz;//备注 12 private String email;//电子邮箱 13 private String number;//编号 14 private String phone;//手机号 15 private int sysId;//所属公司 16 public SysUser() { 17 super(); 18 } 19 public SysUser(String userName, String password) { 20 super(); 21 this.userName = userName; 22 this.password = password; 23 } 24 25 public SysUser(int userId) { 26 super(); 27 this.userId = userId; 28 } 29 public int getUserId() { 30 return userId; 31 } 32 . 33 . 34 . 35 . 36 . 37 .getter(),setter()代码自行补充完整
2.新建mybatis-coonfig.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 6 <typeAliases> 7 <!-- 这里添加生成的实体类 --> 8 <typeAlias type="com.cxkj.entity.system.SysUser" alias="SysUser"/> 9 <!-- 传参数据,封装的用于传入mapping中的类--> 10 <typeAlias type="com.cxkj.util.PageData"alias="pd"/> <!-- 设置的pd的参数,将来在mapper.xml文件中有用到 --> 11 </typeAliases> 12 13 14 </configuration>
3.新建pageData实体类,把要传入mapping中的代码封装在这个实体类当中,该类继承了hashmap并实现了map接口
1 package com.cxkj.util; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 import javax.servlet.http.HttpServletRequest; 7 8 import org.aspectj.weaver.patterns.ThisOrTargetAnnotationPointcut; 9 10 import javassist.expr.Instanceof; 11 12 /** 13 * @className: 14 * @author cxkj-gjc 15 * @version 1.0 16 */ 17 public class PageData extends HashMap implements Map { 18 private static final long serialVersionUID = 1L; 19 Map map = null; 20 HttpServletRequest request; 21 22 public PageData(){ 23 24 this.map = new HashMap(); 25 } 26 27 public Object get(Object key){ 28 Object object = null; 29 if (this.map.get(key) instanceof Object[]){ 30 Object[] arr = (Object[])this.map.get(key); 31 object = this.request.getParameter((String)key) == null ? arr : this.request == null ? arr : arr[0]; 32 }else{ 33 object = this.map.get(key); 34 } 35 36 return object; 37 } 38 39 public String getString(String key){ 40 41 return (String)get(key); 42 } 43 44 public Object put(Object key,Object value){ 45 46 return this.map.put(key, value); 47 48 } 49 50 public Object remove(Object key){ 51 52 return this.map.remove(key); 53 } 54 55 public void clear(){ 56 57 this.map.clear(); 58 } 59 60 public boolean isEmpty(){ 61 return this.map.isEmpty(); 62 63 } 64 public void putAll(Map map){ 65 66 this.map.putAll(map); 67 68 } 69 public int size(){ 70 71 return this.map.size(); 72 } 73 74 public boolean containsKey(Object key){ 75 return this.map.containsKey(key); 76 } 77 78 public boolean containsValue(Object value){ 79 80 return this.map.containsValue(value); 81 } 82 }
4.UserMapper.xml文件,在该文件中编写sql语句实现用户登录的功能:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <mapper namespace="UserMapper"> 5 <!--表名 --> 6 <sql id="tableName"> 7 sys_user 8 </sql> 9 10 <!-- 字段 --> 11 <sql id="Field"> 12 <!-- USER_ID, --> 13 USERID, 14 USERNAME, 15 PASSWORD, 16 NAME, 17 RIGHTS, 18 ROLEID, 19 LASTLOGIME, 20 IP, 21 STATUS, 22 BZ, 23 EMAIL, 24 NUMBER, 25 PHONE, 26 SYSID 27 </sql> 28 29 <!-- 字段值 --> 30 <sql id="FieldValue"> 31 #{USERID}, 32 #{USERNAME}, 33 #{PASSWORD}, 34 #{NAME}, 35 #{RIGHTS}, 36 #{ROLEID}, 37 #{LASTLOGIME}, 38 #{IP}, 39 #{STATUS}, 40 #{BZ}, 41 #{EMAIL}, 42 #{NUMBER}, 43 #{PHONE}, 44 #{SYSID} 45 </sql> 46 47 <select id="getUserInfo" parameterType="pd" resultMap="pd"> 48 SELECT 49 <include refid="Field"></include> 50 FROM 51 <include refid="tableName"></include> 52 WHERE 53 1 = 1 54 <if test="USERNAME != null"> 55 AND 56 USERNAME = #{USERNAME} 57 </if> 58 <if test="PASSWORD != null"> 59 AND 60 PASSWORD=#{PASSWORD} 61 </if> 62 </select> 63 </mapper>
5.新建applicationContext-mvc.xml文件,这个文件主要用于springmvc控制器的相关配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context-4.1.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> 12 13 <!-- 告知Spring,我们启用注解驱动 --> 14 <mvc:annotation-driven/> 15 <!-- DispatcherServlet不处理静态资源,交给服务器默认的servlet处理 --> 16 <mvc:default-servlet-handler/> 17 18 <!-- 指定要扫描的包的位置 --> 19 <context:component-scan base-package="com.cxkj.*" /> 20 21 <!-- 对静态资源文件的访问,因为Spring MVC会拦截所有请求,导致jsp页面中对js和CSS的引用也被拦截,配置后可以把对资源的请求交给项目的 22 默认拦截器而不是Spring MVC--> 23 <mvc:resources mapping="/static/**" location="/,/static/" /> 24 <mvc:resources mapping="/uploadFiles/**" location="/,/uploadFiles/" /> 25 <!-- 配置Spring MVC的视图解析器 --> 26 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 27 <!-- 有时我们需要访问JSP页面,可理解为在控制器controller的返回值加前缀和后缀,变成一个可用的URL地址 --> 28 <property name="prefix" value="/WEB-INF/jsp/"/> 29 <property name="suffix" value=".jsp"/> 30 31 </bean> 32 </beans>
6.applicationContext.xml配置:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans.xsd 7 http://www.springframework.org/schema/tx 8 http://www.springframework.org/schema/tx/spring-tx.xsd"> 9 10 <!--数据源-链接数据库的基本信息,这里直接写,不放到*.properties资源文件中--> 11 <bean id="dataSource" 12 class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 13 <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 14 <property name="url" value="jdbc:sqlserver://127.0.0.1:1433;database=EmpManagerDB" /> 15 <property name="username" value="sa" /> 16 <property name="password" value="caj123" /> 17 </bean> 18 19 20 21 <!-- 配置数据源,加载配置,也就是dataSource --> 22 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 23 <property name="dataSource" ref="dataSource" /> 24 <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" /> 25 <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property> 26 </bean> 27 <!-- DAO接口所在包名,Spring会自动查找之中的类 --> 28 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 29 <property name="basePackage" value="com.cxkj.dao" /> 30 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> 31 </bean> 32 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 33 <constructor-arg index="0" ref="sqlSessionFactory" /> 34 </bean> 35 36 <!--事务管理--> 37 <bean id="transactionManager" 38 class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 39 <!--注入dataSource--> 40 <property name="dataSource" ref="dataSource" /> 41 </bean> 42 <!--开启事务注解扫描--> 43 <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven> 44 </beans>
7.web.xml文件编写:(主要核心的必须要配置的几点)
1.配置springMvc核心控制器,将所有请求都交给springMvc进行处理
1 <servlet> 2 <servlet-name>springMvc</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation</param-name> 6 <param-value>classpath*:spring/applicationContext-mvc.xml</param-value> 7 <load-on-startup>1</load-on-startup> 8 </init-param> 9 </servlet>
2.为springmvc建立映射关系,并且把所有的request请求都交给springmvc控制器来处理
1 <servlet-mapping> 2 <servlet-name>springMvc</servlet-name> 3 <!-- 拦截所有请求 --> 4 <url-pattern>/</url-pattern> 5 </servlet-mapping>
3.配置监听器(该配置一定要写,不然项目启动会报异常)
1 <listener> 2 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 3 </listener>
4.最后在把spring容器加载进来
1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value>classpath*:spring/applicationContext.xml</param-value> 4 </context-param>
以上步骤千万要记住认真检查载入的文件名称是否正确!!比如:applicationContext 会误写成了applicationcontent,这是低级错误,但是也是很容易犯的错误。
到这里就好了,你可以把你的静态前端后台框架导入到static里面,(我这里使用的是X-admin前端框架,觉得这个框架不错的可以到这个地址下载:http://x.xuebingsi.com/)启动服务器试试吧。
启动项目效果如下,初步成功搭建ssm框架成功!
赶紧试试吧!
小白通往大鸟的路还有很长很长,革命尚未成功,通知仍需努力。一起加油吧。