#{}和${}的区别是什么?
实体类中的属性名和表中的字段名不一致怎么处理?
模糊查询like该怎么写
如何执行批量插入
如何获取自动生成的主键
在Mapper中如何传递多个参数
MyBatis中动态SQL有哪些(代码示例)
MyBatis实现一对一和一对多查询(代码示例)
MyBatis是否有延迟加载,如果有如何实现
MyBatis的一级缓存和二级缓存测试(代码示例)
MyBatis如何根据XML文件和Mapper接口生成Mapper对象()
1:#{}是预编译处理,$ {}是字符串替换。
使用 #{} 可以有效的防止SQL注入,提高系统安全性。
2:通过在查询的SQL语句中定义字段名的别名的方式,让字段名的别名和实体类中的属性名一致,这样就可以实现实体类属性和表字段一一对应;
通过来映射字段名和实体类属性名的对应关系
3:CONCAT(’%’,#{question},’%’)
4:
insert into names (name) values (#{value})
然后在service里面循环5:useGeneratedKey设置为true
把 keyColumn 设置为数据库的自增长列名
把 keyProperty 设置为java类接收自增长主键的属性名
6:绑定param或者添加到集合里面
7:
if: 根据条件判断
choose、when、otherwise: 组合使用,选择多个条件中的一个
where: where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除
trim: 定制类似 where 标签的功能
set: 用于动态包含需要更新的列,忽略其它不更新的列
foreach: 对集合进行遍历
bind: 允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文
script: 要在带注解的映射器接口类中使用动态 SQL,可以使用 script 元素
8:
<collection property="tKey" ofType="com.woniuxy.entity.TKey">
<result column="kid" property="id"/>
<result column="kname" property="name"/>
<result column="block_id" property="blockId"/>
</collection>
<association property="tBlock" javaType="com.woniuxy.entity.TBlock">
<result column="bid" property="id"/>
<result column="bname" property="name"/>
<result column="key_id" property="keyId"/>
</association>
public class TBlock {
private int id;
private String name;
private int keyId;
private List<TKey> tKey;
...
public class TKey {
private int id;
private String name;
private int blockId;
private TBlock tBlock;
```...
一把锁对应多个钥匙,但是一个钥匙就能开一把锁,这个案例很经典,大家可以试一试
9: mybatis默认没有开启延迟加载,需要在SqlMapConfig.xml中setting配置
```java
<settings>
<!-- 打开延迟加载的开关 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 将积极加载改为消极加载,即延迟加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
10:同一个sqlsession的情况下写一个查询语句,然后用mapper调用这个方法进行查询,写三条查询语句但是请求只发送了一次,一级缓存是默认开启的,二级缓存需要手动开启