------------------------1.    SqlSession使用范围-------------------

  

  1.1     SqlSessionFactoryBuilder

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory

将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。

在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

  1.2     SqlSessionFactory

通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。

将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

  1.3     SqlSession

SqlSession是一个面向用户(程序员)的接口。

SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)、。

SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

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

  

1.    思路

程序员需要写dao接口和dao实现类。

需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession

2.    dao接口

3.dao实现类

public class UserDaoImpl implements UserDao {// 需要向dao实现类中注入SqlSessionFactory// 这里通过构造方法注入private SqlSessionFactory sqlSessionFactory;public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}@Overridepublic User findUserById(int id) throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();User user = sqlSession.selectOne("test.findUserById", id);// 释放资源
        sqlSession.close();return user;}@Overridepublic void insertUser(User user) throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//执行插入操作sqlSession.insert("test.insertUser", user);// 提交事务
        sqlSession.commit();// 释放资源
        sqlSession.close();}@Overridepublic void deleteUser(int id) throws Exception {SqlSession sqlSession = sqlSessionFactory.openSession();//执行插入操作sqlSession.delete("test.deleteUser", id);// 提交事务
        sqlSession.commit();// 释放资源
        sqlSession.close();}}

4.     测试代码:

5.  原始 dao开发问题

1、dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

2、调用sqlsession方法时将statement的id硬编码了

3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

--------------3.   mapper代理开发程序员只需要写mapper接口----------------------

1    思路(mapper代理开发规范)

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

程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

开发规范:

1、在mapper.xml中namespace等于mapper接口地址

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

总结:

以上开发规范主要是对下边的代码进行统一生成:

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

sqlSession.insert("test.insertUser", user);

2.    mapper.java

  

3.    mapper.xml

  

4.    在SqlMapConfig.xml中加载mapper.xml

5.测试

6.总结:

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

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

附一个完整的mapper开发的配置文件以及测试:(Maven结构)

0.目录结构:

1.Exam表结构:

2.Exam.java与ExamExample.java都是mybatis逆向工程导出来的:

3.ExamMapper,java与ExamMapper.xml也是mybatis逆向工程导出来的:

4.SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 加载属性文件 --><properties resource="db.properties"><!--properties中还可以配置一些属性名和属性值 --><!-- <property name="jdbc.driver" value=""/> --></properties><!-- 全局配置参数,需要时再设置 --><!-- <settings> </settings> --><!-- 别名定义 --><typeAliases><!-- 针对单个别名定义 type:类型的路径 alias:别名 --><!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --><!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) --><package name="cn.itcast.mybatis.po" /></typeAliases><!-- 和spring整合后 environments配置将废除 --><environments default="development"><environment id="development"><!-- 使用jdbc事务管理,事务控制由mybatis --><transactionManager type="JDBC" /><!-- 数据库连接池,由mybatis管理 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments><!-- 加载 映射文件 --><mappers><!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中 上边规范的前提是:使用的是mapper代理方法 --><package name="cn.xm.exam.mapper" /></mappers></configuration>

5.测试代码:

package cn.xm.exam.daoTest;import java.io.IOException;
import java.io.InputStream;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;import cn.xm.exam.bean.exam.Exam;
import cn.xm.exam.mapper.exam.ExamMapper;public class PageHelperTest {private SqlSessionFactory sqlSessionFactory;@Beforepublic void setUp() throws IOException {String resource = "SqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void test1() {SqlSession sqlSession = sqlSessionFactory.openSession();//创建UserMapper对象ExamMapper examMapper = sqlSession.getMapper(ExamMapper.class);Exam exam = examMapper.selectByPrimaryKey("02e23c37781b4f71a84c5074a8b844d1");System.out.println(exam.toString());}
}

mybatis开发dao的方法——(三)相关推荐

  1. Mybatis学习记录(二)----mybatis开发dao的方法

    1  SqlSession使用范围 1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将Sq ...

  2. MyBatis开发Dao的方法

    1.SqlSession的使用范围 1.1 SqlSessionFactoryBuilder:用来创建SqlSessionFactory,只需要把SqlSessionfactoryBuilder当成一 ...

  3. Mybatis 开发 dao 的方法

    1.分析SqlSession使用范围 1.1.SqlSessionFactoryBuilder 通过 SqlSessionFactoryBuilder 创建会话工厂 SqlSessionFactory ...

  4. mybatis由浅入深day01_5mybatis开发dao的方法(5.1SqlSession使用范围_5.2原始dao开发方法)...

    5 mybatis开发dao的方法 5.1 SqlSession使用范围 5.1.1 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂 ...

  5. 【MyBatis框架】Mybatis开发dao方法第二部分

    下面来继续讨论mybatis开发Dao的方法 我们前面使用原始的Dao开发方法,发现了许多弊端,我们下面使用mapper代理来写Dao方法. 1.mapper代理方法(程序员只需要mapper接口(相 ...

  6. 【MyBatis框架】Mybatis开发dao方法第一部分

    下面来讨论mybatis开发Dao的方法 先来说一下基本架构流程中使用到的几个类 1.SqlSession使用范围 1.1SqlSessionFactoryBuilder  通过SqlSessionF ...

  7. 【mybatis基础】mybatis开发dao两种方法

    mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目.mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.mybat ...

  8. mybatis教程--原始方式和mapper方式开发dao详解

    mybatis开发dao的两种方式 一.原始的dao开发方式 所谓的原始的dao的开发方式,其实就是和hibernate的开发方式类似的,需要dao的接口和dao的实现类,这个就是原始的开发方式,而m ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)--MyBatis的基础知识.MybatisFirst中存在大量重复的代码.这次简化下代码: 使用MyBatis开发Dao ...

最新文章

  1. Linux 用户行为日志记录
  2. Mybatis 通用 Mapper 使用 ①
  3. 测试udp端口状态 curl_检测TCP/UDP端口的连通性
  4. 构筑企业虚拟桌面应用环境-使用VMware VDI为企业统一提供虚拟桌面环境(上)
  5. filter solutions安装教程
  6. 使用root用户安装Hybris遇到的错误
  7. 高效、稳定开发功能的一些心得
  8. MATLAB无边框输出图像
  9. 用python处理excel表格_如何用python处理excel数据 | 用python处理excel表格数据类型
  10. 固定权重 关于Mxnet的一些基础知识理解(1)
  11. oracle数据库tx锁,oracle数据库有把TX锁,如何定位锁在哪?
  12. java中的流思想_Java8新特性 Stream流式思想(二)
  13. 最大的数(nyoj 1170)
  14. 主流编程语言最好的编辑器,你的工具用对了吗?
  15. Android框架揭秘-Android Binder IPC笔记
  16. 怎么用HTML表格中加上线条,如何在html的表格中加入边框线
  17. [阅读笔记] 联邦学习攻防综述 An Overview of Federated Deep Learning Privacy Attacks and Defensive Strategies
  18. 单片机c语言编写注解,单片机C语言程序注解
  19. vue脚手架安装时出现Error EPERM operation not permitted这个错误
  20. 发那科机器人接线电源_实用FANUC 0i各模块接线及功能图

热门文章

  1. ActiveMQ学习笔记03 - 消息持久化
  2. 浅谈Delphi过程与函数02 - 零基础入门学习Delphi21
  3. Oracle 下 unpin 的cursor 才能被移除
  4. Python之路--WEB框架本质
  5. 发现WinSRV2003SP1并没有包含ASP+Access的BUG更新
  6. 使用forName动态加载类文件
  7. Exchange 2010 OAB下载问题排错error 0x80200049
  8. Android中文API (110) —— CursorTreeAdapter
  9. ImageMagick之PDF转换成图片(image)
  10. Spark技术内幕:Shuffle Read的整体流程