mybatis开发dao方法

来源:互联网 发布:手机淘宝供俏装修店铺 编辑:程序博客网 时间:2024/04/29 14:40

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