SSM框架详细搭建

工欲善其事必先利其器。

先看下项目结构

 

首先,创建数据库脚本

CREATE TABLE STUDENT (
       ID VARCHAR2(5),
       NAME VARCHAR2(5),
       AGE VARCHAR2(5),
       SEX VARCHAR2(5)
)

INSERT INTO STUDENT (ID, NAME, AGE, SEX)
VALUES ('001', '张三', '22', '1');

INSERT INTO STUDENT (ID, NAME, AGE, SEX)
VALUES ('002', '李四', '21', '1');

INSERT INTO STUDENT (ID, NAME, AGE, SEX)
VALUES ('003', '王二', '20', '1');

INSERT INTO STUDENT (ID, NAME, AGE, SEX)
VALUES ('004', '麻子', '19', '2');

INSERT INTO STUDENT (ID, NAME, AGE, SEX)
VALUES ('005', '王五', '18', '2');

然后,创建POJO类

 1 package com.demo.vos;
 2 
 3 public class Student {
 4     private String id;
 5     private String name;
 6     private String age;
 7     private String sex;
 8     
 9     public Student() {
10         super();
11         // TODO Auto-generated constructor stub
12     }
13 
14     public Student(String id, String name, String age, String sex) {
15         super();
16         this.id = id;
17         this.name = name;
18         this.age = age;
19         this.sex = sex;
20     }
21 
22     public String getId() {
23         return id;
24     }
25 
26     public void setId(String id) {
27         this.id = id;
28     }
29 
30     public String getName() {
31         return name;
32     }
33 
34     public void setName(String name) {
35         this.name = name;
36     }
37 
38     public String getAge() {
39         return age;
40     }
41 
42     public void setAge(String age) {
43         this.age = age;
44     }
45 
46     public String getSex() {
47         return sex;
48     }
49 
50     public void setSex(String sex) {
51         this.sex = sex;
52     }
53     
54     @Override
55     public String toString() {
56         // TODO Auto-generated method stub
57         return "ID="+id+" name="+name+" age="+age+" sex="+sex;
58     }
59 
60 }

注意:属性名称要和数据库对应。

 接下来,配置全局文件applicationContext.xml,这个主要是整合Spring和Mybatis用的,标签都加了注释

 

 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" xmlns:tx="http://www.springframework.org/schema/tx"
 4     xmlns:context="http://www.springframework.org/schema/context"
 5     xmlns:aop="http://www.springframework.org/schema/aop"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
 7                 http://www.springframework.org/schema/context  
 8                  http://www.springframework.org/schema/context/spring-context-3.2.xsd  
 9                 http://www.springframework.org/schema/tx   
10                 http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
11                 http://www.springframework.org/schema/aop
12                 http://www.springframework.org/schema/aop/spring-aop.xsd
13                 ">
14     <!-- 加载数资源文件 -->            
15     <bean id="propertyConfigurer"
16         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
17         <property name="location" value="classpath:jdbc.properties" />
18     </bean>
19     <!-- 数据库连接 -->
20     <bean id="dataSource"
21         class="org.springframework.jdbc.datasource.DriverManagerDataSource">
22         <property name="driverClassName" value="${driver}"></property>
23         <property name="url" value="${url}"></property>
24         <property name="username" value="${username}"></property>
25         <property name="password" value="${password}"></property>
26     </bean>
27 
28 
29     <!-- 利用AOP,实现对Service的声明式事务管理 -->
30     <!-- 通知 -->
31     <tx:advice id="txAdvice" transaction-manager="txManager">
32 
33         <tx:attributes>
34             <!-- 将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误 -->
35             <tx:method name="select*" read-only="true" />
36             <!-- 删除,更新,添加事务配置 -->
37             <tx:method name="del*" propagation="REQUIRED" isolation="READ_COMMITTED"
38                 timeout="-1" read-only="false" />
39             <tx:method name="update*" propagation="REQUIRED" isolation="READ_COMMITTED"
40                 timeout="-1" read-only="false" />
41             <tx:method name="save*" propagation="REQUIRED" isolation="READ_COMMITTED"
42                 timeout="-1" read-only="false" />
43             <!-- 其他默认 -->
44             <tx:method name="*" />
45         </tx:attributes>
46     </tx:advice>
47     
48     <!-- AOP配置 -->
49     <aop:config>
50         <!-- 切入点 -->   <!--execution(* services.*.*(..))表示services包下,所有子包下所有类的所有方法  -->
51         <aop:pointcut id="servicepointcut" expression="execution(* services.*.*(..))" />
52         <!--  把切入点和通知连接起来-->
53         <aop:advisor advice-ref="txAdvice" pointcut-ref="servicepointcut" />
54     </aop:config>
55     
56     <!-- 配置事务管理 -->
57     <bean id="txManager"
58         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
59         <property name="dataSource" ref="dataSource" />
60     </bean>
61     
62     <!--自动扫描的包   一般配置services包和dao包-->
63     <context:component-scan base-package="services ,dao" />
64     
65     <!-- 配置sqlSessionFactory -->
66     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
67         <property name="mapperLocations" value="classpath:mybatis/*.xml" />
68         <!-- mybatis配置文件路径-->
69         <property name="configLocation" value="classpath:config/SqlMapConfig.xml" />
70         <property name="dataSource" ref="dataSource" />
71     </bean>
72 
73     <!-- 配置sqlsession 产生这个实例就是通过 sqlsessionTemplate来实现的 -->
74     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
75         <constructor-arg index="0">
76             <ref bean="sqlSessionFactory" />
77         </constructor-arg>
78     </bean>
79     
80 </beans>

 

然后,配置springmvc-servlet.xml主要是整合Springmvc

<?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:aop="http://www.springframework.org/schema/aop"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"   
    xmlns:util="http://www.springframework.org/schema/util"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
    xmlns:cache="http://www.springframework.org/schema/cache"  
    xsi:schemaLocation="  
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd  
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd  
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd  
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd  
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd  
        http://www.springframework.org/schema/cache  http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">
   
    <!-- 启用springmvc注解功能 -->  
    <mvc:annotation-driven/>  
     
    <!-- 启动spring自动扫描 -->  
    <context:component-scan  base-package="com.demo.controller,com.demo.services,com.demo.dao"></context:component-scan>
   
    <!--  视图解析器 -->  
    <bean id="viewResolver"  class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    <property  name="prefix" value="/"> </property>  
    <property name="suffix"  value=".jsp"></property>  
    </bean>
      
  
</beans>

 

然后,在配置SqlMapConfig.xml,主要配置vo类的别名,方便以后操作。其实,也可以配置在applicationContext.xml中也可单独配置

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    
   <!-- 类别名定义 -->  
   <typeAliases>  
         <typeAlias type="com.demo.vos.Student" alias="Student"/> 
    </typeAliases>  
 
</configuration>  
         

 

接下来,就是配置/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.demo.userMapper">
    
        <select id="finByID" resultType="Student">
            SELECT * FROM STUDENT where id = #{id}
        </select>
        
        <select id="getAll" resultType="Student">
            SELECT * FROM STUDENT
        </select>        
    
    </mapper>

其中,namespace这个属性和id属性,dao层方法通过它们两找到具体的SQL语句。如com.demo.userMapper.finByID就能找到

SELECT * FROM STUDENT where id = #{id} 



然后,就是配置web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    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_2_5.xsd">
    
    <!-- 配置监听 -->
    <listener>  
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>
    
    <!-- 设置Spring容器加载配置文件的路径 -->
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>    
         classpath:config/springmvc-servlet.xml,    
         classpath:config/applicationContext.xml    
       </param-value>  
    </context-param>
    
    <!-- 字符编码过滤器 -->
    <filter>  
        <filter-name>encodingFilter</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>  
        <init-param>  
            <param-name>forceEncoding</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>
    
    <!-- 过滤请求-->
    <filter-mapping>  
        <filter-name>encodingFilter</filter-name>  
        <url-pattern>*.do</url-pattern>  
    </filter-mapping>
    
    
    <!-- 前端控制器 -->  
    <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:config/springmvc-servlet.xml</param-value>  
        </init-param>  
        <!-- 这个配置文件在容器启动的时候 就加载 -->  
        <load-on-startup>1</load-on-startup>  
    </servlet>
    
    <!-- 拦截请求 -->  
    <servlet-mapping>  
        <servlet-name>springmvc</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>
    
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

主要就是加载资源文件、启动监听、编码过滤等。

 

接下来,就是创建具体的类了

首先,我们创建dao层接口UserMangerDao.java和实现类UserMangerDaoImpl.java

接口:

 1 package com.demo.dao;
 2 
 3 import java.util.ArrayList;
 4 
 5 import com.demo.vos.Student;
 6 
 7 public interface UserMangerDao {
 8     
 9     public ArrayList<Student> selectAll();
10     
11     public Student getFindByeID(String id);
12 
13 }

实现类UserMangerDaoImpl.java

 1 package com.demo.dao;
 2 
 3 import java.util.ArrayList;
 4 
 5 
 6 import org.mybatis.spring.SqlSessionTemplate;
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.stereotype.Repository;
 9 
10 import com.demo.vos.Student;
11 
12 //注解说明它是dao层
13 @Repository("userMangerDaoImpl")
14 public class UserMangerDaoImpl implements UserMangerDao {
15     
16     /**
17      *自动注入这里spring管理了mybatis的sqlsessionfactory
18      */
19     @Autowired
20     private SqlSessionTemplate sqlSession;
21     
22     //查找所有信息
23     @SuppressWarnings("unchecked")
24     public ArrayList<Student> selectAll() {
25         // TODO Auto-generated method stub
26         return (ArrayList<Student>) sqlSession.selectList("com.demo.userMapper.getAll");
27     }
28     //通过ID查找
29     public Student getFindByeID(String id) {
30         // TODO Auto-generated method stub
31         sqlSession.selectOne("com.demo.userMapper.finByID", id);
32         return null;
33     }
34 
35 }

 

 注意:

@Repository("userMangerDaoImpl")注解中userMangerDaoImpl一定要和类名保持一致并且首字母小写

接下来,创建services层接口UserMangerSer.java和实现类UserMangerSerImpl.java

接口:

 1 package com.demo.services;
 2 
 3 import java.util.ArrayList;
 4 
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import org.springframework.stereotype.Service;
 7 
 8 import com.demo.vos.Student;
 9 
10 
11 public interface UserMangerSer {
12     
13     public ArrayList<Student> selectAll();
14 
15 }

 实现类:

package com.demo.services;

import java.util.ArrayList;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.demo.dao.UserMangerDaoImpl;
import com.demo.vos.Student;
//注解它是说明是业务层
@Service("userMangerImpl")
public class UserMangerSerImpl implements UserMangerSer {

    
    @Autowired
    UserMangerDaoImpl userdao;
    
    public ArrayList<Student> selectAll() {
        // TODO Auto-generated method stub
        return userdao.selectAll();
    }

}

 

 注意:

@Service("userMangerImpl")注解中userMangerSerImpl一定要和类名UserMangerSerImpl保持一致并且首字母小写


接下来就是,创建controller层UserController.java

 1 package com.demo.controller;
 2 
 3 import java.io.IOException;
 4 import java.util.ArrayList;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import org.springframework.beans.factory.annotation.Autowired;
10 import org.springframework.stereotype.Controller;
11 import org.springframework.web.bind.annotation.RequestMapping;
12 import org.springframework.web.bind.annotation.RequestMethod;
13 
14 import com.demo.services.UserMangerSerImpl;
15 import com.demo.vos.Student;
16 
17 //注解说明它是控制层
18 @Controller
19 //说明/user是这个类的映射
20 @RequestMapping("/user")
21 public class UserController {
22     
23     @Autowired
24     UserMangerSerImpl userSer;
25     
26     ArrayList<Student> stuarr=null;
27     
28     //具体方法的映射,访问具体方法要同时加上类和方法的映射/user/userall.do
29     @RequestMapping(value = "/userall.do",method=RequestMethod.POST)
30     public void getAll(HttpServletRequest request,HttpServletResponse response) throws Exception{
31         stuarr=userSer.selectAll();
32         request.setAttribute("Stuarr",stuarr);
33         request.getRequestDispatcher("/index.jsp").forward(request, response);
34         for (Student stu : stuarr) {
35             System.out.println(stu.toString());
36         }
37         
38     }    
39 
40 }

 

创建一个简单的 index.jsp  页面

 

 1 <%@ page language="java" import="java.util.*,com.demo.vos.*" pageEncoding="GBK"%>
 2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11     
12     <title>Test</title>
13     <meta http-equiv="pragma" content="no-cache">
14     <meta http-equiv="cache-control" content="no-cache">
15     <meta http-equiv="expires" content="0">    
16     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
17     <meta http-equiv="description" content="This is my page">
18     <!--
19     <link rel="stylesheet" type="text/css" href="styles.css">
20     -->
21   </head>
22   
23   <body>
24   
25     <form action="user/userall.do" method="post">
26         <table border="5" align="left">
27         <tr><td>id</td><td>name</td><td>age</td><td>sex</td></tr>
28         <c:forEach items="${requestScope.Stuarr}" var="stu">
29         <tr><td>${stu.id}</td><td>${stu.name}</td><td>${stu.age}</td><td>${stu.sex}</td></tr>
30         </c:forEach>
31         </table>
32         <input type="submit" value="登录"></input>
33         
34     </form>
35   </body>
36 </html>


里面使用了EL表达式。


一个简单的登录界面

 



然后点击登录按钮,查询数据

大功告成。

jdbc资源文件,和Log4j就不贴出来了

 

 

posted @ 2017-07-21 18:59  vvkang  阅读(136)  评论(1)    收藏  举报