目录
1.Mapper接口开发规范
mapper接口需要遵循以下几点规范:
-
创建一个接口,接口的全路径要和mapper文件的namespace值相同
-
mapper文件中的每一条sql语句都要对应接口中的一个方法,并且sql的id值和方法名要相同
-
接口中方法的返回值类型要和sql语句上的resulttype值相同(若返回集合,resultType指定为集合中的泛型即可)
-
接口中的参数类型要和sql语句上的参数类型相同
2. 一个例子
首先有这样一张emp表,里面包含有列:id,name,job,salary。
然我我们创建和表对应的一个类:
package com.tedu;
public class Emp {
private Integer id;
private String name;
private String job;
private Integer salary;
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public String getJob() {
return job;
}
public Integer getSalary() {
return salary;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setJob(String job) {
this.job = job;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Emp{" +
"id=" + id +
", name='" + name + '\'' +
", Job='" + job + '\'' +
", salary=" + salary +
'}';
}
}
接下来有EmpMapper.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 namespace="com.tedu.EmpMapper">
<!--
select标签
update标签
delete标签
insert标签
-->
<!-- resultType结果类型-->
<select id="findAll" resultType="com.tedu.Emp">
select * from emp;
</select>
</mapper>
接口文件EmpMapper
package com.tedu;
import java.util.List;
public interface EmpMapper {
public List<Emp> findAll();
}
执行示例:
@Test
public void findAll() throws IOException {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory factory= new SqlSessionFactoryBuilder().build(in);
SqlSession session =factory.openSession();
EmpMapper mapper =session.getMapper(EmpMapper.class);
List<Emp> list= mapper.findAll();
for(Emp e:list){
System.out.println(e);
}
}
3.执行过程解释
seeion.getMapper方法,传入的是表示EmpMapper接口的class对象,在框架底层,可以通过Class对象,为接口提供一个实现类,并基于实现类,创建一个实例,也就是EmpMapper接口的子类实例
通过mapper接口的子类实例调用findAll方法,findAll方法可以获取当前接口的全路径+方法名,有于接口全路径+方法名=namespace+sql的id值,所以,可以找到要执行的SQL语句,执行后处理结果并返回