${}和#{}的区别
- #{}给sql语句的占位符传值
- ${}直接将值拼接到sql语句上,存在sql注入的现象
什么时候用${}
需要先对sql语句拼接,然后再编译。
- 字符串排序字段
- 向SQL语句中拼接表名。比如根据日期生成日志表
批量删除
delete from car where in(${ids})
模糊查询
select from car where name concat('%',#{name},'%');
select from car where name '%${name}%'
select from car where name "%"#{name}"%"
别名
在MyBatis中配置。type为被取的名字,alias为取成什么
别名不区分大小写,命名空间不可以取别名
<typeAliases>
<typeAlias type="com.example.webapplication.pojo.Car" alias="abc"></typeAlias>
</typeAliases>
如果省略alias。别名默认为类的简名
下述例子中,别名为car/CAR
<typeAliases>
<typeAlias type="com.example.webapplication.pojo.Car" ></typeAlias>
</typeAliases>
如果类太多会写很多typeAlias标签
使用package可以将包下所有类起别名
<typeAliases>
<package name="com.example.webapplication.pojo"/>
</typeAliases>
Mapper
mappers下的mapper有3个属性可以选,主要为了找到sql的配置文件
- resource从类的根路径下开始找
- url绝对路径
- class值为接口的全限定名,并且对应的xml必须与接口保存同一文件下名字也要相同
如果配置文件太多需要写的标签太多可以用package来指定包其他用法与class类似
<mappers>
<package name="com.example.webapplication.Mapper"/>
</mappers>
插入数据时自动获取数据的主键
-
useGeneratedKeys表示使用自动生成的主键值
-
keyProperty表示将主键值赋值给对象的id属性
<insert id="insert" useGeneratedKeys="true" keyProperty="id"/>