mybatis中dao层的实现

mybatis中dao层的实现

1.传统方式实现dao层

package com.shenhao.dao;

import com.shenhao.domain.User;

public interface UserDao {
    User findById(int id);
}
package com.shenhao.dao.impl;

import com.shenhao.dao.UserDao;
import com.shenhao.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class UserDaoImpl implements UserDao {
    @Override
    public User findById(int id) {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        SqlSessionFactory sqlSessionFactory = builder.build(UserDaoImpl.class.getClassLoader().getResourceAsStream("SqlMapper.xml"));

        SqlSession sqlSession = sqlSessionFactory.openSession();

        return sqlSession.selectOne("user.findById",id);
    }
}
    @Test
    public void testFindById(){
        UserDao userDao = new UserDaoImpl();

        User user = userDao.findById(1);

        System.out.println(user);
    }

2.使用动态代理的方式实现dao层
Mapper动态代理开发方式只需要程序员开发Mapper接口(相当于Dao接口),Mybatis框架会根据接口定义创建接口的动态代理对象,代理对象的方法同Dao接口实现类中的方法。

Mapper接口开发需要遵循以下4个规范:
 Mapper映射文件中的namespace与mapper接口的类路径相同。
 Mapper接口方法名和Mapper映射文件中定义的每个Sql的id相同
 Mapper接口方法的输入参数类型和Mapper映射文件中定义的每个Sql的ParameterType的类型相同
 Mapper接口方法的输出参数类型和Mapper映射文件中定义的每个Sql的resultType的类型相同

    @Test
    public void testFindById(){
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        SqlSessionFactory sqlSessionFactory = builder.build(AppTest.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));

        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserDao userDao = sqlSession.getMapper(UserDao.class);

        User user = userDao.findById(1);

        System.out.println(user);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值