MyBatis数据库连接的基本使用-补充Mapper映射器

知是行的主意,行是知的功夫。这篇文章主要讲述MyBatis数据库连接的基本使用-补充Mapper映射器相关的知识,希望能为你提供帮助。
补充 Mapper映射器的使用:
Mapper映射器,google添加。Mapper映射器是将mapper.xml中配置的sql id,parameterType和resultMap按照规则一一映射到接口中,后续MyBatis创建完接口实例后,可以直接调用对象中的方法操作数据库,其底层还是调用了sqlSession的 API
(1)什么是Mapper映射器
符合映射文件要求的一个接口:Mybatis会生成符合该接口要求的对象
(2)接口要求
a 方法名要与mapper.xml配置文件中sql的id一致
b 方法的参数要与parameterType一致
c 方法的返回类型,要与resulType一致
d 映射文件的命名空间nameSpace要等于接口的完整名字
mapper.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="dao.EmployeeDAO"> < !-- 命名空间等于接口的完整名字,包名加接口名 --> < !-- id要求唯一 parameterType:填写实体类的完整名字 --> < !-- 插入语句 --> < insert id="save" parameterType="entity.Employee"> INSERT INTO T_TABLE VALUES(2,#{name},#{age}) < /insert> < !-- 根据id查询语句 --> < select id="findByID" parameterType="int" resultType="entity.Employee"> SELECT * FROM T_TABLE WHERE ID=#{id} < /select> < !-- 查询所有结果,不需要参数类型 --> < select id="findAll" resultType="entity.Employee"> SELECT * FROM T_TABLE < /select> < !-- 修改操作 --> < update id="modify" parameterType="entity.Employee"> UPDATE T_TABLE SET NAME=#{name},AGE=#{age} WHERE ID=#{id} < /update> < !-- 删除操作 --> < delete id="delete" parameterType="int"> DELETE FROM T_TABLE WHERE ID=#{ididid} < /delete> < !-- 返回map类型的结果 --> < !-- 也可以将返回结果简写成map,map即为java.util.Map --> < select id="findOne" parameterType="int" resultType="java.util.Map"> SELECT * FROM T_TABLE WHERE ID=#{id} < /select> < !-- 使用resultMap解决表的字段名和实体类的属性名不一致的情况 --> < resultMap id="resultMapID" type="entity.NewEmployee"> < result property="empID" column="id" /> < result property="empName" column="name" /> < result property="empAge" column="age" /> < /resultMap> < select id="findOneByNewEmp" parameterType="int" resultMap="resultMapID"> SELECT * FROM T_TABLE WHERE ID=#{id} < /select> < /mapper>

EmployeeDAO接口中的配置:
import java.util.List; import java.util.Map; import entity.Employee; import entity.NewEmployee; /** * Mapper映射器 * @author*/ public interface EmployeeDAO { //将一条数据插入数据库 public void save(Employee e); //查询所有结果 public List< Employee> findAll(); //根据id来查找结果 public Employee findByID(int id); //修改操作 public void modify(Employee e); //删除操作 public void delete(int id); //返回类型为map的查询,根据id来查询 public Map findOne(int id); //当表的字段名和实体类的属性名不一致时,根据id来查询 public NewEmployee findOneByNewEmp(int id); }

测试代码:
import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Before; import org.junit.Test; import dao.EmployeeDAO; import entity.Employee; import entity.NewEmployee; public class testMapper { //先拿到sqlSession private SqlSession session; @Before public void init() { String config="SqlMapConfig.xml"; SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder(); //读取SqlMapConfig.xml文件,预编译sql写入map SqlSessionFactory ssf=ssfb.build(testMapper.class.getClassLoader().getResourceAsStream(config)); session=ssf.openSession(); }//测试mapper映射器 插入记录 @Test public void test1() { //mybatis会返回一个符合mapper映射器要求的对象 EmployeeDAO dao=session.getMapper(EmployeeDAO.class); Employee e=new Employee(); e.setName("qiaofeng"); e.setAge(38); //调用对象的插入方法 dao.save(e); //提交事务s session.commit(); session.close(); } /** * 查询所有员工操作 */ @Test public void test2() { //mybatis会返回一个符合mapper映射器要求的对象 EmployeeDAO dao=session.getMapper(EmployeeDAO.class); List< Employee> list=dao.findAll(); System.out.println(list); session.close(); } /** * 根据ID来查找员工信息 */ @Test public void test3() { EmployeeDAO dao=session.getMapper(EmployeeDAO.class); Employee emp=dao.findByID(2); System.out.println(emp); session.close(); } /** * 修改操作 */ @Test public void test4() { EmployeeDAO dao=session.getMapper(EmployeeDAO.class); Employee emp=dao.findByID(2); emp.setAge(emp.getAge()*2); //修改 dao.modify(emp); session.commit(); session.close(); } /** * 删除操作 */ @Test public void test5() { EmployeeDAO dao=session.getMapper(EmployeeDAO.class); dao.delete(5); session.commit(); session.close(); } }

总结:
使用Mapper映射器后,测试方法中不再直接使用session的API,而是调用实现接口的对象方法,方法名就是以前session API方法中传入的sql id。
通过对像的方法名,找到对应命名空间下的同名id下对应的sql,然后执行,底层依然是sqlSession的API实现。
【MyBatis数据库连接的基本使用-补充Mapper映射器】 

    推荐阅读