Mybatis学习--12.Mybatis小技巧
MyBatis小技巧
‘#{}’和’${}’
- 两者均能用于sql语句中
- ‘#{}’:底层使用的是preparedStatement,先进行sql语句的编译,再给sql语句的?传值,可以避免sql注入
- ‘${}’:底层使用的是Statement,先对sql语句进行拼接,再对sql语句进行编译,存在sql注入的问题
- 注意:#{}和${}用于sql语句中,非sql语句没有必要使用。
优先使用’#{}‘,避免sql注入的问题。
使用#{}取值时,取出来的值默认会带 ‘’ .
使用${}的情况
将sql语句中的关键字进行传输,就要使用’${}’,比如根据用户指定的排序规则(asc,desc)进行数据查询。如果使用’#{asc}‘,那么在sql语句中出现的是’asc’,是一个字符串,而采用后者,会将参数直接拼接到sql语句上,那么出现的就是asc了。
批量删除
- 批量删除的方法
- delete from xxx where xx = xx or xx = xx;
- delete from xxx where xx in(xx,xx,xx);
- 当使用第二种方法时,我们就可以通过${xx,xx,xx}将参数传入。
模糊查询
- select * from xxx where xx like …
- …号处可以用以下值替代
- ‘${xxx}’
- “%”#{xxx}”%”
- concat(‘%’,#{xxx},’%’)
别名
我们可以在mybatis的核心配置文件中给某个类型起别名,可以使用该别名对所有使用该类型的地方进行替换
<typeAliases> <!--type表示要起别名的类型 alia表示起的别名。该alias属性可以省略不写,这种情况下,该类型的别名就是这个类的简名。比如:com.deng.mybatis.pojo.Car的简名就是car,不区分大小写--> <typeAlias type = "" alias=""> <!--还可以对包起别名,起了别名的包会自动对其内部的类起别名,别名就是这些类的简名,不区分大小写--> <package name="com.deng.mybatis.pojo"> </typeAliases>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
* 所有别名不区分大小写,并且namespace不能使用别名。
* mybatis-config.xml中的mapper标签
* mapper标签有3个属性,均用来指定sql配置文件的路径
* resource:从类的根路径下开始查找资源,sql配置文件必须放在类路径下
* url:以绝对路径的方式定位资源,可以将sql配置文件放在任意位置。使用file \ \ \ :+路径 格式,这种方式很少用,因为可移植性太差。
* class:**value值为接口的全限定名(带包名的那种)。思考:这个属性的作用是用来关联mapper.xml文件的,提供接口的全限定名有什么用?表示从该接口所在的包下查找mapper.xml文件,在这种情况下,sql配置文件必须位于接口所在的包下并且名称要和接口名对应。因此我们也可以使用别名技巧,自动给接口起别名**
* ```xml
<mappers>
<!-- <mapper class="com.deng.mybatis.mapper.CarMapper"></mapper>-->
<package name="com.deng.mybatis.mapper"/>
</mappers>
注意:在IDEA中resources和java中创建的文件都位于类的根路径下。如果想要在resources下创建多级目录,必须按照com/deng/mybatis的方式,而不是com.deng.mybatis。后者是创建包的方法,而只能在java中创建包。
插入语句时使用自动生成的主键
<!--只需在sql配置文件的insert标签中添加以下属性即可。useGeneratedKey="true"表示需要使用自动生成的主键。keyProperty属性表示将生成的主键封装--> <insert id="" useGeneratedKeys="true" keyProperty="id"> ... </insert>
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 dch'blog!
