笔记要点
/**接口式编程: * 1. 原生: Dao 接口-->Dao接口的实现类 * mybatis: Mapper --> 有一个与之对应的 XXMapper.xml * 2. SqlSession * 代表与数据库的一次会话,用完必须关闭资源; *3.SqlSession 和connection 一样都是非线程安全,不能声明为全局变量; * 每次使用都需要重新生命. * 4.mapper接口没有实现类, 但是mybatis 会为这个接口生成一个代理对象: * (需要先将接口和XML文件进行绑定!) * EmployeeMapper empMapper=openSession.getMapper(EmployeeMapper.class); * 5.两个重要的配置文件: * mybatis的全局配置文件: 包含数据库连接池信息,事物管理器信息,系统文件的信息..... * SQL映射文件: 保存了每一个SL语句的映射信息, */
出错分析
重新组织了工程结构后, mapper.xml内的内容改为: <select id="getEmpById" resultType="com.bean.Employee">...</select>. resultType 记得更改为当前DAO的src下的类的路径!
工程重新组织
本节测试代码 Test_tp04
package com.test; import com.bean.*; import com.dao.*; import org.apache.*; import java.io.IOException; import java.io.InputStream; public class Test_tp04 { //创建一个模板,直接返回一个新建的SqlSessionFactory public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream=Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test //第四节测试,测试接口式编程 public void test01() throws IOException{ //1.获取sqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //调用模板的方法 //2.获取一个SqlSession对象 SqlSession openSession = sqlSessionFactory.openSession(); try { //3.获取接口的实现类 EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class); Employee employee = mapper.getEmpById(1); System.out.println(mapper.getClass()); System.out.println(employee); } finally { openSession.close(); } } }
测试demo结果展示
DEBUG 11-27 12:12:24,463 ==> Preparing: select id,last_name lastname,gender,email from tbl_employee where id = ? (BaseJdbcLogger.java:145) DEBUG 11-27 12:12:24,479 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145) DEBUG 11-27 12:12:24,495 <== Total: 1 (BaseJdbcLogger.java:145) class com.sun.proxy.$Proxy4 Employee{id=1, lastname='tom', email='598@qq.com', gender='0'}