几个常见Mybatis面试试题

11 篇文章 0 订阅

1)#{}跟${}区别
#{}:#将传入的数据当成一个字符串表示,相当于

  PreparedStatement ps = conn.prepareStatement(sql);
  ps.setInt(1,id);

相对安全,防止sql的注入;
: 将传入的数据直接以sql语句显示,无法防止sql的注入,一般用于传入数据库对象

exp:
  1)#{}:
    select * from 数据库 where name=#{..};
    动态解析:
    select * from 数据库 where name=?;
    #被解析为占位符?
  2)${}
    select * from 数据库 where name=${..};
    解析:
    select * from 数据库 where name="hfz";

${ } 变量的替换阶段是在动态 SQL 解析阶段,而 #{ }变量的替换是在 DBMS 中。
2)mybatis的xml映射文件常用的几个标签
常见的select,insert,update还有<resultMap>,<paramterMap>,<sql>,<include>,<selectKey>;
9个动态的标签:trim,where,foreach,if,bind,choose,when,otherwise

choose,otherwise,when:提供一个choose,按顺序判断是否满足sql查询条件,有则结束,都不满足when中条件则执行otherwise,
类似switch,case,default。

3)xml映射文件与Dao接口里的方法,参数不同时,能否重载?接口的工作原理是什么?
Dao里面的方法是不能重载,工作原理是JDK动态代理,为Dao接口生成代理proxy对象,而此代理会拦截接口方法,而执行MappedStatement代表的
sql,然后将sql执行结果返回。

4)mybatis传参数的方式
1.单个参数
直接以String,或其他基本类型传参

public List<...> getName(String name);  

<select id="getNameList" parameterType="java.lang.String" resultType="...">

  select t.* from t_Name t where t.name= #{name}  

</select>  

其中方法名和ID一致,#{}中的参数名与方法中的参数名一直。

2.多个参数
按顺序传参

public list<...> getName(int id,String name);
<select id="getNameList" resultType="...">
    select * from T_name where id=#{0} and name=#{1}
</>

注:多参数不能使用parameterTyp

Map传参

<select id="selectTeacher" parameterType="Map" resultType="csc.hfz.Dao.Teacher">
  select * from Teacher where c_id=#{id} and sex=#{sex}
</select>

Param注解传参

public int stu(@Param("name")String name,@Param("id")int id);

<select id="selectS" resultType="Integer">
  select * from Teacher where name=#{name} and id=#{id}
</select>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值