mybatis
- 动态sql
<foreach collection="要遍历的集合" open="起始符号" close="结束符号" separator="分隔符" item="临时变量名">
<if test="条件">sql片段</if>
<where> 去掉多余and
<set> 去掉多余的,
-
分页
2.1) 物理分页 使用sql语句进行分页(mysql limit), 分页sql不通用, 效率高
2.2) 逻辑分页 全部查询,sql简单通用, 效率低,只适用于数据量少的情况
sqlSession.selectList(“sql id名”, new RowBounds(下标, 大小)); -
数据库与实体类不一致的情况
first_name
firstName
方法1: 在select语句中使用列别名, 只要让别名与属性对应
方法2:
<select resultMap="id值" ...>
<resultMap id="值">
<id column="主键列名" property="属性名">
<result column="列名" property="属性名">
</resultMap>
- 连接查询的映射(复杂的结果映射)
select … from product p inner join category c on p.category_id=c.id;
class Product {
id name…
private Category category; // id,name… 关系属性
}
class Category {
}
<resultMap id="值" type="Product">
<id column="主键列名" property="属性名">
<result column="列名" property="属性名">
<assoiation property="category" javaType="Category">
<id>
<result>
</assoiation>
</resultMap>
-
插入数据时
可以用来把自增列生成的主键值赋值给实体类的属性 -
#{} ${}
#{}
生成? 占位符,${}
是直接拼接字符串,有注入攻击风险
#{}
不能运算,${}
可以运算
#{}
只能替换值,不能替换(表名,列名,关键字), 而${}
都可以