学习笔记之myBatis的DAO开发和mapper代理开发区别

DAO模式开发:需要先建立一个实现功能接口和实现类A,完成xml文件sql语句配置,在接口实现类A里需要完成xml里对sql语句的操作并返回操作结果。在测试类里要完成sqlsession的开启并通过新建一个实现接口类对象A调用实现的方法来得到功能的实现

public class UserDaoImpl extends SqlSessionDaoSupport  implements UserDao {
	//需要向dao实现类中注入SqlSessionFactory工厂  
   //这里我们暂时没用spring,我们通过构造方法注入  
   private SqlSessionFactory sqlSessionFactory;  
   public UserDaoImpl(SqlSessionFactory sqlSessionFactory){  
        this.sqlSessionFactory=sqlSessionFactory;  
   }  
  
  
    public User findUserById(int id) throws Exception {  
      SqlSession sqlSession=sqlSessionFactory.openSession();  
          
        User user=sqlSession.selectOne("test.findUserById",id);  需要完成这个方法,之后再test类实例化调用
         
      //释放资源  
       sqlSession.close();  
        return user;  
    }  

再测试类里:

  1.  //配置文件(SqlMapConfig.xml)  
  2.                    String resource = "SqlMapConfig.xml";  
  3.    
  4.                    //加载配置文件到输入流  
  5.                    InputStream inputStream = Resources.getResourceAsStream(resource);  
  6.    
  7.                    //创建会话工厂  
  8.                    sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);  //得到会话工厂
  9.    
  10.   public void testFindUserById() throws Exception {  
  11.    
  12.                    UserDao userDao = new UserDaoImpl(sqlSessionFactory);  //将会话工厂传入
  13.                    User user = userDao.findUserById(1) ; //通过实现的方法得到操作结果 
  14.                    System.out.println(user);  
  15.    
  16.          }  



mapper代理开发模式:需要建立一个实现功能接口,完成xml文件的语句配置,不需要实现接口方法的类,通过mapper代理机制直接获得接口实现类。

但是xml文件里有了一些限制

在xml文件中  

<!-- 

    	mapper代理中,id必须和mapper接口的方法名一致
    	parameterType必须和接口方法的参数类型一致
    	resultType必须和返回类型一致
     -->
    <select id="findUserById" parameterType="int" resultType="User"(这里用了设置别名,可以不用写路径名)>
      select * from mb_test1 id=#{_parameter}
    </select>

这样做是为了让xml文件内的statement能自动匹配接口中的方法,并自动完成方法的实现

在test文件中

String resource="SqlMapConfig.xml";
InputStream inputSteam=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputSteam);  
SqlSession sqlSession= sqlSessionFactory.openSession();

ShopUserMapper shopUserMapper=sqlSession.getMapper(ShopUserMapper.class);

这句就是通过mapper代理的方法直接建立一个对象,完成操作不像dao开发要创建实现类

List<UserShopQuery> query=shopUserMapper.findUserById() ;
sqlSession.close();
System.out.println(query);


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值