----------------第一阶段--------------

1.数据库建模

2.生成sql语句

3.在mysq客户端使用命令方式执行sql脚本,生成数据库

4.允许远程访问mysql

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 

如果是固定ip就这么写

 grant all privileges on *.* to 'root'@'192.168.41.100'identified by '123456' with grant option;

//推送设置到内存或重启服务器也行

mysql>FLUSH PRIVILEGES 

5.使用mybatis提供框架,执行代码,修改一些数据

1)数据库连接的信息:驱动类、连接地址、用户名、密码

<jdbcConnection driverClass="com.mysql.jdbc.Driver"        connectionURL="jdbc:mysql://192.168.41.100:3306/testtest" userId="root"    password="123456">
</jdbcConnection>

2)targetPackage="com.softjx.model"

3)把表名与类名对应

<table schema="testtest" tableName="school" domainObjectName="School"></table>

<table schema="testtest" tableName="student" domainObjectName="Student"></table>

6.运行GeneratorSqlmap

-------------------------第二阶段--------------------------

1.新建一个WEB项目

2.导入ssm所需要所有jar包,把所有jar放到WEB-INF/lib目录下

3.把mybatis生成dao,model复制到当前项目

4.建com.softjx.service,com.softjx.service.impl

5.需要相关的配置文件(mybatisconfig.xml,dbconfig.properties,applicationContext.xml,log4j.properties)

1 )修改dbconfig.properties文件,ip,数据库,用户名,密码

2)修改applicationContext.xml中的包名,目录名

6.在com.softjx.service包中写接口,在com.softjx.service.impl写接口的实现。

注意:com.softjx.service.impl写接口的实现,

@Service("studentService")

@Transactional

类中注入

@Autowired

private StudentMapper studentMapper;

7.单元测试:

要注意mysql数据库中主键要自增,这一步要我们去mysql中设置。

要注意:studentService = (StudentService) context.getBean("studentService");

这个"studentService"是从@Service("studentService")

-------------------------第三阶段--------------------------

1.web.xml配置文件要修改。

2.在类路径下src目录新建springmvc.xml

3.建com.softjx.action包

4.在com.softjx.action编写action

要注意:

1)@Controller

   @RequestMapping("/student")

2)

   @RequestMapping("/studentAddInput")

类中注入

@Autowired

private StudentService studentService;

5.在WEB-INF目录下建views文件夹

6.在views文件夹建jsp文件,这个jsp文件名是作为action中方法 return的值。

7.添加页面的jsp,要注意控件的属性名是javabean的属性名。

8.在WEB-INF目录下jsp是不能在页面上直接访问,要通过程序访问。

-----------------------第四阶段---------------------------

1.dao层(mybatis)

2.service层(spring)

3.单元测试

4.action(springmvc)

5.jsp html,htm (界面)

1 )查询所有数据

2)单条件查询

3)多条件查询

4)分页查询

-------------------

5) 单条件分页查询

6)多添加分页查询

-------------------

7) 修改(先查询单个实体)

 

8)删除(先查询单个实体)

-----------------------第五阶段---------------------------

1)文件上传          

a.要导入commons-fileupload-1.2.1.jar,commons-io-2.0.jar这两个包

b. <!-- 配置 MultipartResolver 上传文件-->

      <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <property name="maxUploadSize" value="10240000"></property>    
      </bean>    

c.在WEB-INF同一层目录中建一个upload目录

d.上传文件的jsp界面

 <form action="student/checkFileUpload" method="POST" enctype="multipart/form-data">
        文件: <input type="file" name="file"/>
                描述: <input type="text" name="desc"/>
        <input type="submit" value="上传数据"/>
   </form>

e.编写上传文件的action

2)文件下载

a.在WEB-INF同一层目录中建一个upload目录

b.下载的url:

<a href="student/fileDownload?filename=hibernate1.jpg">通过 文件流 的方式下载文件hibernate1.jpg</a>

c.编写下载文件的action

-----------------------第六阶段---------------------------

1.把数据库中数据导出到excel

1)导入包poi-3.2-FINAL-20081019.jar

2)在action中写代码

3)注意excel表格中的各种格式

-----------------------第七阶段(两个表查询,有关系)---------------------------

一.根据条件查询

1).掌握多表查询

select a.*,b.* from student a,school b where a.t_sid=b.t_id

select a.t_id,a.t_name,a.t_age,a.t_enterdate,b.t_name as t_name1 from student a,school b where a.t_sid=b.t_id

select a.t_id,a.t_name,a.t_age,a.t_enterdate,b.t_name as t_name1 from student a LEFT JOIN school b on a.t_sid=b.t_id

2).设计实体类中要关联类,在Student类中有School类的引用。

    private School school;
    public School getSchool() {
        return school;
    }     public void setSchool(School school) {
        this.school = school;
    }

3)在StudentMapper.xml编写sql语句

 <!-- 返回多表查询的字段名 -->
  <resultMap id="WithSchoolResultMap" type="com.softjx.model.Student" >
    <id column="t_id" property="tId" jdbcType="INTEGER" />
    <result column="t_name" property="tName" jdbcType="VARCHAR" />
    <result column="t_age" property="tAge" jdbcType="INTEGER" />
    <result column="t_enterdate" property="tEnterdate" jdbcType="TIMESTAMP" />
    <result column="t_sid" property="tSid" jdbcType="INTEGER" />
     <!-- 指定联合查询出的学校字段-->
    <association property="school" javaType="com.softjx.model.School">
        <id column="t_id1" property="tId"/>
        <result column="t_name1" property="tName"/>
    </association>
  </resultMap>
  <!-- 多表查询的字段名 -->
   <sql id="Student_School_Column_List">
      a.t_id, a.t_name, a.t_age, a.t_enterdate, a.t_sid,b.t_id as t_id1,b.t_name as t_name1
   </sql>
  <!-- 查询学生同时带学校信息 -->
  <select id="selectByExampleWithSchool" resultMap="WithSchoolResultMap">
       select
        <if test="distinct">
          distinct
        </if>
        <include refid="Student_School_Column_List" />
        FROM student a
        left join school b on a.t_sid=b.t_id
        <if test="_parameter != null">
          <include refid="Example_Where_Clause" />
        </if>
        <if test="orderByClause != null">
          order by ${orderByClause}
        </if>
  </select>
  

4).在dao中编写一个接口

 //多表查询
    List<Student> selectByExampleWithSchool(StudentExample example);

5).在service层编写接口与接口的实现

//多表查询
     public List<Student> getStudentWithSchool(StudentExample studentExample);      public List<Student> getStudentWithSchool(StudentExample studentExample) {
        
        return studentMapper.selectByExampleWithSchool(studentExample);
    }

6)编写单元测试多表查询。

二.根据主键查询两个表

1) .

select a.t_id,a.t_name,a.t_age,a.t_enterdate,b.t_name as t_name1 from student a LEFT JOIN school b on a.t_sid=b.t_id  where a.t_id=3

2).设计实体类中要关联类,在Student类中有School类的引用。

    private School school;
    public School getSchool() {
        return school;
    }     public void setSchool(School school) {
        this.school = school;
    }

3).在StudentMapper.xml编写sql语句

 <!-- 返回多表查询的字段名 -->
  <resultMap id="WithSchoolResultMap" type="com.softjx.model.Student" >
    <id column="t_id" property="tId" jdbcType="INTEGER" />
    <result column="t_name" property="tName" jdbcType="VARCHAR" />
    <result column="t_age" property="tAge" jdbcType="INTEGER" />
    <result column="t_enterdate" property="tEnterdate" jdbcType="TIMESTAMP" />
    <result column="t_sid" property="tSid" jdbcType="INTEGER" />
     <!-- 指定联合查询出的学校字段-->
    <association property="school" javaType="com.softjx.model.School">
        <id column="t_id1" property="tId"/>
        <result column="t_name1" property="tName"/>
    </association>
  </resultMap>
  
  <!-- 多表查询的字段名 -->
   <sql id="Student_School_Column_List">
      a.t_id, a.t_name, a.t_age, a.t_enterdate, a.t_sid,b.t_id as t_id1,b.t_name as t_name1
   </sql>
  
  <!-- 主键查询多表数据 -->
   <select id="selectByPrimaryKeyWithSchool" resultMap="WithSchoolResultMap">
       select 
    <include refid="Student_School_Column_List" />
    FROM student a
        left join school b on a.t_sid=b.t_id
    where a.t_id = #{tId,jdbcType=INTEGER}
  </select>

4).在dao中编写一个接口

Student selectByPrimaryKeyWithSchool(Integer tId);

5)在service层编写接口与接口的实现

        public Student selectByPrimaryKeyWithSchool(Integer tId);

        public Student selectByPrimaryKeyWithSchool(Integer tId) {
        
         return studentMapper.selectByPrimaryKeyWithSchool(tId);
     }

6)编写单元测试主键查询多个表中的数据。

------------------------------第八阶段springmvc使用拦截器---------------------

1.编写一个类继承HandlerInterceptor接口

在这个方法中实现业务

public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object arg2) throws Exception {
        System.out.println("第一个拦截器中的 preHandle方法被调用");                         //1).从sesion中获取用户对象
            //2).用当前用户所拥有的菜单url是否包含当前请求
        }

2.配置springmvc的配置文件,添加拦截器

<mvc:interceptors>
     
         <!--局部拦截器配置, 配置拦截器不作用的路径 ,要先配置<mvc:mapping path="/**" /> ,否则报错,不能少这个-->
        <mvc:interceptor>
        <mvc:mapping path="/**" />  
        <mvc:exclude-mapping path="/login/**"/>
        <bean class="com.softjx.interceptor.ActionMethodInterceptor"></bean>
</mvc:interceptor>    

3.登录时要保存当前用户对象到session

--------------------第九阶段 mybatis使用三表或者更多表查询--------------------

一.不使用数据库中的多表查询(使用用户多,十万,百万,千万,亿)

思想:

1.查询学生表

2.根据学生所有学校的id,查询对应学校名称

3.根据学校的区域id查询区域名

4.用查询的数据组装一个vo(view object)(javabean), 这个javabean只是显示在界面上的。

5.多个vo组装ArrayList中

6.显示ArrayList中的数据

如何做:

1.要把以前写的两个表的关联xml复制到一个地方,使用生成框架,生成后添加方法到dao中和xml中

2.新建一个javabean ,是一个vo

3.在service中编写一个方法,返回一个vo的集合类型。(这个里面要仔细看下)

4.测试一下这个方法。

二.使用数据库中的多表查询(使用用户一般几百,几千,几万)

SELECT  a.*,b.*,c.*  from student a,school b,areatable c where a.t_sid=b.t_id and b.t_area_id=c.t_id
SELECT  a.t_id,a.t_name,a.t_age,a.t_enterdate,b.t_name as t_name1,c.area  from student a,school b,areatable c where a.t_sid=b.t_id and b.t_area_id=c.t_id

思想:

1.使用sql语句

2.在StudentMapper接口中写方法

3.要在StudentMapper.xml中写sql语句实现

  1)编写一个<resultMap>

  2)编写接口中方法的实现

  <resultMap id="BaseSqlResultMap" type="com.softjx.vo.StudentSchoolAreaVo" >
    <id column="t_id" property="id" jdbcType="BIGINT" />
    <result column="t_name" property="name" jdbcType="VARCHAR" />
    <result column="t_age" property="age" jdbcType="TINYINT" />
    <result column="t_enterdate" property="enterDate" jdbcType="DATE" />
    <result column="t_name1" property="schoolName" jdbcType="VARCHAR" />
    <result column="area" property="areaName" jdbcType="VARCHAR" />
  </resultMap>
   <select id="getStudentSchoolAreaSqlVo" resultMap="BaseSqlResultMap">
       SELECT  a.t_id,a.t_name,a.t_age,a.t_enterdate,b.t_name as t_name1,c.area  from student a,school b,areatable c 
       where a.t_sid=b.t_id and b.t_area_id=c.t_id
  </select>

4.在service中编写接口方法与实现。

--------------------第十阶段 使用jquery中的ajax技术--------------------

1.需要一个jquery的类库.js  放到static目录下,要注意拦截器放行。

2.jsp中导入js类库。

<script type="text/javascript" src="static/js/jquery-1.8.3.js"></script>

jquery的环境搭建完毕。

3.在springmvc中开发一个业务方法。

@ResponseBody//返回的数据是json数据
@RequestMapping("/studentName")
public List<Student> getStudentName(Map<String, Object> map, Student student) {
StudentExample studentExample = new StudentExample();
Criteria criteria = studentExample.createCriteria(); if (student.gettName() != null && !student.gettName().trim().equals(""))
criteria.andTNameEqualTo(student.gettName()); List<Student> students = studentService.getStudents(studentExample);
return students;
}

注意:1)返回值是对象类型或者是基本类型,2)@ResponseBody//返回的数据是json数据

4.在jsp页面上控制我们操作的构件,使用jquery的选择器,选中此对象。

5.编写ajax代码

<script type="text/javascript">

$(document).ready(function(){
$("#nameid").blur(function(){      
        //真实场景下的ajax调用        
        $.ajax(
        {                
         url: "student/studentName1",
            cache: false,
            type: "GET",
            dataType:"json",
            async: true,
            data: {tName:$("#nameid").val()},
            success: function(msg){ 
                //业务代码,改变页面的数据             
                //alert(msg);
                if (msg==true){
                   $("#namewrongid").text("此用户名存在!");
                   $("#nameid").focus();
                } else {
                       $("#namewrongid").text("此用户名不存在!");
                       $("#ageid").focus();
                }
             },
             error:function(errordata){
                 alert("wrong!!"+errordata);
             }
        });
   });                
}); </script> 

SSM框架完整开发流程的更多相关文章

  1. 一款APP的完整开发流程 (转载)

    来源:https://www.sohu.com/a/239089829_100063940 近年来,在市场和政策的双轮驱动下,我国服务外包产业快速发展,服务智能化趋势显现.随着企业核心业务外包活动的日 ...

  2. MVC5+EF6 入门完整教程3 :EF完整开发流程

    https://www.cnblogs.com/miro/p/4053473.html 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型, ...

  3. SSM框架——整合搭建流程

    1.首先创建maven工程,使用哪种方式进行创建都可以,可以参考博主之前的文章: <两种方式创建Maven项目[方式二]><两种方式创建Maven项目[方式一]> 2.先看看搭 ...

  4. 使用.NET MVC框架项目开发流程(项目开发流程)

    MVC项目开发流程 整理需求,进行需求分析.项目设计. 整理数据项,建数据库做前期准备,并整理字典. 建立所需数据库表和视图和模型. 页面实现其初步功能(跳过逻辑后台代码),只是实现页面之间的跳转以及 ...

  5. ssm框架的搭建流程

    1.新建一个Maven project (1)选中create a simple project,自动配置必要的文件 (2)Packaging选择war类型.jar和war的区别就是一个是普通的jav ...

  6. SSM(Spring+SpringMVC+MyBatis)框架整合开发流程

    回忆了 Spring.SpringMVC.MyBatis 框架整合,完善一个小demo,包括基本的增删改查功能. 开发环境 IDEA MySQL 5.7 Tomcat 9 Maven 3.2.5 需要 ...

  7. 完整开发流程管理提升与系统需求分析过程 随堂笔记(day 1) 【2019/10/14】

    Top12原则: 主要资源,重要功能,依据需求重要度进行资源分配, 项目100功能 1 day -> 100Task -> 10 Dev 20% 80% 开发各阶段流程及规范   需求.架 ...

  8. ionic 实现微信朋友圈分享的完整开发流程

    最近开始要着手负责开发ionic的项目了,一直很好奇想实现一个微信朋友圈分享的功能,所以我就网上找了找文章来练手实现,果不其然,找到了几篇,但是发现它们的流程都不太详细,清楚,直接,还有不少坑. 今天 ...

  9. 快速搭建SSM框架环境开发项目【配置】

    maven在线仓库https://mvnrepository.com/ maven构建项目 pom.xml <project xmlns="http://maven.apache.or ...

随机推荐

  1. Array(数组)对象-->indexOf() 方法

    1.定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,即下标. 如果没有找到匹配的字符串则返回 -1. 语法: string.indexOf(searchvalue ...

  2. Struts2-学习笔记系列(8)-异常处理

    后台抛出自定义异常 public String execute() throws Exception { if (getUser().equalsIgnoreCase("user" ...

  3. springboot https证书配置

    如果公司有提供证书如: 拿到证书秘钥可直接在springboot 的配置文件中配置: server.ssl.key-store=classpath:cert.pfx server.ssl.key-st ...

  4. Python基础:按位异或 ^ ,按位或 | ,按位与 &

    前言文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http: ...

  5. 阿里Canal框架数据库同步-实战教程

    一.Canal简介: canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 二.背景介绍: ...

  6. Obtain The String CodeForces - 1295C binary_search+思维

    妈耶,,,被B题卡到哭,C题一发就过了... 字符串问题.首先用vector记录每个字符出现的位置,然后对字符串t的每个字符,用二分查找函数查找,注意用upper_bound查找,对于字符i,首先用变 ...

  7. [apue] getopt 可能重排参数

    看第21章时,介绍到了解析命令行的神器 getopt,了解了 linux 下处理通用命令行的方法. 命令行可分为参数与选项,其中不带 - 或 -- 前缀的为参数,对一个命令而言数量是固定的,多个参数之 ...

  8. Springboot:thymeleaf模板(八)

    存放位置:resources\templates 访问方式:通过Controller请求访问,不可直接访问(相当于web项目的WEB-INF目录) 环境依赖: <!--thymeleaf模板支持 ...

  9. MySQL笔记总结-TCL语言

    TCL语言 事务 一.含义 事务控制语言 Transaction Control Language 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行 二.特点(ACID ...

  10. 数值计算方法实验之按照按三弯矩方程及追赶法的三次样条插值 (MATLAB 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...