Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 384|回复: 1

[默认分类] SSM框架开发web项目系列(一) 环境搭建篇

  [复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-3-20 14:01:45 | 显示全部楼层 |阅读模式

    前言
      开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL
      主要框架:Spring + Spring MVC + MyBatis
      目的:快速上手搭建SSM开发环境,熟悉客户端请求到数据库操作的流程。
    准备工作
      本文以“人”Person对象为例,所以首先在数据库中建一张表。这里用的Navicat for MySql,新建一个名为ssm的数据库,然后在库中新建一张名为TBL_PERSON的表,3个字段,分别为主键id,姓名name,性别gender,都为字符串类型。这里主键id没有采用自增,而是用UUID随机字符串。数据表概要如图所示。
     

      新建一个maven web项目,工程结构如下,并创建一个pojo类Person


      
       
      
    1. package com.mmm.pojo;
    2. /**
    3. * Person实体类
    4. * */
    5. public class Person {
    6.    
    7.     private String id;
    8.    
    9.     private String name;
    10.    
    11.     private String gender;
    12.    
    13.     public String getId() {
    14.         return id;
    15.     }
    16.    
    17.     public void setId(String id) {
    18.         this.id = id;
    19.     }
    20.    
    21.     public String getName() {
    22.         return name;
    23.     }
    24.    
    25.     public void setName(String name) {
    26.         this.name = name;
    27.     }
    28.    
    29.     public String getGender() {
    30.         return gender;
    31.     }
    32.    
    33.     public void setGender(String gender) {
    34.         this.gender = gender;
    35.     }
    36.    
    37. }
    复制代码
      
       
      

    配置篇
      1.Spring 集成Mybatis配置文件以及应用(application-root.xml + maybatis-config.xml + jsbc.properties)

      
       
      
    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:p="http://www.springframework.org/schema/p"  
    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-4.0.xsd   
    8.                         http://www.springframework.org/schema/context   
    9.                         http://www.springframework.org/schema/context/spring-context-4.0.xsd">  
    10.                         
    11.     <!-- 引入数据库配置参数文件jdbc.properties -->               
    12.     <context:property-placeholder location="classpath:jdbc.properties"/>
    13.    
    14.     <!-- Spring会扫描指定包下的bean注解例如@Controller、@Service等 -->   
    15.     <context:component-scan base-package="com.mmm" />
    16.    
    17.     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    18.         <property name="driverClassName" value="${jdbc.driverClassName}"/>
    19.         <property name="url" value="${jdbc.url}"/>
    20.         <property name="username" value="${jdbc.username}"/>
    21.         <property name="password" value="${jdbc.password}"/>
    22.     </bean>
    23.         
    24.     <!-- spring和MyBatis整合 -->  
    25.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
    26.         <property name="dataSource" ref="dataSource" />  
    27.         <!-- 自动扫描mapper.xml文件 -->  
    28.         <property name="mapperLocations" value="classpath:com/mmm/mapper/*.xml"></property>  
    29.         <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    30.     </bean>  
    31.   
    32.     <!-- Mapper接口所在包名,Spring会自动查找其下的类 -->  
    33.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
    34.         <property name="basePackage" value="com.mmm.mapper" />  
    35.         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    36.     </bean>
    37.      
    38. </beans>
    复制代码
      
       
      


      
       
      
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5.     <!-- 这里可以定义类的别名,在mapper.xml文件中应用会方便很多 -->
    6.     <typeAliases>
    7.         <typeAlias alias="person" type="com.mmm.pojo.Person" />
    8.     </typeAliases>
    9. </configuration>
    复制代码
      
       
      


    1. jdbc.driverClassName=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=utf-8
    3. jdbc.username=root
    4. jdbc.password=123456
    复制代码

      2.Spring MVC配置(application-mvc.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" xmlns:p="http://www.springframework.org/schema/p"  
    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-4.0.xsd   
    8.                         http://www.springframework.org/schema/context   
    9.                         http://www.springframework.org/schema/context/spring-context-4.0.xsd   
    10.                         http://www.springframework.org/schema/mvc   
    11.                         http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
    12.                         
    13.      <!-- 自动扫描开启 -->
    14.       <context:component-scan base-package="com.mmm.web" />
    15.      <mvc:annotation-driven/>
    16.      
    17.      <!-- Spring MVC视图解析配置-->  
    18.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    19.         <property name="prefix" value="/WEB-INF/views/" />  
    20.         <property name="suffix" value=".jsp" />  
    21.     </bean>  
    22.                         
    23.                         
    24. </beans>
    复制代码
      
       
      

      3.PersonMapper映射配置文件(personMapper.xml)

      
       
      
    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="com.mmm.mapper.PersonMapper">
    5.    
    6.     <resultMap type="person" id="personResultMap" >
    7.         <id property="id" column="id"></id>
    8.         <id property="name" column="name"></id>
    9.         <id property="gender" column="gender"></id>
    10.     </resultMap>
    11.    
    12.     <!-- 新增一条记录 -->
    13.     <insert id="insert" parameterType="person" >
    14.         <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
    15.             select replace(uuid(),"-","") from dual
    16.         </selectKey>
    17.         insert into `TBL_PERSON` values (#{id},#{name},#{gender})
    18.     </insert>
    19.    
    20.     <!-- 删除一条记录 -->
    21.     <delete id="delete">
    22.         delete from `TBL_PERSON` where id = #{id}
    23.     </delete>
    24.    
    25.     <!-- 更新一条记录 -->
    26.     <update id="update" parameterType="person">
    27.         update `TBL_PERSON` set name = #{name}, gender = #{gender}
    28.     </update>
    29.    
    30.     <!-- 查找所有记录 -->
    31.     <select id="selectAll" resultMap="personResultMap">
    32.         select * from `TBL_PERSON`
    33.     </select>
    34.    
    35.     <!-- 根据主键id查找记录 -->
    36.     <select id="selectById" resultType="person">
    37.         select * from `TBL_PERSON` where id = #{id}
    38.     </select>
    39. </mapper>
    复制代码
      
       
      

      4.web.xml配置(web.xml)

      
       
      
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    3.     xmlns="http://java.sun.com/xml/ns/javaee"  
    4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
    5.     version="3.0">
    6.    
    7.     <!-- Spring的配置文件 -->  
    8.     <context-param>  
    9.         <param-name>contextConfigLocation</param-name>  
    10.         <param-value>classpath:application-root.xml</param-value>  
    11.     </context-param>  
    12.     <!-- 编码过滤器 -->  
    13.     <filter>  
    14.         <filter-name>encodingFilter</filter-name>  
    15.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
    16.         <async-supported>true</async-supported>  
    17.         <init-param>  
    18.             <param-name>encoding</param-name>  
    19.             <param-value>UTF-8</param-value>  
    20.         </init-param>
    21.         <init-param>
    22.             <param-name>forceEncoding</param-name>
    23.             <param-value>true</param-value>
    24.         </init-param>  
    25.     </filter>  
    26.     <filter-mapping>  
    27.         <filter-name>encodingFilter</filter-name>  
    28.         <url-pattern>/*</url-pattern>  
    29.     </filter-mapping>  
    30.     <!-- Spring监听器 -->  
    31.     <listener>  
    32.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    33.     </listener>  
    34.   
    35.     <!-- Spring MVC servlet -->  
    36.     <servlet>  
    37.         <servlet-name>SpringMVC</servlet-name>  
    38.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
    39.         <init-param>  
    40.             <param-name>contextConfigLocation</param-name>  
    41.             <param-value>classpath:application-mvc.xml</param-value>  
    42.         </init-param>  
    43.         <load-on-startup>1</load-on-startup>  
    44.         <async-supported>true</async-supported>  
    45.     </servlet>  
    46.     <servlet-mapping>  
    47.         <servlet-name>SpringMVC</servlet-name>  
    48.         <url-pattern>/</url-pattern>  
    49.     </servlet-mapping>  
    50.    
    51. </web-app>
    复制代码
      
       
      

    代码篇
      1.mapper包下(com.mmm.mapper)

      
       
      
    1. package com.mmm.mapper;
    2. import java.util.List;
    3. import com.mmm.pojo.Person;
    4. public interface PersonMapper {
    5.     //新增一个Person对象
    6.     void insert(Person p);
    7.    
    8.     //根据主键id删除Person对象
    9.     void deleteById(String id);
    10.    
    11.     //修改一个person对象
    12.     void update(Person p);
    13.    
    14.     //根据主键id查找Person对象
    15.     Person selectById(String id);
    16.    
    17.     //查找所有Person对象,返回集合类型
    18.     List<Person> selectAll();
    19. }
    复制代码
      
       
      

      2.service包下(com.mmm.service)

      
       
      
    1. package com.mmm.service;
    2. import java.util.List;
    3. import com.mmm.pojo.Person;
    4. public interface PersonService {
    5.    
    6.     //新增一个Person对象
    7.     void insert(Person p);
    8.    
    9.     //根据主键id删除Person对象
    10.     void deleteById(String id);
    11.    
    12.     //修改一个person对象
    13.     void update(Person p);
    14.    
    15.     //根据主键id查找Person对象
    16.     Person selectById(String id);
    17.    
    18.     //查找所有Person对象,返回集合类型
    19.     List<Person> selectAll();
    20. }
    复制代码
      
       
      


      
       
      
    1. package com.mmm.service;
    2. import java.util.List;
    3. import javax.annotation.Resource;
    4. import org.springframework.stereotype.Service;
    5. import com.mmm.mapper.PersonMapper;
    6. import com.mmm.pojo.Person;
    7. @Service
    8. public class PersonServiceImpl implements PersonService {
    9.    
    10.     @Resource
    11.     PersonMapper personMapper;
    12.     @Override
    13.     public void insert(Person p) {
    14.         personMapper.insert(p);
    15.     }
    16.     @Override
    17.     public void deleteById(String id) {
    18.         personMapper.deleteById(id);
    19.     }
    20.     @Override
    21.     public void update(Person p) {
    22.         personMapper.update(p);
    23.     }
    24.     @Override
    25.     public Person selectById(String id) {
    26.         return personMapper.selectById(id);
    27.     }
    28.     @Override
    29.     public List<Person> selectAll() {
    30.         return personMapper.selectAll();
    31.     }
    32.    
    33. }
    复制代码
      
       
      

      3.web包下(com.mmm.web)

      
       
      
    1. package com.mmm.web;
    2. import java.util.List;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.PathVariable;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.ResponseBody;
    8. import com.mmm.pojo.Person;
    9. import com.mmm.service.PersonService;
    10. @Controller
    11. @RequestMapping("person")
    12. public class PersonController {
    13.    
    14.     @Autowired
    15.     PersonService personService;
    16.    
    17.     /**
    18.      * 这里return的字符串"mvc"加上前面Spring MVC配置文件中视图解析配置的前缀"/WEB-INF/views/"和后缀".jsp",
    19.      * 构成了要请求转发要跳转到的页面路径,从根路径webapp下开始,即为/WEB-INF/views/mvc.jsp
    20.      * */
    21.     @RequestMapping(value="mvc")
    22.     public String testMvc() {
    23.         return "mvc";//
    24.     }
    25.    
    26.     /**
    27.      * 这里@ResponseBody代表方法是直接返回一个json数据回前端,
    28.      * 注意Spring mvc配置文件中不要漏掉<mvc:annotation-driven/>
    29.      * */
    30.     @RequestMapping(value="list")
    31.     @ResponseBody
    32.     public List<Person> findAll() {
    33.         List<Person> list = personService.selectAll();
    34.         return list;//这里通过前端返回的json数据查看到完整数据
    35.     }
    36.    
    37.     /**
    38.      * 其中@PathVariable用来获得请求url中的动态参数
    39.      * */
    40.     @RequestMapping(value="one/{id}")
    41.     @ResponseBody
    42.     public Person findOne(@PathVariable("id") String id) {
    43.         return personService.selectById(id);
    44.     }
    45.    
    46.    
    47. }
    复制代码
      
       
      

    &nbsp;  至此,ssm开发基本环境已经初步搭建好
    测试篇
      1.测试mybatis封装的持久层(这里以获取所有TBL_PERSON表的NAME字段值为例)

      
       
      
    1. package com.test;
    2. import java.util.List;
    3. import org.junit.Test;
    4. import org.springframework.context.ApplicationContext;
    5. import org.springframework.context.support.ClassPathXmlApplicationContext;
    6. import com.mmm.pojo.Person;
    7. import com.mmm.service.PersonService;
    8. public class TestDb {
    9.     @SuppressWarnings("resource")
    10.     @Test
    11.     public void testDb() {
    12.         ApplicationContext context = new ClassPathXmlApplicationContext("application-root.xml");
    13.         PersonService bean = (PersonService) context.getBean("personServiceImpl");
    14.         List<Person> list = bean.selectAll();
    15.         for(Person p:list) {
    16.             System.out.println(p.getName());
    17.         }
    18.         
    19.     }
    20. }
    复制代码
      
       
      

    结果如下

      2.测试Spring MVC部分
    &nbsp;  Tomcat启动项目,地址栏输入http://localhost:8080/ssm-web/person/list,拿到如下图所示数据即为成功

    &nbsp;反省篇
      最后,SSM开发环境基本搭建完毕,既然是基本,还存在许多没有尽量完善的地方。首先Mybatis部分,这里是从零开始,也没用到什么逆向工程之类的,都自己手写,便于理解,然后关联映射只写了简单的单表操作,关联的没写到,另外单表简单操作,在这里与spring集成过程中事务也没有进行事务管理的配置等。Spring MVC方面更是简陋了点,不过实际工作开发中,比较核心的有视图解析后转发到相应页面和json返回数据,大多问题是在考虑怎样实现业务逻辑。很多细节没有写出来,然后有些原理性的东西自己也还需要不断理解学习,之后应该写一些关键细节描述类的总结文。
    回复

    使用道具 举报

    该用户从未签到

    发表于 2018-3-21 18:17:01 | 显示全部楼层
    GUGU平台 : 可以交易哦!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-25 02:51 , Processed in 0.422683 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表