Mapper动态代理方式
Mapper接口开发方法只需要程序员Mapper接口(相当于dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象(相当于dao实现类),然后可以通过该代理对象进行增删改查的操作。区别是传统的编写方式dao的实现类我们需要自己创建和编写,而使用Mybatis框架的动态代理方式,我们只需要编写接口,实现类由Mabits为我们自动生成(即动态代理对象)。
Mapper接口的动态代理实现,需要遵循以下规范:
- 映射文件中的命名空间(名称控制)与Mapper接口的全路径一致
- 映射文件中的statement的Id与Mapper接口的方法名保持一致
- 映射文件中的statement的ResultType必须和mapper接口方法的返回类型一致(即使不采用动态代理,也要一致)
- 映射文件中的statement的parameterType必须和mapper接口方法的参数类型一致(不一定,该参数可省略)
测试类
public class UserMapperTest {
private UserMapper userMapper;
@Before
public void setUp() throws Exception {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);//配置自动事务提交
userMapper = sqlSession.getMapper(UserMapper.class);//相当于userDao = new UserDaoImpl(sqlSession);
}
@Test
public void queryUserById() {
User user = userMapper.queryUserById(1l);
System.out.println(user);
}
}
mybatis-config.xml配置
1.加载资源文件
<properties resource="jdbc.properties"></properties>
2.开启驼峰
<settings>
<!--开启驼峰,默认是false-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
驼峰的作用
例子:
POJO类
数据库
3.配置别名
第一种方式:
<typeAliases>
<typeAlias type="test.mybatis.pojo.User" alias="User"/>
<!--自动扫描包中pojo类,将其类名当做别名-->
<package name="test.mybatis.pojo"/>
</typeAliases>
上面的方式比较麻烦我们必须一个一个配置别名所以还有第二种方式:
<typeAliases>
<!--自动扫描包中pojo类,将其类名当做别名-->
<package name="test.mybatis.pojo"/>
</typeAliases>
别名作用:
以前:
<select id="queryUserList" resultType="test.mybatis.pojo.User">
select * from tb_user
</select>
现在:
<select id="queryUserList" resultType="User">
select * from tb_user
</select>
Mapper XML 文件(映射文件)
1.Insert编写插入语句
id:插入语句的唯一标识
parameterType:插入语句的参数类型,使用动态代理之后,需要和mapper接口中的参数类型一致,可以省略。
useGeneratedKe