开发规范
  
  Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法。
  
  Mapper接口开发需要遵循以下规范:
  
  Mapper.xml文件中的namespace与mapper接口的类路径相同,即namespace必须是接口的全限定名。
  
  Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。
  
  Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同。
  
  Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。
  
  使用mapper动态代理开发Dao案例
  
  1)新建项目mybatis_demo02,导入所需jar包
  
  2)在classpath下创建log4j.properties日志配置文件、db.properties数据库配置文件以及MyBatis的核心配置文件SqlMapConfig.xml
  
  新建源码包config
  
  log4j.properties内容:
  
  # Global logging configuration
  
  log4j.rootLogger=DEBUG, stdout
  
  # Console output...
  
  log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  
  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  
  log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
  
  db.properties内容:
  
  #mysql的驱动
  
  driver=com.mysql.jdbc.Driver
  
  #连接地址
  
  url=jdbc:mysql://localhost:3306/spring_jdbc02?useUnicode=true&characterEncoding=UTF-8
  
  #连接用户名
  
  user=root
  
  #连接密码
  
  password=123456
  
  #初始化数量
  
  initsize=5
  
  #最大数量
  
  maxsize=15
  
  SqlMapConfig.xml,在如下:
  
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!DOCTYPE configuration
  
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
  <configuration>
  
  </configuration>
  
  3)在SqlMapConfig.xml中配置数据库链接
  
  <?xml version="1.0" encoding="UTF-8"?>
  
  <!DOCTYPE configuration
  
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
  
  <configuration>
  
  <!-- db.properties配置文件 -->
  
  <properties resource="db.properties"/>
  
  <!-- 和spring整合后environments配置将废除 -->
  
  <environments default="development">
  
  <environment id www.gcyl152.com="development">
  
  <!-- 使用jdbc事务管理 -->
  
  <transactionManager type="JDBC" />
  
  <!-- 数据库连接池 -->
  
  <dataSource type="POOLED">
  
  <property name="driver" value="${driver}" />
  
  <property name="url" value="${url}" />
  
  <property name="username" value="${user}" />
  
  <property name="password" value=http://www.michenggw.com/"${password}" />
  
  </dataSource>
  
  </environment>
  
  </environments>
  
  </configuration>、
  
  4)新建包com.oak.po,在其中新建User
  
  public class User www.furggw.com{
  
  private Integer id;
  
  private String name;
  
  //方法略...
  
  5)新建一个包com.www.huarenyl.cn oak.mapper,新建UserMapper接口,定义方法
  
  public interface UserMapper {
  
  /**
  
   * 根据id查找用户
  
   * @param id
  
   * @return
  
   */
  
  User findById(int id);
  
  /**
  
   * 根据姓名进行模糊查询
  
   * @param name
  
   * @return 所有满足条件的User信息
  
   */
  
  List<User> findByName(String name);
  
  /**
  
   * 添加一条User信息
  
   * @param user
  
   */
  
  void add(User user);
  
  6)UserMapper.xml映射文件
  
  在config下新建一个普通包sqlmap,在其中新建UserMapper.xml映射文件
  
  <?xml version="1.0" encoding=www.hjpt521.com"UTF-8"?>
  
  <!DOCTYPE mapper
  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
  <mapper namespace="com.oak.mapper.UserMapper">
  
  <!-- 根据id获取用户信息 -->
  
  <select id="findById" parameterType="int" resultType="com.oak.po.User">
  
  select * from `user` where id=#{id}
  
  </select>
  
  <!-- 根据名称模糊查询用户信息列表 -->
  
  <select id="findUserByName" parameterType="String" resultType="com.oak.po.User">
  
  select * from `user` where name like '${value}'
  
  </select>
  
  <!-- 添加一条信息 返回自动增长主键 -->
  
  <insert id="add" parameterType="com.oak.po.User">
  
  insert into `user` values(null,#{name})
  
  </insert>
  
  </mapper>
  
  Mapper接口开发规范(以上4条):
  
  7)加载UserMapper.xml映射文件
  
  在SqlMapConfig.xml文件添加如下配置:
  
  <!-- 加载mapper映射文件 -->
  
  <mappers>
  
  <mapper resource="sqlmap/UserMapper.xml"/>
  
  </mappers>
  
  8)测试
  
  在com.oak.test中编写写测试类UserTest:
  
  public class UserTest {
  
  // 工厂对象一般在我们的系统中是单例的
  
  private SqlSessionFactory sqlSessionFactory=null;
  
  @Before
  
  public void init() throws IOException{
  
  // 第一步,创建SqlSessionFactoryBuilder对象
  
  SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  
  // 第二步,加载配置文件
  
  InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
  
  // 第三步,创建SqlSessionFactory对象
  
  sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
  
  }
  
  @Test
  
  public void testFindById(){
  
  //第四步 得到sqlSession,与Spring整合后省略
  
  SqlSession sqlSession=sqlSessionFactory.openSession();
  
  //获得代理对象(与Spring整合后只需要通过Spring容器拿到UserMapper接口的代理对象就行了)
  
  UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
  
  User user=userMapper.findById(2);
  
  System.out.println(user);
  
  sqlSession.close();
  
  查看结果:
  
  小结
  
  selectOne和selectList
  
  动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。
  
  namespace
  
  mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。
  
  MyBatis核心配置文件SqlMapConfig.xml配置内容
  
  properties(属性)
  
  settings(全局配置参数)
  
  typeAliases(类型别名)
  
  typeHandlers(类型处理器)
  
  objectFactory(对象工厂)
  
  plugins(插件)
  
  environments(环境集合属性对象)
  
  environment(环境子属性对象)
  
  transactionManager(事务管理)
  
  dataSource(数据源)
  
  mappers(映射器)
  
  properties
  
  如上案例:
  
  <!-- 配置属性 -->
  
  <properties resource="db.properties"/>
  
  1
  
  2
  
  我们也可以在properties属性中使用property子标签来定义属性:
  
  <!-- 配置属性 -->
  
  <properties resource="db.properties">
  
   <property name="driver" value="com.mysql.jdbc.Driver"/>
  
  </properties>
  
  MyBatis将按照下面的顺序来加载属性为:
  
  在properties元素体内定义的属性首先被读取
  
  然后会读取properties元素中resource或url加载的属性,它会覆盖已读取的同名属性
  
  也就是说,此处通过property定义的属性名driver属性会被db.properties中同名的driver属性覆盖。
  
  我们一般使用resource的方式加载属性。
  
  typeAliases(类型别名)
  
  mybatis支持别名:
  
  别名 映射类型
  
  _byte byte
  
  _short short
  
  _int int
  
  _integer int
  
  _long long
  
  _float float
  
  _double double
  
  _boolean boolean
  
  string String
  
  byte Byte
  
  short Short
  
  int Integer
  
  integer Integer
  
  long Long
  
  float Float
  
  double Double
  
  boolean Boolean
  
  date Date
  
  decimal BigDecimal
  
  bigdecimal BigDecimal
  
  map Map
  
  自定义别名
  
  我们把上述案例中的com.oak.po.User类定义别名,以方便使用,在SqlMapConfig.xml中添加如下配置信息:
  
  <!-- 配置User别名 -->
  
  <typeAliases>
  
  <!-- 单个别名定义 -->
  
  <typeAlias type="com.oak.po.User" alias="user"/>
  
  </typeAliases>
  
  在UserMapper.xml中使用别名:
  
  <!-- 根据id获取用户信息 别名 不区分大小写-->
  
  <select id="findById" parameterType="int"
  
  resultType="User">
  
  select * from `user` where id=#{id}
  
  </select>
  
  注意:resultType属性的值就是User类的别名,且别名是不区分大小写的。
  
  给所有的po同时定义别名
  
  可以给所有的po批量定义别名,别名就是类名且不区分大小写:
  
  <typeAliases>
  
  <!-- 批量别名定义,扫描包的形式创建别名,别名就是类名,且不区分大小写 -->
  
  <package name="com.oak.po"/>
  
  </typeAliases>
  
  SqlMapConfig.xml文件加载mapper.xml文件
  
  Mapper(映射器)配置的几种方法:
  
  1)使用相对于类路径的资源:< mapper resource=" " />
  
  2)使用mapper接口类路径:< mapper class=" " />
  
  <!-- 加载mapper映射文件 -->
  
  <mappers>
  
  <mapper class="com.oak.mapper.UserMapper"/>
  
  </mappers>
  
  注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
  
  3)注册指定包下的所有mapper接口:< package name=""/>
  
  <!-- 加载mapper映射文件 -->
  
  <mappers>
  
  <!-- 要求与使用接口名加载配置相同 -->
  
  <package name="com.oak.www.hjpt521.com mapper"/>
  
  </mappers>
  
  注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
  
  虽然Mapper(映射器)配置有以上三种方法,但是实际开发中就用第三种方法。

MyBatis使用Mapper动态代理开发Dao层的更多相关文章

  1. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  2. Mybatis(五)Spring整合Mybatis之mapper动态代理开发

    要操作的数据库: IDEA创建的Java工程,目录结构如下: 一.导包 1.spring的jar包 2.Mybatis的jar包 3.Spring+mybatis的整合包. 4.Mysql的数据库驱动 ...

  3. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

  4. MyBatis使用mapper动态代理实现DAO接口

    工具: mysql 5.5.62   IDEA 参考自:https://www.cnblogs.com/best/p/5688040.html 遇到的问题: 无法读取src/main/java下配置文 ...

  5. Mybatis框架三:DAO层开发、Mapper动态代理开发

    这里是最基本的搭建:http://www.cnblogs.com/xuyiqing/p/8600888.html 接下来做到了简单的增删改查:http://www.cnblogs.com/xuyiqi ...

  6. mybatis 学习笔记(三):mapper 代理开发 dao 层

    mybatis 学习笔记(三):mapper 代理开发 dao 层 优势 通过使用mapper 代理,我们可以不需要去编写具体的实现类(使用 getMapper() 方法自动生成),只需编写接口即可, ...

  7. MyBatis开发Dao的原始Dao开发和Mapper动态代理开发

    目录 咳咳...初学者看文字(Mapper接口开发四个规范)属实有点费劲,博主我就废了点劲做了如下图,方便理解: 原始Dao开发方式 1. 编写映射文件 3.编写Dao实现类 4.编写Dao测试 Ma ...

  8. MyBatis - Mapper动态代理开发

    Mapper接口开发方法编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象. Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发, ...

  9. Mybaits之Mapper动态代理开发

    Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...

随机推荐

  1. mybatis javaConfig实现

    @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessio ...

  2. Lambda表达式。

    函数式编程思想: 面向对象思想:做一件事,先找能解决这件事的对象,然后调用该对象相应方法. 面向过程思想:只要能获取到结果,怎么做的不重要,重视结果,不重视过程. 冗余的代码: public stat ...

  3. JavaWeb ,EL,

    WEB 概述: java web 是用java 技术来解决相关web 互联网领域的技术总和 . web 可分为 web服务器和web客户端(浏览器)    web 的资源分类:  静态资源:  HTM ...

  4. linux小白成长之路12————​Docker部署Nginx

    [内容指引] Docker安装Nginx: 简单启动: 准备配置文件: 一.Docker安装Nginx 指令:docker pull nginx 二.简单启动 指令:docker run --name ...

  5. 一个JSON字符串和文件处理的命令行神器jq,windows和linux都可用

    这个命令行神器的下载地址:https://stedolan.github.io/jq/# Windows和Linux版本均只有两个可执行文件,大小不过2MB多. 以Windows版本为例,介绍其用法. ...

  6. GPU、CPU的异同

    一.概念 CPU(Center Processing Unit)即中央处理器,GPU(Graphics Processing Unit)即图形处理器. 二.CPU和GPU的相同之处 两者都有总线和外界 ...

  7. 云态(YunCloud)的Centos服务器修改dns教程

    DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串.通过主机名,最终 ...

  8. 如何修改开发板主频--迅为iMX6UL开发板

    平台:iMX6UL开发板           iMX6UL开发板 可以在文件系统中通过命令修改 CPU 运行的主频.如下图所示,使用命令“cat /sys/devices/system/cpu/cpu ...

  9. break,continue,return的区别

    break,continue,return的区别 break 当break语句用于循环语句时,会终止执行循环,并执行循环后代码(如果有的话). function main() { for(var i ...

  10. 新时代web组件开发标准

    VUE框架,则是遵行了这个标准. 1.html文件 <!DOCTYPE html><html><head lang="en"> <meta ...