提示:会敲很重要,理解一些理论也很重要
一、Maven
- maven是什么?有哪些功能?
Maven是专门用于管理和构建Java项目的工具
提供了一套标准化的项目结构
提供了一套标准化的构建流程(编译,测试,打包,发布……)
提供了一套依赖管理机制
- maven仓库分为哪几类?
本地仓库
中央仓库
远程仓库(私服)
- maven常用命令有哪些?分别作用是什么?
complie 编译 编译java文件,下载jar包,在该目录下生成target包
clean 清理target包
test 运行单元测试的java代码
package 打包 生成jar
install 安装 把jar包放入本地仓库
二、Mybatis
- 如何理解mybatis?mybatis解决了哪些原生JDBC代码的问题?
MyBatis 是一款持久层框架,用于简化 JDBC 开发
硬编码可以配置到配置文件
操作繁琐的地方mybatis都自动完成
- 使用Mybatis代理方式需要满足哪些要求?
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
设置SQL映射文件的namespace属性为Mapper接口全限定名
在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
- 在项目的
pom.xml
文件中出现如下图所示问题原因是什么?如何解决?
jar包下载错误导致的
重新去中央仓库中找下载失败的jar包下载
- 对查询结果封装映射配置文件中什么时候使用 resultType 属性?什么时候使用resultMap属性?
如果sql语句查询到字段名和实体类中的属性名相同就使用 resultType 属性指定封装类型
如果sql语句查询到的字段名和实体类中的属性名不相同就需要 resultMap 来定义字段名和实体类属性名的映射关系
- #{} 和 ${} 占位符的区别是什么?
#{} 底层使用的是PreparedStatement,不会出现sql注入问题;并且可以设置预编译,提高sql执行效率
${} 底层使用的是Statement,可能出现sql注入问题
- 说出mapper接口方法上什么时候加@Param注解,什么时候不需要加@Param注解?
如果mapper接口方法上只有一个普通类型的参数,不需要加@Param注解,映射配置文件中#{}中可以任意写名称,建议做到见名知意
如果mapper接口方法上是实体类类型的参数,不需要加@Param注解,映射配置文件中#{}中和实体类中的属性名保持一致
如果mapper接口方法上是多个参数,需要加@Param注解给每个参数起名字,映射配置文件中#{}中书写的是@Param注解中写的名称
如果mapper接口方法是单个单列集合类型或者数组类型,需要加@Param注解给参数期名称
如果mapper接口方法是单个map集合类型,不需要加@Param注解,映射配置文件中#{}中名称需要和map集合的键名保持一致
- 如果需要在添加数据成功后获取数据库中自增长生成的主键值,需要如何配置?
在insert标签上使用如下两个属性
* useGeneratedKeys : 配置是否使用数据库自增长生成的主键值,true表示是,false表示否
* keyProperty : 配置需要将获取到的自增长生成的主键值封装到实体类的哪个属性中