阅读提示:1、MyBatis概述
本文默认已经预装预装maven
持久层:
- 负责将数据保存到数据库的代码部分
- Java EE三层架构:表现层、业务层、持久层
在pom.xml中配置文件中添加依赖的坐标
注意:需要在项目的resources目录下创建logback的配置文件
核心文件用于替换信息,解决硬编码问题
在模块下的resources目录下创建mybatis的配置文件mybatis-config.xml
SQL映射文件用于统一管理SQL语句,解决硬编码问题
在模块的resources目录下创建映射配置文件UserMaooer.xml
解决形如上述测试类中List users = sqlSession.selectList("test.selectAll");的硬编码问题
maven项目开发时要求code和resources分开,可在resources中创建相同包文件来是实现上述效果
同时还要修改其路径
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载,简化mybatis核心配置文件
在核心配置文件的 environments 标签中其实是可以配置多个 environment ,使用 id 给每段环境起名,在 environments 中使用 default='环境id' 来指定使用哪儿段配置。我们一般就配置一个 environment 即可
映射配置文件中的resultType属性需要配置数据封装的类型(类的全限定名),繁琐
Mybatis 提供了 类型别名(typeAliases) 可以简化这部分的书写
- 编写接口方法Mapper接口
- 参数
- 返回值
- 在SQL映射文件中编写SQL语句
- MyBatisX插件自动补全
- 编写SQL
- 若数据库字段名和实体类字段名不同,则需要解决该问题(见 5.2 SQL映射文件)
- 编写执行测试
- 获取SqlSessionFactory
- 获取sqlSession对象
- 获取mapper接口的代理对象
- 执行方法
- 释放资源
本节要点:
- 测试类的编写方式
- 解决数据库字段和实体类字段名不同的问题
本节要点:
- MyBatis的SQL映射文件中,SQL语句如何接收对应参数
本节要点:
- 多条件查询:如果有多个参数,需要使用@Paran("SQL参数占位符名称")注解
- 多条件的动态条件查询:对象属性名称要和参数占位符名称一致
(详见5-2解决数据库字段和实体类字段名不同的问题)
- 单条件的动态条件查询:保证key要和参数占位符名称一致
优化条件查询,如页面上表单存在多个条件选项,但实际填写表单仅使用部分条件筛选的情况
注:
- if标签的test属性中可以包含逻辑或等逻辑判断,使用and、or进行连接
- 若条件SQL中同时包含AND等连接符
- 对所有的条件前都加AND,并在WHERE后加任意真判断,即WHERE 1=1 AND ... AND ...
- 加入判断标签造轮子,自行决定添加AND的条件
- 使用标签替换原SQL中的WHERE关键字,MyBatis将自动进行语法修正,如示例所示
优化条件查询:如表单中存在多个条件筛选,但仅有其中一个生效的情况
- 使用标签
- choose标签类似于Java中的switch
- when标签类似于Java中的case
- otherwise标签类似于Java中的default
MyBatis默认手动事务,执行添加等操作时会自动回滚
传入实体类对象进行数据添加,在数据添加完成后,会将id信息写回该实体类对象
优化上述代码应对仅修改部分属性导致其他属性数据丢失问题
使用标签替换set关键字列表,区别于标签,注意语法
用于解决删除时传入参数为数组的情况
- 使用标签代替SQL语句中的id in (?, ?, ..., ?)
- collection属性为MyBatis封装后数组对应的key,封装后属性值应为array(见注释)
- MyBatis默认会将数组参数封装为Map集合,其key为array,即 array = ids
- 可在接口中对参数数组使用@Param注解,将封装后的key手动命名,则可在映射文件中使用
- separator属性为分隔符
- open和close属性分别为在前后拼接字符,主要用于代码规范,示例中未展示
设有如下代码:MyBatis会将散装的多个参数封装为Map集合复制代码
- User select(@Param("username") String username,@Param("password") String password);
- 原接口
复制代码
- Brand selectById(int id);
- 原SQL映射文件
复制代码
- <mappers>
- <mapper resource="priv/dandelion/mapper/UserMapper.xml"/>
- </mappers><mappers>
- <mapper resource="priv/dandelion/mapper/UserMapper.xml"/>
- </mappers><mappers>
- <mapper resource="priv/dandelion/mapper/UserMapper.xml"/>
- </mappers>select *<mappers>
- <mapper resource="priv/dandelion/mapper/UserMapper.xml"/>
- </mappers>from tb_brand<mappers>
- <mapper resource="priv/dandelion/mapper/UserMapper.xml"/>
- </mappers>where id = #{id};
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |