1.引入
上一节课,我们使用MyBatis实现了对数据的查找功能。但是呢这里面有一个问题。什么问题呢,就是我们的这一个代码:
Admin Admin = openSession.selectOne("com.cn.entity.AdminMapper.getAdmById", 1);
//参数给的是Object类型的参数,也就是说可以传递任何形式的参数,如何我们传入了一个和数据库字段中类型不一致的参数。那么它不会报错。但是没有查询的结果。
为了解决这一个问题。MyBatis给我们提供了一个接口,使用这一个接口来把传入的参数和返回的结果进行一个包装。并且接口可以和我们的配置文件进行动态的绑定。
2.代码实现
(1).编写接口
package com.cn.dao;
import com.cn.entity.Admin;
public interface AdminMapper {
public Admin getAdminById(Integer id);
}
(2).配置文件和接口进行动态的绑定,在配置文件中进行设置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cn.dao.AdminMapper">
<!--
namespace:名称空间;指定为接口的全类名
id:唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Admin getAdmById(Integer id);
-->
<select id="getAdmById" resultType="com.cn.entity.Admin">
select id,username,password from admin where id = #{id}
</select>
</mapper>
(3).编写测试类
public class MyBatisTest {
public SqlSessionFactory getSqlSessionFactory() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
return new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() throws IOException {
// 1、获取sqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
// 2、获取sqlSession对象
SqlSession openSession = sqlSessionFactory.openSession();
try {
// 3、获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
AdminMapper mapper = openSession.getMapper(AdminMapper.class);
Admin Admin = mapper.getAdminById(1);
System.out.println(mapper.getClass());
System.out.println(Admin);
} finally {
openSession.close();
}
}
}
(4).实现结果测试
使用了接口式编程以后,我们有了更好地的解耦和数据校验。
3.HelloWorld案例小总结
(1).接口式编程的流程和注意事项
1、接口式编程
原生: Dao ====> DaoImpl
mybatis: Mapper ====> xxMapper.xml
2、SqlSession代表和数据库的一次会话;用完必须关闭;
3、SqlSession和connection一样它都是非线程安全。每次使用都应该去获取新的对象。
也就是说:private SqlSession sqlSession;(错误,非线程安全,多线程环境会产生资源的竞争)
SqlSession openSession = sqlSessionFactory.openSession();(正确)
4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml进行绑定)
AdminMapper mapper = openSession.getMapper(AdminMapper.class);
注意使用的是接口的对象,而不是实体的对象。
5、两个重要的配置文件:
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等...系统运行环境信息
sql映射文件(非常重要):保存了每一个sql语句的映射信息:
将sql抽取出来。
(4).代码
链接:https://pan.baidu.com/s/1do75zUmp_sErMfqfNXbtpQ
提取码:rwsj