Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可,MyBatis会自动为mapper接口生成动态代理实现类。

一、开发规范

  1、mapper接口的全限定名要和mapper映射文件的namespace的值相同

  2、mapper接口的方法名称要和mapper映射文件中的statement的id相同

  3、mapper接口的方法参数一般只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致

    (传一个参数,可以直接以键值对方式匹配参数;如果想传多个参数,statement中不能写parameterType,SQL语句使用#{0}、#{1}```等形式占位符或者接口方法中使用注解@Param("username") String username形式

  4、mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致

二、全局配置文件通过mapper的resource属性引入mapper映射文件

1、编写mapper接口

  1. package com.hjp.mapper;
  2.  
  3. import com.hjp.po.User;
  4.  
  5. public interface UserMapper {
  6.  
  7. User findUserById(int id) throws Exception;
  8.  
  9. void insertUser(User user) throws Exception;
  10.  
  11. }

2、编写mapper映射文件,注意namespace为接口的全限定名

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.hjp.mapper.UserMapper">
  6. <select id="findUserById" parameterType="int" resultType="com.hjp.po.User">
  7. SELECT * FROM USER WHERE id=#{id}
  8. </select>
  9. <insert id="insertUser" parameterType="com.hjp.po.User">
  10. INSERT INTO USER (username,sex,birthday,address) VALUES (#{userName},#{sex},#{birthday},#{address})
  11. </insert>
  12. </mapper>

3、将映射文件加入全局配置文件

4、测试代码

  1. import com.hjp.mapper.UserMapper;
  2. import com.hjp.po.User;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.Before;
  8. import org.junit.Test;
  9.  
  10. import java.io.InputStream;
  11. import java.util.Date;
  12.  
  13. public class MapperDemoTest {
  14.  
  15. private SqlSessionFactory factory;
  16.  
  17. @Before
  18. public void setUp() throws Exception {
  19. String resource="sqlMapConfig.xml";
  20. InputStream inputStream= Resources.getResourceAsStream(resource);
  21. factory=new SqlSessionFactoryBuilder().build(inputStream);
  22. }
  23.  
  24. @Test
  25. public void findUserById() throws Exception {
  26. SqlSession session=factory.openSession();
  27. //创建mapper代理对象
  28. UserMapper userMapper=session.getMapper(UserMapper.class);
  29. User user=userMapper.findUserById(1);
  30. System.out.println(user);
  31. session.close();
  32. }
  33.  
  34. @Test
  35. public void insertUser() throws Exception {
  36. SqlSession session=factory.openSession();
  37. UserMapper userMapper=session.getMapper(UserMapper.class);
  38. User user=new User();
  39. user.setUserName("流水年华");
  40. user.setSex("1");
  41. user.setBirthday(new Date());
  42. user.setAddress("bj");
  43. userMapper.insertUser(user);
  44. session.commit();
  45. session.close();
  46. }
  47.  
  48. }

三、全局配置属性设置

1、properties,如设置数据库配置信息

db.properties文件内容如下

在全局配置文件中使用如下

2、typeAliases定义别名

1)单个别名定义,全局配置文件sqlMapConfig.xml添加全局属性如下

在mapper映射文件UserMapper.xml中可以修改根据ID查询用户配置如下

2)批量别名定义,全局配置文件如下

3、mapper四种映射器配置方式(注意在IDEA Maven项目下,3)和4)配置有问题,因为IDEA Maven项目默认不会把src下除Java外的文件打包进class文件中,详见···

1)使用相对路径,如前面例子中一样

  1. <mapper resource="mapper/UserMapper.xml"></mapper>

2)使用绝对路径(不推荐)

  1. <mapper url="file:///F:\IDEAWeb\mybatisdemo\src\main\resources\mapper\UserMapper.xml"></mapper>

3)使用mapper接口全限定名,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下

  1. <mapper class="com.hjp.mapper.UserMapper"></mapper>

4)注册指定包下所有映射文件,但这要求映射文件名称要和接口名称相同,并且和接口在同一个包下(推荐),如下

  1. <package name="com.hjp.mapper"/>

MyBatis入门程序之Mapper代理方式的更多相关文章

  1. MyBatis入门程序之mapper映射文件常用配置命令

    1.ResultMap高级结果映射 如果查询出的列名和属性名不一致,可以通过ResultMap做映射,放在statement的输出类型中 如下: 2.动态SQL,使用各种动态标签实现动态拼接sql,常 ...

  2. mybatis_03_ mapper代理方式实现MyBatis的Dao编写

    不是用mapper代理方式也能够实现,但是不推荐 Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可.Mybatis会自动的为mapper接口生成动态代理实现类. 不 ...

  3. Mybatis入门程序

    作为一个java的学习者,我相信JDBC是大家最早接触也是入门级别的数据库连接方式,所以我们先来回忆一下JDBC作为一种用于执行SQL语句的Java API是如何工作的.下面的一段代码就是最基本的JD ...

  4. MyBatis入门程序(基于XML配置)

    创建一个简单的MyBatis入门程序,实现对学生信息的增删改查功能(基于XML配置) 一.新建一个Java工程,导入MyBatis核心jar包.日志相关的jar包以及连接Oracle数据库所需驱动包, ...

  5. mapper代理方式开发

    使用mapper代理方式开发: 需要编写mapper接口,UserMapper.java需要编写映射文件,UserMapper.xml需要遵循一些开发规范,mybatis便可以自动生成mapper接口 ...

  6. Mybatis学习——Mybatis入门程序

    MyBatis入门程序 一.查询用户 1.使用客户编号查询用户 (1).创建一个数据表 USE spring; #创建一个名为t_customer的表 CREATE TABLE t_customer( ...

  7. mybatis入门--mapper代理方式开发

    不使用代理开发 之前,我们说了如何搭建mybatis框架以及我们使用mybatis进行简单的增删改查.现在,我们一起来构建一个dao层的完整代码.并用@test来模拟service层对dao层进行一下 ...

  8. MyBatis入门程序(1)

    一.入门程序: 1.mybatis的配置文件SqlMapConfig.xml 配置mybatis的运行环境,数据源.事务等. <?xml version="1.0" enco ...

  9. mybatis入门程序-(二)

    1. 添加配置文件 log4j.properties # Global logging configuration #开发环境下日志级别设置成DEBUG,生产环境设置成info或者error log4 ...

随机推荐

  1. PCL几种采样方法

    (1)下采样  Downsampling 一般下采样是通过构造一个三维体素栅格,然后在每个体素内用体素内的所有点的重心近似显示体素中的其他点,这样体素内所有点就用一个重心点来表示,进行下采样的来达到滤 ...

  2. css3常用动画样式文件move.css

    move.css zoomIn  zoomInDownouter-circlearrowTop expandOpen fadeIn  fadeInNormal  fadeInUp   fadeInRi ...

  3. Ogre2.1 结合OpenGL3+高效渲染

    在DX10与OpenGL3+之前,二者都是固定管线与可编程管线的混合,其中对应Ogre1.x的版本,也是结合固定与可编程管线设计.转眼到了OpenGL3+与DX10后,固定管线都被移除了,相对应着色器 ...

  4. Opengl绘制我们的小屋(四)第三人称漫游

    本节内容是在第一人称漫游上完成的,请先了解上文中第一人称漫游的实现. 这一节讲下第三人称漫游是如何实现,第三人称,简单来说,就是在你后面会跟着一台摄像机顺着你拍摄. 先看一下失败的尝试.这个方法是把人 ...

  5. TinyBlob、Blob、MediumBlob、LongBlob大小

    BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是个类型系列,包括:TinyBlob.Blob.MediumBlob.LongBlob,这几个类型之间的唯一区别是在存储文件的最大大小上不同 ...

  6. java中String new和直接赋值的区别

        Java中String new和直接赋值的区别     对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才 ...

  7. 【3】JVM-OutOfMemory异常重现

    JVM中常见的OOM,那么如何通过自己编写代码产生这些OOM异常呢?通过写代码重现异常,是为了避免在工作中写出有OOM BUG的代码.之前虽然看过相关文章,但是没自己写过这些代码,这次在编写的实际过程 ...

  8. Maven是什么?

    Maven是一个项目管理和综合工具.Maven提供了开发人员构建一个完整的生命周期框架.开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期. 在多个开发团队环境时, ...

  9. e804. 显示JProgressBar的完成百分率

    The progress bar offers the ability to display the actual value of the bar as a percentage. This exa ...

  10. Git -- 工作区 和 暂存区

    Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念. 先来看名词解释. 工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工 ...