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();    
    }
}

  

转载于:https://www.cnblogs.com/xujian2014/p/5441971.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值