列举SQL映射文件的几个顶级元素
mapper:映射文件的跟元素节点,只有一个属性namespace(命名空间).其作用如下:
用于区分不同的mapper,全局唯一
绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完整限定名查找到对应的mapper配置文件来执行SQL语句。因此namespace的命令必须要跟接口同名
cache:配置给定命名空间的缓存
cache-ref:从其他命名空间引用缓存配置
resultMap:用来描述数据库结果集和对象的对应关系
sql:可以重用SQL块,也可以被其他语句引用
insert:映射插入语句
resultType和resultMap的区别是什么
返回类型可以用resultType也可以用resultMap
resultType是直接表示返回类型
resultMap则是对外部ResultMap的引用
两者不能同时存在
MyBatis多参数入参如何处理?有几种方式
一、#{参数索引}
1. DAO层
Mapper接口类
User logon(String user_name,Stringpassword);
Mapper.xml文件
<select id="logon" resultMap="UserResultMap" >
select
<include refid="Base_Column_List"/>
from sys_user
WHERE user_name = #{0} and password = #{1}
</select>
这里用的是#{参数索引}
2. Service层
Service接口类
User logon(String user_name,String password);
Service实现类
@Override
public User logon(String user_name, String password) {
return userMapper.logon(user_name,password);
}
二、Map传参数
1. DAO层
Mapper接口类
User logon(Map map);
Mapper.xml文件
<select id="logon" resultMap="UserResultMap" >
select
<include refid="Base_Column_List"/>
from sys_user
where user_name = #{user_name,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}
</select>
这里接口方法传入的map
2. Service层
Service接口
User logon(String user_name,String password);
Service实现类
@Override
public User logon(String user_name, String password) {
Map paramMap=new HashMap();
paramMap.put("user_name",user_name);
paramMap.put("password",password);
User user=userMapper.logon(paramMap);
return user;
}
Service层实现了要将参数与map绑定
三、注解方法传参数
1. DAO层
Mapper接口类
User logon(@Param("user_name")String user_name,@Param("password")String password);
Mapper.xml文件
<select id="logon" resultMap="UserResultMap" >
select
<include refid="Base_Column_List"/>
from sys_user
where user_name = #{user_name,jdbcType=VARCHAR} and password = #{password,jdbcType=VARCHAR}
</select>
这里主要注意接口传入参数前面加了@Param注解
2. Service层
Service接口
User logon(String user_name,String password);
Service实现类
@Override
public User logon(String user_name, String password) {
return userMapper.logon(user_name,password);
}
mapper元素的namespace属性的作用是什么
namespace决定了action的访问路径,默认为"",可以接受所有路径的action
不同的SQL映射文件,元素的ID必须不同吗
谈谈你对association和collection元素的理解
public class A{
private B b1;
private List<B> b2;
}
在映射b1属性时用association标签, 映射b2时用collection标签,分别是一对一,一对多的关系