Mybatis开发dao的方法

1 mybatis 开发 dao 的方法
1.1 SqlSession 作用范围
是使用局部变量、成员变量。。。。???
 
1.1.1  SqlSessionFactoryBuilder
SqlSessionFactoryBuilder 是以工具类方式来使用,需要创建sqlSessionFactory new 一个SqlSessionFactoryBuilder
 
1.1.2  sqlSessionFactory
正常开发时,以 单例方式 管理sqlSessionFactory ,整个系统运行过程中 sqlSessionFactory 只有一个实例,将来和 spring 整合后由 spring 以单例方式管理sqlSessionFactory
 
 
1.1.3 SqlSession
 
sqlSession 是一个面向用户(程序员)的接口,程序员调用 sqlSession 的接口方法进行操作数据库。
sqlSession 能否以单例 方式使用??
由于 sqlSession 线程不安全 ,所以 sqlSession 最佳应用范围在方法体内 ,在方法体内定义局部变量使用 sqlSession
 
 
 
 
1.2  原始 dao 开发方式
程序员需要写 dao 接口和 dao 的实现 类
 
1.2.1 dao 接口
 
1.2.2 dao 接口实现

 
1.2.3  测试代码
 
 
 
 
 
 
1.3 mapper 代理的方式
程序员只需要写 dao 接口, dao 接口实现对象由 mybatis 自动生成代理对象。
本身 dao 在三层架构中就是一个通用的接口。
 
 
1.3.1  上边原始 dao 开发方式的问题
1、dao 的实现类中存在重复代码,整个 mybatis 操作的过程代码模板重复(先创建 sqlsession 、调用 sqlsession 的方法、关闭 sqlsession
 
2 dao 的实现 类中存在硬编码,调用 sqlsession 方法时将 statement id 硬编码。
 
1.3.2 mapper 开发规范
 
要想让 mybatis 自动创建 dao 接口实现类的代理对象,必须遵循一些规则:
 
1 mapper.xml namespace 指定为 mapper 接口的全限定名


此步骤目的:通过 mapper.xml mapper.java 进行关联。
 
2 mapper.xml statement id 就是 mapper.java 中方法名
 
3 mapper.xml statement parameterType mapper.java 中方法输入参数类型一致
 
4 mapper.xml statement resultType mapper.java 中方法返回值类型一致 .
 
 
 
 
1.3.3 mapper.xml (映射文件)
mapper 映射文件的命名方式建议:表名 Mapper.xml
 
namespace 指定为 mapper 接口的全限定名
 
 
1.3.4 mapper 接口
mybatis 提出了 mapper 接口,相当 于 dao 接口。
 
mapper 接口的命名方式建议:表名 Mapper
 
 
1.3.5  mapper.xml SqlMapConfig.xml 中加载
 
 
1.3.6 mapper 接口返回单个对象和集合对象
不管查询记录是单条还是多条,在 statement resultType 定义一致,都是单条记录映射的 pojo 类型。
mapper 接口方法返回值,如果是返回的单个对象,返回值类型是 pojo 类型,生成的代理对象内部通过 selectOne 获取记录,如果返回值类型是集合对象,返回值类型是pojo类型的集合,生成的代理对象内部通过 selectList 获取记录。
 
 
1.3.7  问题
1.3.7.1  返回值的问题
如果方法调用的 statement ,返回是多条记录,而 mapper.java 方法的返回值为 pojo ,此时代理对象通过 selectOne 调用,由于返回多条记录,所以报错:
 
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 4

1.3.7.2  输入参数的问题
使用 mapper 代理的方式开发, mapper 接口方法输入 参数只有一个,可扩展性是否很差??
 
可扩展性没有问题,因为 dao 层就是通用的,可以通过扩展 pojo (定义 pojo 包装类型)将不同的参数(可以是 pojo 也可以简单类型)传入进去,接下类会讲解到。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值