Mybatis(二)[SqlMapConfig文件配置、输入输出参数映射解读]–day05 上
一、SqlMapConfig配置
1.properties属性配置
1)单条属性配置 不建议使用
2) 从配置文件中读取配置
优点:sqlMapConfig.xml 中配置信息过多,单独拆分出去便于修改
加载db.properties文件下的参数配置
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
属性名尽量用特殊写法,不易重复如:xxx.xxx.x 在原因获取属性优先级。
这里有一个还没解决的问题,如何加载指定的多个配置文件,不会插个眼
3)从Mapper.xml 文件中获取。
resultType="com.test.mybatis.pojo.TbUser">
select * from tb_user where id=#{id}
select * from tb_user where id=#{id}
如果这里的#{id} 写成上面 1) 2) 中配置的属性名如:jdbc.url 将会将 1) 2)中的同名属性覆盖
4) 配置加载优先级
顺序
1 sqlMapConfig.xml 中定义的配置属性参数:1)
2 db.properties resource引入配置 2)
3 Mapper映射文件中的参数 3)
优先级:
引入顺序执行同时,执行的是覆盖操作,所以优先级排序正好相反 3)→2)→1)
2.settings 设置
全局参数配置(调整运行参数:开启二级缓冲、延迟加载等 如果设置错误将会影像程序正常执行)
详细配置参数表
3.typealiases 别名配置
在statement(Mapper映射文件 select、insert。。。 )中使用全限定名输入费劲。。可以通过定义别名的方式来简化这个输入。
定义别名(单个定义)
批量定义,扫描包
生成的别名就是包下的各个类的类名(首字母大小写都可以)
4.typeHandlers
通过typeHandlers可以完成java类型和jdbc类型的转换
比如这里的输入参数 long 实际后面sql语句执行过程中使用的是转化过的jdbc类型,这一转化功能就由typeHandlers类型处理器来实现
默认支持很多一般情况下就够用了
5.mappers
**单条映射配置:**resource 指定单个映射文件的位置
//
**单条映射配置:**class 指定Mapper接口
多条映射配置(扫描包形式)
二、包装类型输入输出映射
1.输入映射
用于复杂的高级查询,这时候输入简单类型、HashMap或者pojo类型都无法实现查找的要求。
例如: 想要查找3天内买过指定类型商品的5位女性客户信息
显然输入简单类型、HashMap、User类、订单类。。都不合适
那么可以将用到的查询条件进行封装:将用户类,订单类,商品类、商品类型类还有查询条数这些相关信息封装在一个Vo类中。然后将查询依据的属性属性统一起来作为搜索条件。
**也可以将User类 写一个扩展类 顾客类 封装进Vo类中。
SQL 语句中
使用这个Vo类做为输入参数,Vo类中的一级属性(比如查询数目) 可以直接通过属性名来获取, 获取属性(如User)的内部属性(如sex(性别))依照User.sex 格式来写,没啥说的废话一句。
2.输出映射
1)简单类型
只有输出结果一行一列的情况下才会使用(谁说的?(好吧视频老师说的),看好多帖子也是这样写的,我按用户名查找用户id也可以使用简单类型啊,返回List列表也是可以的说)
2)HashMap类型
输出的列名作为key,每行结果作为value。同样接口返回类型判断如使用selectList,将会返回一个List数组HashMap作为元素。
3) pojo类型
pojo类型对象作为返回参数类型,有如下三种情况
1)搜索结果列和pojo对象属性一样多(每行对应一个属性)。返回类型为pojo 没有异议
2)列不够用来对应每条属性。 返回的pojo类型 不全 例如 如果select 不对 name字段进行查询
3)列没有能用来和任意一条属性对应的。(不会创建pojo对象)
上面的应该没有异议
因为看的视频学习的,没有介绍查询结果列 比pojo对象属性多的情况
我来试试
首先 :最简单的 在查询结果集中随便插入一行
select A=1, * from tb_user
这一行 (之前用sql server写)很简单的沙雕语句,居然也会出错。
经过一番实验搜索,看到mysql二层查询给的灵感
正确语句闪亮登场。。。
select 1 A, tb_user.* from tb_user
因为一句sql语句高兴成这样,我也是醉了。
好了,有了这一行sql 语句可以去实验了。是爆错(pojo吃撑),还是舍弃呢
resultType="com.test.mybatis.pojo.TbUser">
select 1 A, tb_user.* from tb_user where username like '%${value}%'
实验结果是舍弃,并不会报错
4)ResultMap
因为3)中的种种问题,使用ResultMap代替ResultType
记一下思路,只学到最简单常用的
1.定义resultMap和相关类型的映射
具体定义
这个是引用比较完全的配置 未测试等用再看
然后就是后面statement的resultMap=“resultMap的id”
先到这,今天进度好慢,好像出了大问题。 ——_——。。
含着泪标题写的上,晚上还得加把劲。。。