概述
无论是让mybatis帮我们创建代理对象还是上一章中直接使用mybatis提供的CRUD方法,其本质都是得到jdbc的Connction对象,执行对应sql语句,最终封装结果集。
基于接口式
-
创建Java工程
-
加入jar包
mybatis-3.4.1.jar
mysql-connector-java-5.1.37-bin.jar -
创建数据库和对应的表
-
创建对应实体类
public class Emp {
private Integer empId;
private String empName;
private String empMail;
private Integer empGender;
private Integer deptId;
- 定义接口
public interface EmpDao {
/**
*查询全部的员工信息
**/
public List<Emp> selectEmp();
}
-
定义此接口的sql映射文件
要求:
创建位置:必须和持久层的接口在相同的包中。
名称:必须以持久层接口名称命名文件名,扩展名为 .xml
<?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 : 表示此xml是sql映射文件
namespace : 命名空间,表示此sql映射文件是和那个DAO接口对应的
-->
<mapper namespace="com.hekg.dao.EmpDao">
<!-- public List<Emp> selectEmp();
-->
<select id="selectEmp" resultType="com.hekg.entities.Emp">
select * from emp
</select>
</mapper>
- 编写 SqlMapConfig.xml 配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///ssm" />
<property name="username" value="root" />
<property name="password" value="a123456" />
</dataSource>
</environment>
</environments>
<!-- 注册sql映射文件 -->
<mappers>
<mapper resource="com/hekg/dao/EmpDao.xml" />
</mappers>
</configuration>
- 测试
@Test
public void testselectEmp() throws Exception {
// 获取全局配置文件文件的字节输入流
InputStream input = Resources.getResourceAsStream("SqlMapConfig.xm");
// 创建SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
// 获取SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// List<Emp> emps = sqlSession.selectList("com.wanbangee.dao.EmpDao.selectEmp",null);//非接口式编程
// 接口式编程
// ① 获取接口的实现类对象(通过动态代理完成)
EmpDao empDao = sqlSession.getMapper(EmpDao.class);
// ② 调用接口方法
List<Emp> emps = empDao.selectEmp();// 调用接口方法
System.out.println(emps);
sqlSession.close();
}
总结
以上就是接口是编程,在开发中,实际上也是全部使用接口式编程完成,有很多优点:
- 解耦合,java代码和sql已经分离了,而且数据访问层有实际的接口存在,整合Spring的时候,就可以将数据访问层加入到IOC容器中了
- 调用方法的时候,参数的类型不能任意了,必须符合接口定义的方法的入参的标准