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实现。

原文地址:https://www.cnblogs.com/youngchaolin/p/10353754.html

时间: 2024-07-30 14:28:50

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

Spring集成MyBatis的使用-使用Mapper映射器

Spring集成MyBatis使用 前面复习MyBatis时,发现在测试时,需要手动创建sqlSessionFactory,Spring将帮忙自动创建sqlSessionFactory,并且将自动扫描Mapper映射器 (1)集成步骤 step1 导包: spring-webmvc, mybatis, mybatis-spring, dbcp, ojdbc, spring-jdbc, junit, mysql相关等 <dependencies> <!--导入junit测试包-->

MyBatis—02—代替Dao层的mapper映射文件;MyBatis配置文件详解

一. Mapper 映射文件 在JDBC中,我们会把访问数据库的代码放在Dao层,也就是建一个com.dao的package: 但在 MyBatis 中, 我们的包名推荐使用 mapper ,  并且我们只需要写一个映射配置文件即可, 不需要写接口和实现类了. UserMapper.xml, 用于定义要执行的 SQL 语句, 同时设定返回结果的类型. 1.编写mapper层的xml映射文件 2. 在MyBatis核心配置文件中添加 mapper 扫描 3.测试 二. MyBatis 配置文件详解

Mybatis学习系列(二)Mapper映射文件

Mapper映射文件,作用是用来配置SQL映射语句,根据不同的SQL语句性质,使用不同的标签,mapper文件中常用的标签有<iselect>.<insert>.<update>.<delete> 常见增删改查示例 <!-- namespace:此处使用包名+文件名 的形式 --> <mapper namespace="com.sl.mapper.ProductMapper"> <!--select – 映射

MyBatis数据库连接的基本使用-补充

补充1  MyBatis使用过程中,返回值类型可能是Map,不一定是实体类 返回查询结果也可以是一个Map,不一定是实体类 (1)mybatis会先将查询结果返回为一个map,字段名作为key,字段值作为value,保存在map中,后面再转化为实体类 (2)如果不写实体类,就返回一个Map,想得到其中的字段值,需要调用map.get()方法来获取值,缺点就是需要先知道字段名 EmpMapper.xml中配置: <!-- 返回map类型的结果 --> <!-- 也可以将返回结果简写成map

Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了.如果你愿意,你也可以同时使用基于XML和基于注解的映射语句. 本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @SelectProvi

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea

深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete[转]

上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置>简单地给mybatis的配置画上了一个句号.那么从本篇文章开始,将会介绍mapper映射文件的配置, 这是mybatis的核心之一,一定要学好.在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, insert, update, delete, cache, cache-ref, resultMap, sql . 本篇文章将简单介绍 in