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

来源:互联网 发布:大数据系统架构图 编辑:程序博客网 时间:2024/06/05 09:26


  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来自动生成,具有快速、高效的特点。



【 转载请注明出处——胡玉洋《【MyBatis框架点滴】——MyBatis开发DAO的两种方法:原始DAO开发方法和Mapper代理方法 》】

0 0
原创粉丝点击