本篇文章为本人对与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接口全限定名(如<mapper namespace="com.huyijie.mapper.UserMapper"),在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回类型一致。
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 id="deleteByIds">
delete from tb_brand where id
in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
;
</delete>
//接口方法
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