JavaWeb知识复习总结一(Maven、Mybatis)

        本篇文章为本人对与JavaWeb学习完之后的内容总结,只会写一些比较重要并且觉得自己之后会用到的内容。

一、Maven

        Maven是专门用于管理和构建Java项目的工具,提供了一套标准化的项目结构和构建流程(编译、测试、打包、发布等等),以及一套管理机制。IDE创建的Maven项目可以通用,Maven使用标准的坐标配置来管理各种依赖。

1.1 Maven仓库

  • 本地仓库:本地计算机上的一个目录
  • 中央仓库:由Maven团队维护的全球唯一仓库
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

1.2 Maven基本使用

常用命令:

  • complie:编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

在Maven项目所在路径的pom.xml文件路径上,打开PowerShell,使用mvn 命令就可以

1.3 Idea中使用Maven详见自己笔记文档

二、Mybatis

        Mybatis是一款持久层框架,用于简化JDBC开发。(JavaEE三层架构:表现出、业务层和持久层。持久层指的是负责将数据保存到数据库的那一层代码)

2.1 Mapper代理开发

        定义与SQL映射文件同名的Mapper接口,设置SQL映射文件的namespace属性为Mapper接口全限定名(如

2.2 常用标签

        详见Mybatis全部标签_暴揍小学生的博客-CSDN博客_mybatis标签

        对于实体类属性名和数据库表列名不一致,不能自动封装数据,有一下两种解决方法:

  • 起别名:在SQL语句中对不一样的列名起别名,别名和属性名一样,可通过sql标签提高代码的复用性
  • resultMap:定义完成不一致的属性名和列名的映射 

2.3 参数占位符

        mybatis提供了两种参数占位符:

  • #{ }:执行SQL时,会将#{ }替换为?,将来自动设置参数值,底层是PreparedStatement
  • ${ }:拼接SQL,底层时Statement,会存在SQL注入问题

#{ }能有效防止SQL注入,开发用#{ }。

        对于有参数的mapper接口方法,在映射配置文件中应该配置ParameterType来指定参数类型

        对于sql中一些特殊字段,两种处理方式Mybatis 的特殊字符转义_笑看烟雨红尘的博客-CSDN博客_mybatis特殊字符转义 

 2.4 多条件查询

对于Mapper接口中有多个参数时,可以有如下方式进行传参:

  • 使用@Param(“参数名称”)标记每一个参数,在映射配置文件中就需要使用#{参数名称}进行占位
  • 将多个参数封装成一个实体对象,将该实体对象作为接口的方法参数。该方式要求在映射配置文件中的SQL使用#{内容}时,里面的内容必须和实体类属性名保持一致
  • 将多个参数封装到map集合中,将map集合作为接口的方法参数。该方式要求在映射配置文件的SQL中使用#{内容}时,里面的内容必须和map集合中键的名称一致

2.5 动态SQL

        详见2.2 Mybatis常用标签链接

2.6 主键返回

        在insert(或update)标签中加入useGeneratedKeys="true" keyProperty="主键",方法返回添加记录之后的主键id

  • useGeneratedKeys:获取自动增长的主键值,true表示获取
  • keyProperty:指定将获取到的主键值封装到哪个属性里

2.7 批量删除

        当接口中传入的参数是一个数组时,举例如果时id数组

使用foreach标签用来迭代任何可迭代的对象(如数组、集合),常用属性如下:

  • collection属性:mybatis会将数组参数,封装为一个Map集合,默认array=数组,使用@Param注解改变map集合的默认key的名称
  • item属性:本次迭代获取到的元素
  • separator属性:集合迭代之间的分隔符。foreach标签不会错误地添加多余的分隔符,也就是最后一次迭代不会加分隔符
  • open属性:在拼接SQL语句之前拼接的语句,只会拼接一次
  • close属性:在拼接SQL语句之后拼接的语句,只会拼接一次

    delete from tb_brand where id
    in
    
        #{id}
    
    ;


//接口方法
void deleteByIds(int[] ids);

2.8 参数传递

        mybatis接口方法可以接受各种各样的参数,如下有:

  • 多个参数
  • (单个参数以下类型)
  • POJO类型
  • Map集合类型
  • Collection集合类型
  • List集合类型
  • Array类型
  • 其他类型

2.8.1 多个参数

我们通常在mybatis接受多个参数时使用@Param注解,原理如下:

        在接口方法中定义多个参数,Mybatis会将这些参数封装成Map集合对象,值就是参数值,而键在没有使用@Param注解时有一下命名规则:

        1、以arg开头,第一个参数就叫arg0,第二个参数就叫arg1,以此类推。map.put("arg0",参数值1); map.put("arg1",参数值2)

        2、以param开头,第一个参数就叫param1,第二个参数叫param2,以此类推。map.put("param1",参数值1); 

在接口方法参数上使用@Param注解,Mybatis会将arg开头的键名替换为对应注解的属性值

2.8.2 单个参数

  • POJO类型:直接使用,要求属性名和参数占位符名称一致
  • Map集合类型:直接使用,要求map集合的键名和参数占位符名称一致
  • Collection集合类型:mybatis会将集合封装到map集合中,如:map.put("arg0",collection集合)   map.put("collection",collection集合)  可以使用@Param注解替换map集合中默认的arg键名
  • List集合类型:mybatis会将集合封装到map集合中,如:map.put("arg0",list集合)  map.put("collection",list集合)   map.put("list",list集合)    可以使用@Param注解替换map集合中默认的arg键名
  • Array类型:同上,map.put("arg0",数组)  map.put("array",数组)  可以使用@Param注解替换map集合中默认的arg键名
  • 其他类型,比如int类型,参数占位符名称叫什么都可以,单个参数随意。

2.9 注解实现CRUD

        注解完成简单功能,配置文件完成复杂功能,常用注解为@Select @Insert @Update @Delete

你可能感兴趣的:(Java_web,java,maven,mybatis)