mybatis开发dao方法

Mybatis和hibernate本质区别

Hibernate:是一个标准的对象关系映射框架,入门门槛高的,不需要程序员写SQL,SQL语句自动生成了。对SQL语句进行优化,修改比较困难。

应用环境:适用于需求变化不多的中小型项目,比如后台管理系统,ERP,OA等。

Mybatis:专注于SQL语句,需要程序员自己编写SQL语句,比较灵活。

应用环境:适用于需求变化比较多的大型项目,比如互联网项目。

 

 

 

 

原始dao开发方法(程序员需要写dao接口和dao实现类)

思路:程序员需要写dao接口和dao实现类,需要向dao实现类中注入SqlSessionFactory ,在方法体内通过SqlSessionFactory创建SqlSession。

Dao接口:

package com.neusoft.dao;

 

import com.neusoft.vo.Users;

 

public interface IUsersDao {

         //根据id查询用户信息

         publicUsers findUsersById(int id) throws Exception;

 

         //添加用户信息

         publicvoid insertUsers(Users users) throws Exception;

 

         //删除用户信息

         publicvoid deleteUsers(int id) throws Exception;

}

 

DAO实现类:

package com.neusoft.dao;

 

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

 

import com.neusoft.vo.Users;

 

public class UserDaoImpl implementsIUsersDao {

 

         //因为没有整合spring,所以这里采用构造方法来创建sqlSessionFactory

         privateSqlSessionFactory sqlSessionFactory;

 

         publicUserDaoImpl(SqlSessionFactory sqlSessionFactory) {

                   this.sqlSessionFactory= sqlSessionFactory;

         }

 

         publicvoid deleteUsers(int id) throws Exception {

                   SqlSessionsqlSession = sqlSessionFactory.openSession();

                   sqlSession.delete("test.deleteUsers",id);

                   sqlSession.commit();

                   sqlSession.close();

         }

 

         publicUsers findUsersById(int id) throws Exception {

                   SqlSessionsqlSession = sqlSessionFactory.openSession();

                   Usersusers = sqlSession.selectOne("test.findUserById",id);

                   sqlSession.close();

                   returnusers;

         }

 

         publicvoid insertUsers(Users users) throws Exception {

                   SqlSessionsqlSession = sqlSessionFactory.openSession();

                   sqlSession.insert("test.insertUsers",users);

                   sqlSession.commit();

                   sqlSession.close();

         }

 

}

 

 

 

 

 

 

原始方法出现的问题:

1.dao实现类存在大量的模板代码,产生大量代码冗余。

2.调用sqlSession方法将调用方法的id硬编码。

 

Mapper代理方法

思路:

程序员还需要编写mapper.xml映射文件。

程序员编写mapper接口需要遵循一些开发规范。

Mybatis可以自动生成mapper接口实现类代理对象。

开发规范:

1.在xml中namespace等于dao接口的地址。

<!--

                   namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离 注意:使用mapper代理开发,namespace就有特殊的作用

                   namespace就是mapper的接口地址

         -->

<mapper namespace="com.neusoft.mapper.IUsersDao"></mapper>

 

 

2.在dao接口中的方法名与xml中id一致。

 

 

3.dao接口中的输入和输出参数类型与xml中的输入和输出参数类型一致。

 

综上:其实就是实现类不再手动写,还是通过xml和dao接口来自动生成。

 

 

一些问题的总结:

1.代理对象内部调用selectOne和selectList

如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。

如果mapper方法返回集合对象,代理对象内部通过selectList查询数据。

即我在dao接口中写方法的时候,如果返回的是集合对象,返回值类型就是List<Users>。

2.mapper接口方法参数只能有一个,是否影响系统开发

在系统框架中,dao层的代码是被业务层公用的。

即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同的业务方法的需求。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值