1、接口式编程
原生:一个dao对应一个daoImpl
mybatis:一个xxxmapper接口对应一个xxxmapper.xml
2、SqlSession代表和数据库的一次会话,用完必须关闭
3、SqlSession和Connection一样都是线程不安全的(不能直接创建private SqlSession属性),每次使用都要创建新的对象
4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象
5、两个重要的配置文件
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等系统运行环境
sql映射文件:保存了每一个sql语句的映射信息
创建实体类Employee.java
public class Employee implements Serializable{
private Integer id;
private String name;
private String sex;
private String email;
private Department dept;
public Employee() {
super();
}
public Employee(Integer id, String name, String sex, String email) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.email = email;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", sex=" + sex + ", email=" + email + "]";
}
}
创建接口EmployeeMapper .java
public interface EmployeeMapper {
// 和EmployeeMapper文件绑定,指定了传入的参数只能是Integer类型,返回值为Employee类型
public Employee getEmpById(Integer id);
}
创建EmployeeMapper.xml映射文件
PS:若使用接口式编程,接口文件EmployeeMapper.java和映射文件EmployeeMapper.xml必须同名,且映射文件EmployeeMapper.xml名称空间namespace必须指定为接口文件EmployeeMapper.java的路径
<?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="dao.EmployeeMapper">
<!-- public Employee getEmpById(Integer id) -->
<select id="getEmpById" resultType="Employee">
select * from employee where id = #{id}
</select>
</mapper>
测试类
@Test
public void test1() throws IOException{
// SqlSession session = getSqlSessionFactory().openSession();
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try{
// 创建mapper对象,mybatis会为这个接口生成一个代理对象
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
//添加
// Employee employee = new Employee(null,"蜘蛛侠","男","123@qq.com");
// int result = mapper.addEmp(employee);
// System.out.println("获取到的主键值为:"+employee.getId());
//修改
// Employee employee = new Employee(1,"张三","男","123@qq.com");
// mapper.updateEmp(employee);
//删除
// boolean result = mapper.deleteEmp(7);
//查询
Employee employee = mapper.getEmpById(1);
//打印mapper和employee
System.out.println(mapper);
System.out.println(employee);
session.commit();
}
finally{
session.close();
}
}
测试结果
可以看到打印mapper的结果为org.apache.ibatis.binding.MapperProxy@26b3fd41,这就是一个代理对象