【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法

简介:   MyBatis常用的开发DAO的方式有两种,第一种就是常用的原始DAO的开发方法,第二种就是Mapper代理的方法。

 MyBatis常用的开发DAO的方式有两种,第一种就是常用的原始DAO的开发方法,第二种就是Mapper代理的方法。


原始DAO开发方法


 原始DAO开发方法就是之前文章《【MyBatis框架点滴】——初识+环境搭建》中的DAO实现方法,编写相应pojo的xml文件,定义DAO接口及其实现类,限于篇幅,这里不再copy-paste~



Mapper代理方法


 使用Mapper代理方法开发,与原始DAO开发方法类似,编写mapper配置文件(相当于User.xml)、定义Mapper接口(相当于DAO接口)。


 mapper配置文件:


 UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD iBatis Mapper 3.0 //EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.danny.mybatis.mapper.UserMapper">
  <select id="findUserById" parameterType="int"
    resultType="com.danny.mybatis.po.User">
    select * from user where id=#{id}
  </select> 
  <select id="findUserByName" parameterType="java.lang.String"
    resultType="com.danny.mybatis.po.User">
    select * from user where username like '%${value}%'
  </select>
  <insert id="insertUser" parameterType="com.danny.mybatis.po.User">
    <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
      select LAST_INSERT_ID()
    </selectKey>
    insert into user(id,username,birthday,sex,address) values (#{id},#{username},#{birthday},#{sex},#{address})
  </insert>
  <delete id="deleteUser" parameterType="java.lang.Integer">
    delete from user where id=#{id}
  </delete>
  <update id="updateUser" parameterType="com.danny.mybatis.po.User">
    update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
     where id=#{id} 
  </update>
</mapper>


   Mapper接口:    UserMapper.java


package com.danny.mybatis.mapper;
import java.util.List;
import com.danny.mybatis.po.Person;
import com.danny.mybatis.po.User;
/**
 * @ClassName:UserMapper
 * @Description:用户Mapper
 * @author Danny
 * @date 2016年5月29日上午9:06:58
 */
public interface UserMapper {
  /**
   * 根据id查询用户信息
   * @param id
   * @return
   * @throws Exception
   */
  public User findUserById(int id) throws Exception;
  /**
   * 根据用户名模糊查询用户信息
   * @param userName
   * @return
   * @throws Exception
   */
  public List<User> findUserByName (String userName) throws Exception;
  /**
   * 添加用户信息
   * @param user
   * @throws Exception
   */
  public int insertUser(User user) throws Exception;
  /**
   * 删除用户信息
   * @param id
   * @throws Exception
   */
  public void deleteUser(int id) throws Exception;
  /**
   * 
   * @param 更新用户
   * @throws Exception
   */
  public void updateUser(User user) throws Exception;
}

   如上,对表数据库进行操作时,不需要手动实现mapper接口中的方法(MyBatis框架根据接口定义创建接口的动态代理对象,代理对象的方法跟上面DAO接口的实现类方法类似),直接调用即可。

   比如:

SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.selectByPrimaryKey(1);
System.out.println(null==user?"":user.getUsername());


 但是编写mapper配置文件与mapper接口有如下几条约束:

  1、mapper配置文件中的namespace必须为mapper接口的全路径(这里为com.danny.mybatis.mapper.UserMapper)


  2、mapper接口中的方法名必须为mapper配置文件中statement的id(这里的findUserById、findUserByName等)


  3、mapper接口中方法的输入参数类型必须与mapper配置文件中statement的parameterType指定的类型一致


  4、mapper接口中方法的返回值类型必须与mapper配置文件中statement的resultType指定的类型一致。


 当查询结果返回单条数据时(比如上面的findUserById方法),代理对象内部通过SqlSession的selectOne方法执行查询;当查询结果返回集合时(比如上面的findUserByName方法),代理对象内部通过SqlSession的selectList方法执行查询。



小结


 在原始DAO开发方法中,操作数据库需要用SqlSession提供的方法,且SqlSession中有些方法的参数类型为Object类型,所以操作的时候传入的变量类型如果错误,在系统编译阶段无法暴露出来,增加开发负担。


 利用Mapper代理开发,除了避免编写mapper接口的实现类,mapper接口、mapper映射文件甚至pojo也可以通过mybatis代码生成器——MyBatisGenerator来自动生成,具有快速、高效的特点。


相关文章
SQL XML Java
33 0
|
1月前
|
SQL Java 数据库连接
区分iBatis与MyBatis:两个Java数据库框架的比较
总结起来:虽然从技术角度看,iBATIS已经停止更新但仍然可用;然而考虑到长期项目健康度及未来可能需求变化情况下MYBATISS无疑会是一个更佳选择因其具备良好生命周期管理机制同时也因为社区力量背书确保问题修复新特征添加速度快捷有效.
78 12
|
2月前
|
SQL XML Java
MyBatis框架如何处理字符串相等的判断条件。
总的来说,MyBatis框架提供了灵活而强大的机制来处理SQL语句中的字符串相等判断条件。无论是简单的等值判断,还是复杂的条件逻辑,MyBatis都能通过其标签和属性来实现,使得动态SQL的编写既安全又高效。
154 0
|
3月前
|
SQL XML Java
MyBatis Mapper中使用limit参数的查询问题
总结而言,MyBatis中使用 `limit`参数的查询可以高度定制并且灵活,基于方法签名和XML映射文件的组合来达成多样化的查询需求。通过参数化查询和动态SQL,MyBatis可以有效地处理各种复杂情境下的数据库操作,并且将SQL语句的维护与业务代码的编写相分离,提升代码的可维护性和可阅读性。
337 13
|
7月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
7月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
4月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
639 1
Spring boot 使用mybatis generator 自动生成代码插件
|
7月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
552 0
|
9月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
325 2
|
12月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
363 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块