1. mapper实现三种方式:
1.1 sqlSession直接执行对应的mapper.xml中的sqlID (只需要创建mapper.xml即可)
在mybatis配置文件中的映射方式如下
<!--映射的文件或接口 ,如果映射的文件 那么用/隔开 ,如果是接口或类要用 . 隔开 -->
<mappers>
<mapper resource="com/tledu/mapper/UserMapper.xml"/>
</mappers>
调用方式
session.insert("mapper.xml中的命名空间.sqlId",user);
1.2 注解,将注解sql加在接口方法的上面(只需要创建接口即可)
public interface IUserMapper{
@Insert(" insert into tt_user(username,password) values(#{username},#{password}) ")
void add(User user);
}
在mybatis配置文件中的映射如下:
<mappers>
<mapper class="com.tledu.mapper.IUserMapper"/>
</mappers>
调用方式
session.insert("接口全类名.方法名",user);
session.getMapper(IUserMapper.class).add(user);
1. 3 接口代理
需要创建mapper.xml和mapper对应的接口 要求接口名与mapper.xml名称一致 在xml中的命名空间是接口的全类名
在mybatis配置文件中的映射方式如下
<!--映射的文件或接口 ,如果映射的文件 那么用/隔开 ,如果是接口或类要用 . 隔开 -->
<mappers>
<mapper resource="com/tledu/mapper/UserMapper.xml"/>
</mappers>
调用方式
session.getMapper(UserMapper.class).add(user);
2. SqlSession简单介绍
2.1 SqlSession简单原理介绍
SqlSession提供select/insert/update/delete方法,在旧版本中使用使用SqlSession接口的这些方法,但是新版的Mybatis中就会建议使用Mapper接口的方法。
映射器其实就是一个动态代理对象,进入到MapperMethod的execute方法就能简单找到SqlSession的删除、更新、查询、选择方法,从底层实现来说:通过动态代理技术,让接口跑起来,之后采用命令模式,最后还是采用了SqlSession的接口方法(getMapper()方法等到Mapper)执行SQL查询(也就是说Mapper接口方法的实现底层还是采用SqlSession接口方法实现的)。
注:以上虽然只是简单的描述,但实际上源码相对复杂,下面将结合源码进行简单的介绍!
2.2 SqlSession重要的四个对象
1)Execute:调度执行StatementHandler、ParmmeterHandler、ResultHandler执行相应的SQL语句;
2)StatementHandler:使用数据库中Statement(PrepareStatement)执行操作,即底层是封装好了的prepareStatement;
3)ParammeterHandler:处理SQL参数;
4)ResultHandler:结果集ResultSet封装处理返回。