admin 管理员组文章数量: 887021
【MyBatis】
文章目录
- MyBatis的简介:
- 测试类:xml工厂
- 表名报红的解决办法:
- Mapper代理开发
- MyBatis主配置文件:
- MyBatisX(小鸟标识)的插件:
- 优化mapper.xml文件
- 一、配置文件完成增删改查的操作
- 查询-查看详情:
- 关于#{}、${}:
- sql中关于特殊字符处理:>、<
- sql片段:
- 条件查询:
- 1.多条件查询
- -----test测试类(三种)------
- 2.多条件-动态条件查询(动态sql)
- 3.单条件-动态条件查询(下拉框选择条件)
- 添加功能
- 1.添加:
- 2.主键返回:
- 修改
- 修改全部字段:
- 修改动态字段<set>(只修改部分字段):
- 删除
- 删除单个:
- 批量删除<foreach>:
- MyBatis参数传递
- 1.分析参数在MyBatis底层的封装结构:
- 2.分析单个参数:
- 二、注解完成增删改查
MyBatis的简介:
myatis中文版官网:.html
图1:
图2:
测试类:xml工厂
- 1.加载mybatis的核心配置文件,获取SqlSessionFactory
- 2.获取Sqlsession对象,用它来执行sql
- 3.执行sql
- 4.关闭资源
表名报红的解决办法:
解决一下mapper.xml里面sql,表名报红的解决办法(报红原因是不识别数据库,没有表名):
大图:
Mapper代理开发
MyBatis主配置文件:
- environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的数据源environment
- 别名typeAliases
在映射文件那里的返回数据类型就可以简化(不区分大小写):看官网
注意:核心配置文件是有顶层结构的,配置各个标签时,遵循前后顺序
MyBatisX(小鸟标识)的插件:
- MybatisX是一款基于IDEA的快速开发插件,为效率而生
- 主要功能:
- XML和接口方法 相互跳转
- 根据接口方法生成statement(mapper里面的sql叫做statement) - 安装:
增删改查两种方式:1.配置文件完成增删改查 2.注解完成增删改查
优化mapper.xml文件
▶不一样的列名起别名,别名和实体类的名字一样就可以
▶使用sql片段
▶使用映射resultMap
- id:唯一标识
- type:映射的类型,支持别名
resultMap有两种:
- id:完成主键字段的映射
- result:完成一般字段映射
- 它们的column:数据库对应字段;property:实体类属性
一、配置文件完成增删改查的操作
查询-查看详情:
- 查询所有信息返回 List<实体类>
- 查询单个信息的详情返回对象
关于#{}、${}:
- #{}:会将执行的sql中的#{}为?,为了防止sql注入
- #{}里面的参数一般和接口里面的方法参数保持一致即可
- ${}:拼接sql,会存在SQL注入问题
- 使用时机:
- 参数传递的时候用#{}
- 表名或者列名不确实的情况下${}
sql中关于特殊字符处理:>、<
sql片段:
<!--建立sql片段:id命名-->
<sql id="query_user">name,sex,age……
</sql>
<!--使用include标签插入片段,refid与id命名一致-->
SELECT <include refid="query_user"/>
FROM 表名
where 条件(条件过多,重复使用也可以用sql片段)
条件查询:
1.多条件查询
SQL语句设置多个参数有几种方式?
1)散装参数:需要使用@Param(“sQL中的参数占位符名称”)
2)实体类封装参数:只需要保证SQL中的参数名和实体类属性名对应上,即可设置成功
3) map集合:只需要保证SQL中的参数名和map集合的键的名称对应上,即可设置成功
-----test测试类(三种)------
方法一:
方法二:放入一个对象中
方法三:Map集合,put(“xxx”, xxx)的键值与sql中的#{}中的对应
:
三个方法的执行结果:
2.多条件-动态条件查询(动态sql)
动态sql:
在sql中加 执行用于判断参数是否有值;注意test属性里面用 逻辑运算符and 连接多个条件,符号&&不可用。
问题解决:
- 1.恒等式解决:
- 2.标签
3.单条件-动态条件查询(下拉框选择条件)
问题:
当一个条件都不选择,对象里面传的空的,会报错,使用otherwise解决,如图:
方法一:when后面在添加otherwise标签
方法二:使用where标签包裹choose
添加功能
1.添加:
MyBatis事务:
数据库没有添加成功数据,数据回滚,数据库没添加上。
处理:
2.主键返回:
上个例子,brand.add(对象); 在通过对象获取数据getXxx(); 打印syso(),主要是返回id,上面的添加完成并不能获取新添加数据的id。一些场景:一个订单对应多个订单项,订单主键是订单项的外键。
修改
修改全部字段:
修改动态字段(只修改部分字段):
如果只修改部分字段,上个方法会将其他未修改字段变为null,解决:
加判断,并且使用标签,不再使用set关键字:避免末尾逗号的控制和都没修改的时候多余关键字set。
删除
删除单个:
删除要接收参数id
批量删除:
-
提交多个id到后台到数据库去删除,将id们封装成一个数组,方法不需要返回值
-
使用标签遍历数组中有几个id,每个id直接要用逗号隔开,使用关键字 separator
注意1: -
mybatis会将数组参数,封装为一个Map集合
- 默认:key=array,值=数组,即array=数组,所以collection的值默认为array
- 如果想改变,则接口处用@Param注解命名,在collection处使用
//接口
//public void deleteById(int[] ids);
public void deleteById(@Param("ids") int[] ids);
//mapper.xml
<delete>delete from 表名 where idin(//<foreach collection = "array" items="id">#{id}</foreach ><foreach collection = "ids" items="id">#{id}</foreach >);
</delete>
正确显示:
<delete id="deleteByIds">delete from tb_brand where idin<foreach collection="ids" item="id" separator="," open=" (" close=")" >#{id}</foreach>
</delete>
MyBatis参数传递
MyBatis接口方法中可以接收各种各样的参数,MyBatis底层对于这些参数进行不同的封装处理方式
- 单个参数:POJO类型、Map集合、Collection、List、Array……
- 多个参数:要使用@Param注解去定义名称与占位符名称保持一致。
例如:
1.分析参数在MyBatis底层的封装结构:
★多个参数:MyBatis将参数封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名。
内部:
map.put("arg0",参数值1);
map.put("param1",参数值1);
map.put("param2",参数值2);
map.put("arg1",参数值2);
直接使用:
若不使用@Param注解,也不使用内部参数,会报错提示:可用参数是……如图
在此是因为MyBatis提供了一个ParamNameResolver.java类来进行参数封装
ParamNameResolver类有getNameParams()的方法:
内部执行结果(此时例子中是有两个参数String username= “zhangsan”, String userpwd = “123”):
@Param的作用:
2.分析单个参数:
★单个参数:
- POJ0类型::直接使用,实体类属性名 和 sql中参数占位符 名称一致
- Map集合:直接使用,键名 和 参数占位符 名称一致
- Collection:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名。
map.put("arg0", collection()集合);
map.put("collection", collection集合);
- List:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名。
map.put("arg0", list()集合);
map.put("collection", list集合);
map.put("list", list集合);
- Array:封装为Map集合,可以使用@Param注解,替换Map集合中默认的arg键名。
map.put("arg0", 数组);
map.put("array", 数组);
- 其他类型:直接使用
总结:
二、注解完成增删改查
- 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句, Java 注解不仅力不从心,还会让你本就复杂的SQL语句更加混乱不堪。因此, 如果你需要做一些很复杂的操作,最好用XML来映射语句。
- 选择何种方式来配映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。换句话说, 永远不要拘泥于一种方式, 你可以很轻松的在基于注解和XML的语句映射方式间自由移植和切换。
本文标签: Mybatis
版权声明:本文标题:【MyBatis】 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1686524152h5754.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论