• Mybatis开发Dao


    一、Mybatis进行原始的Dao开发

      原始Dao开发需要编写Dao接口和Dao实现类,步骤如下:

      1、Dao接口

    public interface UserDao
    {
        public User findUserById(int id);
    }

      2、Dao实现类

    public class UserDaoImpl implements UserDao
    {
        SqlSessionFactory sqlSessionFactory;
        public UserDaoImpl(SqlSessionFactory sqlSessionFactory)
        {
            this.sqlSessionFactory=sqlSessionFactory;
        }
        @Override
        public User findUserById(int id)
        {
            SqlSession sqlSession=sqlSessionFactory.openSession();
            User user=sqlSession.selectOne("test.findUserById", id);
            sqlSession.close();
            return user;
        }
    }

      3、映射文件

    <?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="test">
        <select id="findUserById" parameterType="int" resultType="com.test.pojo.User">
            select * from user where id=#{id}
        </select>
    </mapper>

      4、加载映射文件

        <mappers>
            <mapper resource="User.xml"/>
        </mappers>

      原始的Dao开发存在两个问题:

      1、Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession。

      2、调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不得于开发维护。

    二、Mapper动态代理方式

      1、实现原理

      该种方式只需要编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上面的Dao接口实现类方法。

      Mapper接口开发需要遵循的规范:

    1、 Mapper.xml文件中的namespace与mapper接口的类路径相同。

    2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同。

    3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同。

    4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同。

    2、实现步骤

      1、Mapper接口

      注意:Mapper接口需要满足上述2、3、4三个条件,内容如下:

      

      2、Mapper.xml映射文件

       新建UserMapper.xml文件,内容同User.xml,但是要修改namespace为mapper接口的类路径。

      

      3、加载UserMapper.xml文件

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

      4、测试代码

    public class UserMapperTest
    {
        private SqlSessionFactory sqlSessionFactory;
        @Before
        public void setUp() throws IOException
        {
            String resource="SqlMapConfig.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
        }
        @Test
        public void testFindUserById()
        {
            SqlSession sqlSession=sqlSessionFactory.openSession();    
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);    
            User user=userMapper.findUserById(5);
            System.out.println(user);        
            sqlSession.close();    
        }
    }

      

  • 相关阅读:
    JSON文件和Json对象
    如何判断一个数为几进制
    热更新
    UIPageView
    quick-cocos2d中自定义按钮(BUTTON)
    lua与oc交互
    Test1
    Visual Studio 附加到进程调试
    C# 判断一个单链表是否有环及环长和环的入口点
    Asp.Net Forms获取UEeditor内容
  • 原文地址:https://www.cnblogs.com/xujian2014/p/5441971.html
Copyright © 2020-2023  润新知