7.MyBatis Mapper动态代理

 

Mapper动态代理

接口中的方法名与SQL映射文件的映射id(<select id="selectStudentById">)相同

StudentDao.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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">
<!-- namespace属性的值为接口的全限定名 -->
<mapper namespace="com.node.dao.StudentDao">

<select id="selectStudentById" resultType="map">
select * from student where id=#{xxx}
</select>

<insert id="insertStudent">
insert into student(name,age) values(#{name},#{age})
</insert>
</mapper>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

public class Main {
public static void main(String[] args) {
SqlSession session=SqlSessionUtil.getSession();
StudentDao dao=session.getMapper(StudentDao.class);

// select
System.out.println(dao.selectStudentById(1L));

// insert
Student student=new Student();
student.setName("abd");
student.setAge(20);
System.out.println(dao.insertStudent(student));
session.commit();

SqlSessionUtil.close(SqlSessionUtil.getSession());
}
}

log4j.properties

1
log4j.logger.com.node.dao.StudentDao=trace,console

方法的参数列表只能有一个参数,参数为基本类型对象,实体类对象,或者Map

MyBatis根据方法名调用对应的SQL映射,根据方法的参数列表设置语句中的预编译,
进行查询时,会根据方法返回值调用selectOne()方法或selectList()方法。

当接口方法的返回值类型为List时,MyBatis会执行selectList()方法,将SQL映射的每条记录的封装体添加到List中返回。

当接口方法的返回值类型是Map,实体类,包装类,基本数据类型时,MyBatis会执行selectOne(),将SQL映射的指定每条记录的封装体直接进行返回,要求数据封装对象与返回值类型相同。

当接口的方法对应的SQL映射是添加,修改,删除时,接口方法返回值类型为void或者整数类型,整数类型表明影响了多少条记录。