mybatis-day1

房东的猫 提交于 2020-02-29 17:56:37
  1. MyBatis框架的引言

a) MyBatis框架的基本概念
MyBtis是一个持久层框架,完成是对数据库的访问,操作 (CRUD)。

b) MyBatis解决了什么问题
解决JDBC访问,操作数据库过程中存在的问题,他是对原有JDBC技术的封装
JDBC访问和操作数据库存在问题:

  1. 大量的代码冗余 (JdbcTemplate)
  2. 手工的处理ORM (麻烦)
  3. 没有对访问数据进行优化 Cache

c) MyBatis核心的编程思路

 

  1. 第一个MyBatis程序的开发(Hello World

a) 环境的搭建 OpenSource)

  1. Ibatis MyBatis前身 apache组织
  2. Ibatis3.0 改名 MyBatis google code
  3. MyBatis 属于 Github
    1. 导入jar

a) Mybatis 核心jar

b) 第三方依赖 lib目录

c) Oracle驱动jar  ojdbc14.jar

  1. 引入配置文件

a) log4j.properties【可选】 放置位置 src根下
日志的配置文件 MyBatis框架运行过程的日志信息打印出来
目的:关注MyBatis运行过程。

b) mybatis-config.xml 放置位置 随便 建议放置在src 根下
配置的是MyBatis运行相关的一些参数。

c) Mapper文件  
实现DAO接口
注意 Mapper文件的名字 随便 放置位置 随便

  1. 初始化配置
    mybatis-config.xml配置
  2.  

a) 数据库连接相关的参数 username password driver url

b) Mapper文件注册

b) MyBatis Core API

  1. Resource
    作用:读取mybatis相关配置文件的。打开IO
  2. SqlSessionFactory
    作用:通过SqlSessionFactory 这个工厂 创建SqlSession
  3. SqlSession
    作用:1 根据程序员书写的mapper文件,自动的创建mapper文件对应的Java类(DAO接口的实现类)
          2 SqlSession 内部 封装 Connection对象 (一一对应的关系)
          3 SqlSession 控制事务 SqlSession.commit(); ---- Connection.commit();
                              SqlSession.rollback(); ---- Connection.rollback();
          注意:实战中 查询操作   不需要控制事务
                       增删改操作 必须要控制事务

c) MyBatis的标准开发步骤

  1. Table
  2. Entity
  3. DAO接口
  4. Mapper文件做DAO层的实现
  5. Mapper文件的注册 (mybatis-config.xml注册)
  6.  

  7. 测试 通过MyBatis核心的API 运行程序
    1. Resource
    2. SqlSessionFactory
    3. SqlSession

       

  8. MyBatis单表操作的Mapper文件

a) 集合类型(List)的返回值 Mapper处理方式
DAO接口中定义的方法返回值List<User>

 

b) 参数绑定
DAO方法中只存在一个参数时,这个参数变量的名字与Mapper文件#{}名字没有任何关系

 


在书写Mapper文件时,可以通过#{下标} 下标起始自0 代表第一个参数 后续参数以此类推

 


处理多参数查询时

  1. 通过#{下标} 可读性差
  2.  

  3. 通过注解的方式进行参数绑定

 (@Param(value=”name”)String name,@Param(value=”password”)String password)

  1. 老炮儿专属处理多参的方式 应用Map处理多参

     


    例子:

DAO

 

Mapper

 

测试类

 

c) 修改

 

d) 删除

 

e) 插入

  1. 在数据库底层 创建sequence
  2.  

  3. Mysql创建序列

CREATE TABLE emp_seq ( seq VARCHAR(8));

INSERT INTO emp_seq VALUES('0');

UPDATE emp_seq SET seq = LAST_INSERT_ID(seq+1);

SELECT LAST_INSERT_ID();

  1. 需要从dual表 获得id的值
    select suns_seq.nextval from dual;
  2. Mapper文件的书写

    MySQL写法

     

  3. MybatisUtil工具类的封装

a) Resources类的特点:读取配置文件 (mybatis-config.xmlIO
建议:一次性 通过IO读取 所有的数据

b) SqlSessionFactory类的特点:创建SqlSession
特点:重量级资源 内存占用多 功能多 每一个应用只创建一个对象  线程安全

c) SqlSession 特点 轻量级资源 不能被多线程共享

  1. 创建DAO接口的实现类 (动态代理设计思想 动态字节码技术)
  2. SqlSession内部封装Connection 一一对应 SqlSession.close() - conn.close()
  3. 事务控制 SqlSession.commit() SqlSession.rollback();

基础版本:

 

 

线程绑定版本

Private static final ThreadLocal<SqlSession> tl = new ThreadLocal<SqlSession>();

 

加事务管理

 

 

封装getMapper

 

封装完成,使用

 

 

  1. Struts2+MyBatis整合 (SM项目)
    核心思路:在JavaEE编程结构中,根据框架的特点进行合理的使用。

    注册
    编程:
    1. 环境搭建
      引入jarjar包冲突问题
      引入配置文件
      初始化配置 struts2 web.xml filter
                 mybatis-config.xml
    2. 开发步骤



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!