Mybatis 应用
1 Mybatis 入门与编码流程
2 mapper代理开发方式
3 全局配置文件
4 输入映射和输出映射
5 关联查询
6 延迟加载
7 动态SQL
8 Mybatis缓存
Mybatis mapper代理开发方式
一、 代理理解
Mybatis 使用了两种动态代理方式。
基于JDK的动态代理–针对有接口的类进行动态代理
基于CGLIB的动态代理–通过子类继承父类的方式去进行代理。
二、 XML实现方式
2.1开发方式
只需要开发Mapper接口(dao接口)和Mapper映射文件,不需要编写实现类。Mapper接口 本质是dao 接口,换了一种特殊的名字。
2.2 开发规范
类名 + 方法三要素 对应Mapper关系。
Mapper接口开发方式需要遵循以下规范:
1、 Mapper接口的类路径与Mapper.xml文件中的namespace相同。
2、 Mapper接口方法名称和Mapper.xml中定义的每个statement的id相同。
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相
同。
4、 Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType的类型相同。
2.3 代码实现
- Mapper 文件
<mapper namespace="com.kkb.mybatis.phase02.mapper.UserMapper">
<select id="findUserById" parameterType="int"
resultType="com.kkb.mybatis.phase01.po.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
- 编写dao代码 查询接口,UserMapper
package com.kkb.mybatis.phase02.mapper;
import com.kkb.mybatis.phase01.po.User;
public interface UserMapper {
User findUserById(int id);
}
3 测试类
public class Test2 {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws Exception {
// 加载全局配置文件(同时把映射文件也加载了)
String resource = "phase02/SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
// sqlsessionFactory需要通过sqlsessionFactoryBuilder读取全局配置文件信息之后
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() {
//创建UserMapper对象
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper对象的API
User user = mapper.findUserById(1);
System.out.println(user);
}
}
三、 注解方式
只需要编写mapper接口文件接口。
持久层不推荐写在代码里面,SQL最初写在配置文件, 语句有可能经常变动,所以放在配置文件中。
代码的设计原则对扩展开放,对修改关闭。?
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User findUserById(int id);
}
将 UserMapper 类所在文件放在Mappers 位置文件下
<mappers>
<package name="com.kkb.mybatis.phase02_1.mapper" />
</mappers>