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 整合开发。

添加功能

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

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

修改功能

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

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

删除功能

    • 单个删除 SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

    • 批量删除(全选/全不选) SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

相关文章: