一、全局配置文件其它配置
1.1 properties数据库文件配置
- 概要:在之前学习 JDBC 的时候,配置数据库相关信息如用户名,密码等这些数据就可以单独的放置到一个 db.properties 中,然后在配置文件中调用这个文件中的数据。那么同样的,在全局配置文件中,对于一些相关信息,也可以使用这种方式
- 首先,在根目录下创建 db.properties 文件,并以 key = value 的方式录入一些值
- 在全局配置文件中,获取这个 db.properties 文件,然后,取得其中的键值对
1.2 为映射文件中入参,返回参数所用的自定义类型定义别名
- 常规情况下,在映射文件中,我们编写一个SQL,其所用到的入参 or 返回参数类型如果非系统自带,是我们自定义的,则需要引用这个实体类的路径,如图所示:
- 为了简化这些参数类型的引用,我们考虑在全局配置文件中,对我们可能会用到的实体类起一个别名,从而在映射文件中直接使用别名来代替路径,减少代码,同事也便于理解。如图所示
- 在映射文件中,如果使用到这个实体类,无论是作为传入参数类型还是返回参数类型,都可以用别名来代替,如图所示:
- 但是对于上面的情况,我们实际项目中,可能会用到的实体类往往很多,如果对每一个实体类都起别名,则增加了工作量,因此考虑批量起别名,直接对某个包下所有实体类起别名,别名为原名的首字母小写(原名叫:User ,别名:user),在映射文件中使用时候直接写别名即可(首字母小写)
那么同样需要在全局配置文件中进行配置,如图所示:
- Mybits自带的别名种类
1.3 全局配置文件配置映射文件路径选择(Mapper)
-
使用相对路径如:
< mapper resource="sqlmap/User.xml" />
-
使用绝对路径如:
< mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />
-
使用mapper接口的路径如:
< mapper class="cn.gyf.mybatis.mapper.UserMapper"/> 这种配置 xml 文件而是直接配置接口的方法需要在调用的时候加上注解,过于麻烦,冗余,不常使用
-
配置指定路径下所有映射文件(此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下)
< package name="cn.gyf.mybatis.mapper"/>
-
示例图
二、映射文件其他配置
2.1 概要
- 关于映射文件,主要包括传入参数类型与返回参书类型的选择
- 在映射文件中,涉及到的自定义的参数类型,可以使用别名的方式来声明,上文已经写过。
2.2 输入映射ParameterType
- 传递简单类型
- 传递 POJO 类型(非系统自带的自定义类型)
- 传递 POJO 包装类型
-
开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数
-
综合查询用户信息,需要传入查询条件复杂,比如(用户信息、订单信息、商品信息)。
vo:键值对对象,相对于kv
po:persist object 持久化对象
pojo:简单的java对象
entity:实体 -
例如SQL语句中的关联查询,使用到了多个表中的不同属性,最终组合生成目标数据
-
此时,因为传入参数类型来自于不同的对象(类型中),而接收时候不能写多个 ParameterType 。因此考虑将需要传递进来的不同的对象组合成一个新的对象
-
而 ParameterType 中只需要传递这个新的对象,然后在 SQL 语句中取组成这个新的对象的对象的属性(取了两次值)
-
类似于前端 EL 表达式中,取嵌套值
-
图片示例
-
- 传递 Map 类型
- 同样的,传递过来的数据可能不是一个,而是多个(不同于不是一类,这里是同一类型,多个数量共同组成一个传递来的对象),此时,就需要把这些同一类型,不同数量的数据使用 Map 组合起来,整体作为输入映射 ParameterType 接收的参数
- 修改UserMapper 增加传递 Map 类型的方法
- 修改UserMapper.xml 中 ParameterType 接收的类型
- 测试
2.3 输出映射 resultType/resultMap
-
输出简单类型,返回值是一个基础的类型,例如 int
-
输出值类型是 POJO 单个对象(自定义类型)
-
输出值类型是 POJO 列表(与返回 POJO 单个对象映射相同,不同的是接收时候需要用 List<> 接收)
-
对于 2 和 3 的总结
- 输出单个pojo对象和pojo列表时,mapper映射文件中的resultType的类型是一样的,mapper接口的方法返回值不同。
- 同样的mapper映射文件,返回单个对象和对象列表时,mapper接口在生成动态代理的时候,会根据返回值的类型,决定调用selectOne方法还是selectList方法
-
输出 resultMap 类型
- 如果查询出来的列名和属性名不一致,通过定义一个resultMap将列名和pojo属性名之间作一个映射关系
- 修改 UserMapper
- 修改 UserMapper.xml
- 测试
三、笔记内容
3.1 对于全局配置文件
- properties数据库文件配置
- 定义别名 typeAliases
- 配置映射文件路径选择
3.2 对于全局配置文件
- 输入映射ParameterType
- 简单类型
- POJO对象
- POJO包装对象
- Map对象
- 输出映射 resultType/resultMap
- 简单类型
- POJO单个对象
- POJO列表
- resultMap