在项目目录下新建SouceFolder:Config
在这个目录下新建SqlMapConfig.xml
找头部约束
Mybatis sql输出依赖log4j
与pojo对应,eg:User.xml
将每个pojo的映射文件配置到Mybatis的配置文件
mappers
resource属性配置xml文件的路径
select标签
id:语句的唯一标识
parameterType:入参的数据类型
resultType:pojo 返回结果的数据类型
#{}:是占位符,相当与JDBC的问号
创建sqlsessionFactorybuilder对象
创建核心配置文件的输入流
通过输入流创建sqlsessionFactory对象
创建sqlSession对象
执行查询,参数1:sqlId,入参
输出用户
释放资源
每次写代码都要重复一些步骤,把它们抽取成工具类
官方文档有说明:sqlsessionFactory不应该被反复创建,应该使用单例。
而sqlSession不同,每个线程应该有自己的sqlSession,不共享,不是线程安全的。
${}字符串拼接指令
如果入参为普通类型,括号内只能写value
Mybatis默认不提交事务,需要手动commit
要操作数据就要记得commit
或者在openSession(true)
selectKey:主键返回
keyProperty:user中的主键属性
resultType:主键的数据类型
order:指定selectKey何时执行
或者用useGeneratedKeys为true,启动自增
用keyproperty指定接受的属性
select last_insert_id();
uuid();
dao包装:
传统:
动态代理包装:
只有接口,没有实现类
动态代理开发规则:
获取接口的代理实现类
sqlSession.getMapper(UserMapper.class)
DTD模式对标签顺序有要求
properties标签
先加载内部标签,再加载外部文件,名称一致时,会替换内容
别名:
单个别名定义:别名的使用不区分大小写
别名包扫描:别名是类的全称,不区分大小写,推荐
mapper:
传统方式只有一种方式:配mapper标签里的resource属性
映射文件:class扫描器
映射文件包扫描:推荐
对象里包含了其他对象
vo:值对象
包装的pojo的应用场景:
淘宝商品里的名称,材质,供应商等信息会分成很多个表来保存
这时,如果要提交所有的数据,一个pojo是接收不了的。这时候就要用到包装的pojo
自动补全sql语句的where关键字,并且处理多余的and
用了where标签,就不能手动的加where关键字了
抽取重复使用的sql片段
抽取:
使用:; refid:引用定义好的sql片段id
输入类型只有简单类型和对象类型两种,想要把list传入,就需要把它包装到pojo里
collection:要遍历的集合
open:循环开始之前输出的内容
item:设置循环变量
Seperate:分隔符
close:循环结束后输出的内容
#{uId}
得到了sql语句:id in(1, 25, 29, 30, 35)
trim: 前缀"(",后缀")",分隔符","
帮助处理sql语句里多余的","
association用于配置一对一关系:
collection用于配置一对多关联: