SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。
是目前企业开发比较流行的架构。
代替了之前的SSH(Struts + Spring + Hibernate)

计划的架构组合

  • Sping MVC + Spring + MyBatis(非Ajax版)
  • Sping MVC + Spring + MyBatis(Ajax版)
  • Sping MVC + Spring + MyBatis(Ajax版 + JavaConfig)
  • Spring Boot + MyBatis + Redis(Ajax版)
  • Spring Boot + MyBatis + Dubbo(Ajax版)
  • Spring Boot + MyBatis + Spring Cloud(Ajax版)

技术选型

持久层

  • 使用MyBatis实现DAO的操作。
  • 使用MyBatis-Generator(MBG)实现DAO层代码的生成。
  • 使用PageHelper实现分页功能。
  • 数据库使用MySQL。
  • 数据库连接池使用Spring自带的数据库连接池。
  • 使用Log4j实现SQL语句在控制台的打印功能。

业务层

  • 使用Spring实现IOC、声明式事务、框架间的整合等功能。

展现层

  • 使用Spring MVC作为Web MVC框架。
  • 使用JSR303实现服务端的数据校验。
  • 使用jQuery实现客户端的数据校验。

单元测试

  • 使用 Junit + Spring Test 实现单元测试。

    • Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      File apkFile = new File(apkFullPath);
      Uri uri = null;
      String path = MainActivity.instance.getApplicationContext().getPackageName() + ".fileProvider";
      uri = FileProvider.getUriForFile(MainActivity.instance, path,apkFile);
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      intent.setDataAndType(uri, "application/vnd.android.package-archive");
      MainActivity.instance.startActivity(intent);

      PS:这里有个地方需要注意,为何非要是这个顺序???

      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        ...

        ...

      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

      为什么setFlag放到上面就可以,addFlag放上面就不行呢???原因很简单,当setFlag时会先清空intent下之前所有的flag,所以addFlag的FLAG_GRANT_READ_URI_PERMISSION就无效了,本人亲自踩的坑,多么痛的礼物!

      这一切到搞定了,打包真机测试,android 7.0的果然好了,年轻人,别高兴的太早,说完又遇到一个坑,8.0以上的系统死活不会弹出安装界面,一首凉凉送给自己,,,但是马上就要看到胜利的曙光了,一定要淡定,车到山前必有路,办法总比困难多!!!

      最终安装代码,完美兼容,Android 7.0,8.0

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      public static void installApk(String apkFullPath)
      {
          try
          {
              Intent intent = new Intent(Intent.ACTION_VIEW);
              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
              Log.v("android", apkFullPath);
              onCoderReturn(apkFullPath);
              File apkFile = new File(apkFullPath);
              Uri uri = null;
              if (Build.VERSION.SDK_INT >= 24)
              {
                  String path = MainActivity.instance.getApplicationContext(www.huarenyl.cn).getPackageName() + ".fileProvider";
                  Log.v("android", path);
                  uri = FileProvider.getUriForFile(MainActivity.instance, path, apkFile);
                  intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
              }
              else
              {
                  uri = Uri.fromFile(apkFile);
                  Log.v("android", apkFile.getAbsolutePath());
              }
              onCoderReturn("install" + uri.getPath(www.yongshi123.cn));
              intent.setDataAndType(uri, "application/vnd.android.package-archive");
              //解决安卓8.0安装界面不弹出
              //查询所有符合 intent 跳转目标应用类型的应用,注意此方法必须放置在 setDataAndType 方法之后
              List<ResolveInfo> resolveLists = MainActivity.instance.getPackageManager(hengtongyoule.com/).queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
              // 然后全部授权
              for (ResolveInfo resolveInfo : resolveLists)
              {
                  String packageName = resolveInfo.activityInfo.packageName;
                  MainActivity.instance.grantUriPermission(packageName, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
              }
              MainActivity.instance.startActivity(intent);
          }
          catch (Exception e)
          {
              e.printStackTrace(www.gaozhuoyiqi.com);
          }

开发工具

  • 开发工具:IntelliJ IDEA
  • 数据库管理工具:Navicat Premium
  • 项目构建、依赖管理:Maven
  • 版本控制:Git
  • 服务器:Tomcat

功能点

查询功能

  • 列表查询
  • 分页信息
  • 分页导航条

添加功能

  • 添加页面(加载部门列表)
  • 添加功能
  • 姓名唯一性校验
  • 后端数据校验 + 错误消息提示
  • 前端数据校验 + 错误消息提示
  • 错误数据回填

修改功能

  • 修改页面(回显员工信息)
  • 修改(姓名不可改)
  • 后端数据校验 + 错误消息提示
  • 前端数据校验 + 错误消息提示
  • 错误数据回填

删除功能

    • 单个删除 

    • 批量删除(全选/全不选) 

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。的更多相关文章

  1. 转载 Spring、Spring MVC、MyBatis整合文件配置详解

    Spring.Spring MVC.MyBatis整合文件配置详解   使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...

  2. Spring MVC、MyBatis整合文件配置详解

    Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...

  3. Mybaits-从零开始-Spring、Spring MVC、MyBatis整合(未万待续)

    Spring.Spring MVC.MyBatis整合(未万待续)

  4. Spring、Spring MVC、MyBatis整合文件配置详解

    原文  http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...

  5. 【转】Spring、Spring MVC、MyBatis整合文件配置详解

    见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...

  6. Spring、Spring MVC、MyBatis整合文件配置详解2

    使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Spring:http://spring.io/docs MyBatis ...

  7. Spring、Spring MVC、MyBatis 整合文件配置详解

    使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. Spring:http://spring.io/docs MyBatis ...

  8. Spring MVC + Spriing + MyBatis整合,写给新人

    开发环境: 开发工具:MyEclipse 8.6 数据库:MySQL 操作系统:WIN8.1 Jar包: Spirng和SpringMVC版本:3.2.9 MyBatis版本:3.2.8 其他关联Ja ...

  9. spring mvc 和mybatis整合 的异常处理

    1.自定义异常信息类 通过构造函数来实现异常信息的接收 public class CustomException extends Exception { //异常信息 private String m ...

  10. spring mvc与mybatis整合错误提示

    java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L ...

随机推荐

  1. java.net.NoRouteToHostException:Cannot assign requ

    以下内容摘自:http://blog.sina.com.cn/s/blog_658c8cea0101l2sw.html 今天压力测试时, 刚开始出现了很多异常, 都是 java.net.NoRoute ...

  2. Django的模板语言

      Django模板系统 官方文档 常用语法 只需要记两种特殊符号: {{  }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 变量 {{ 变量名 }} 变量名由字母数字和下划线组成. ...

  3. 福州大学软件工程1816 | W班 第6次作业WordCount成绩排名

    作业链接 WordCount进阶需求 评分细则 本次个人项目分数由两部分组成(博客分满分40分+程序得分满分60分) 博客评分细则(满分60,最终折算为40分) 在文章开头给出结对同学的博客链接.本作 ...

  4. html,css学习实践总结

    网页的布局方式 1.什么是网页的布局方式? 网页的布局方式其实就是指浏览器是如何对网页中的元素进行排版的 1.标准流(文档流/普通流)排版方式 1.1其实浏览器默认的排版方式就是标准流的排版方式 1. ...

  5. Highgo 瀚高数据库的简单搭建以及处理参数等.

    1. 获取一个瀚高数据库的安装文件 我这边只获取了 瀚高的 2.0.4 的windows x64 版本的. 来源: 同事从供应商那里获取的. 2. windows上面简单安装 很简单 exe 一路ne ...

  6. Git SSH公钥配置

    https://www.cnblogs.com/smuxiaolei/p/7484678.html https://blog.csdn.net/weixin_42063071/article/deta ...

  7. VSC软件快捷键

    Shift + Alt + F  格式化 Ctrl+Shift+P, F1显示命令面板 Ctrl+P快速打开,进入File… Ctrl + Shift + N新窗口/实例 Ctrl + Shift + ...

  8. Day 5-2 类的继承和派生,重用

    类的继承 派生 在子类中重用父类 组合 抽象类 定义: 继承指的是类与类之间的关系,是一种什么“是”什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创建新类的方式,在python中,新 ...

  9. unsupported time zone specified undefined

    unsupported time zone specified undefined   出现了这个问题,莫名其妙的,上次被我下回去了,真的是下回去的,我一去查看,坐在电脑前面问题就不见了…… 具体出现 ...

  10. shell中的>,2>&1,&>file 解析记录

    0  表示标准输入1  表示标准输出2  表示标准错误输出>  默认为标准输出重定向,与 1> 相同2>&1  意思是把 标准错误输出 重定向到 标准输出.&> ...