------------------------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. 打桥位lisp_lisp函数
  2. python开发跟淘宝有关联微_使用Python分析淘宝用户行为
  3. OEL7.2下Oracle11.2.0.4RAC部署
  4. php统计变量的位数,php实现统计二进制中1的个数算法示例
  5. java 注解默认值
  6. 【遥感物候】Hants NDVI时间序列谐波分析法数据重构,植被生长季曲线效果可佳(附Hants软件下载)
  7. python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?
  8. 如何使用Behat在Drupal中使用行为驱动的开发
  9. memcached的安装(server、client)、magent整合
  10. Mac 下安装Redis
  11. DNS篇之二DNS记录类型
  12. UCI数据集详解及其数据处理(附148个数据集及处理代码)
  13. 内地见证可以办理哪些香港银行卡?哪家更方便门槛要求更低?
  14. django学习日志(模板的渲染过程)第八部分:字符串数据转义
  15. 百度音乐高调改名后 掉队的千千音乐还有机会吗?
  16. python获取当前工作路径
  17. single无效,使用maxLines
  18. Android/Linux招聘要求
  19. pytorch中实现Balanced Cross-Entropy
  20. 多商家入驻分销平台基本功能设计

热门文章

  1. .NET设计模式(4):建造者模式(Builder Pattern)(转)
  2. WebService注解
  3. ping: unknown host www.baidu.com问题解决
  4. Laravel 中的 Many-To-Many
  5. Java 定时任务调度工具 Quartz(Part 2)
  6. consul-template + nginx部署高可用负载均衡
  7. @MySQL为表字段添加索引
  8. 事务的应用demo1-------采用JDBC硬编码方式模拟银行转账。
  9. 如何在vc的拆分窗口中使用CFormView派生类
  10. Kraken采用CashAddr地址,BCH地址统一向前一步