zoukankan      html  css  js  c++  java
  • 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实现。

  • 相关阅读:
    Ubuntu下将python从2.7升级到3.5
    Python:IOError: image file is truncated 的解决办法
    Google Hack
    Python:将utf-8格式的文件转换成gbk格式的文件
    Python:字符编码详解
    IIS下使用appcmd批量搭建网站
    C#:注册机的实现【提供源代码下载】
    C#:实现快捷键自定义设置
    C#:如何解决WebBrowser.DocumentCompleted事件的多次调用
    C#:WebBrowser中伪造referer,为何对流量统计器无效?
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/10353754.html
Copyright © 2011-2022 走看看