栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis(一)

文章目录

Mybatis

一、MyBatis简介

1.1 什么是MyBatis?1.2 MyBatis历史1.3 为什么要使用MyBatis?1.4 MyBatis文档1.5 原始jdbc操作的分析 二、MyBatis的快速入门

2.1MyBatis开发步骤:

2.1.1 导入MyBatis的坐标和其他相关坐标2.1.2 创建user数据库表2.1.3 编写User实体2.1.4 编写UserMapper.xml映射文件2.1.5 编写UserMapper核心配置文件2.1.6 编写测试代码 三、MyBatis的核心配置文件四、MyBatis核心配置文件概述

4.1 MyBatis常用配置解析

4.1.1 environments标签4.12 databaseIdProvider环境4.1.3 mapper标签4.1.4 Properties标签4.1.5 typeAliases标签4.1.6 Setting设置 4.2 MyBatis核心配置文件深入

4.2.1 typeHandlers标签4.2.2 plugins标签 五、MyBatis的DAO层开发六、 MyBatis映射文件深入 动态SQL

6.1 if6.2 foreach6.3 choose、when、otherwise6.4 SQL片段抽取

Mybatis 一、MyBatis简介

• MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
• MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
• MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

1.1 什么是MyBatis?

mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。

1.2 MyBatis历史

• 原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis ,代码于2013年11月迁移到Github(下载地址见后)。
• iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。 iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

1.3 为什么要使用MyBatis?

• MyBatis是一个半自动化的持久化层框架。
• JDBC
– SQL夹在Java代码块里,耦合度高导致硬编码内伤
– 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
• Hibernate和JPA
– 长难复杂SQL,对于Hibernate而言处理也不容易
– 内部自动生产的SQL,不容易做特殊优化。
– 基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降。
• 对开发人员而言,核心sql还是需要自己优化
• sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据。

1.4 MyBatis文档

• https://github.com/mybatis/mybatis-3/ github上的资源

• http://www.mybatis.org/mybatis-3/ mybatis官网

下面有download lasted 点击它可以下载文档

1.5 原始jdbc操作的分析

原始jdbc开发存在的问题如下:
① 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
② sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。
③ 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位
符位置

应对上述问题给出的解决方案:
① 使用数据库连接池初始化连接资源
② 将sql语句抽取到xml配置文件中
③ 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

二、MyBatis的快速入门 2.1MyBatis开发步骤:
① 添加MyBatis的坐标
② 创建user数据表
③ 编写User实体类
④ 编写映射文件UserMapper.xml
⑤ 编写核心文件SqlMapConfig.xml
⑥ 编写测试类
2.1.1 导入MyBatis的坐标和其他相关坐标

    org.mybatis
    mybatis
    3.4.5



    mysql
    mysql-connector-java
    5.1.6
    runtime



    junit
    junit
    4.12
    test



    log4j
    log4j
    1.2.12

2.1.2 创建user数据库表 2.1.3 编写User实体
public class User {
    private int id;
    private String username;
    private String password;
    //省略get个set方法
}
2.1.4 编写UserMapper.xml映射文件



    
        select * from User
    

注意: 一般创建在resources下 如果用多个文件夹 需要使用 com/itheima/dao/UserMapper.xml 要不然会找不到这个文件

2.1.5 编写UserMapper核心配置文件


    
    
        
            
            
                
                
            
        
    
    #将UserMapper.xml映射sql进行注册
      

2.1.6 编写测试代码
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();
三、MyBatis的核心配置文件

映射文件指导着MyBatis如何进行数据库增删改查,
有着非常重要的意义;
•cache –命名空间的二级缓存配置
•cache-ref – 其他命名空间缓存配置的引用。
•resultMap – 自定义结果集映射
•parameterMap – 已废弃!老式风格的参数映射
•sql –抽取可重用语句块。
•insert – 映射插入语句
•update – 映射更新语句
•delete – 映射删除语句
•select – 映射查询语句

insert、update、delete元素中拥有的

主键生成方式

若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置useGeneratedKeys=”true”,然后再把keyProperty 设置到目标属性上。
四、MyBatis核心配置文件概述

也称为MyBatis-全局配置文件

• MyBatis 的配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息。文档的顶层结构如下:

• configuration 配置
• properties 属性
• settings 设置
• typeAliases 类型命名
• typeHandlers 类型处理器
• objectFactory 对象工厂
• plugins 插件
• environments 环境
• environment 环境变量
• transactionManager 事务管理器
• dataSource 数据源
• databaseIdProvider 数据库厂商标识
• mappers 映射器

4.1 MyBatis常用配置解析 4.1.1 environments标签

实例

    # 指定默认的环境名称
          # 指定当前环境的名称
          # 指定事务管理类型是JDBC
            #指定当前数据源类型是连接池
               # 数据源配置的基本参数
            
            
            
        
    

事务管理器(transactionManager)类型有两种:

• JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
• MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如JEE 
应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置
为 false 来阻止它默认的关闭行为。
• 自定义:实现TransactionFactory接口,type=全类名/别名

数据源(dataSource)类型有三种:

• UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接,不使用连接池
• POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,PooledDataSourceFactory。
• JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
– 自定义:实现DataSourceFactory接口,定义数据源的获取方式。

扩展实例


		
			
			
				
				
				
				
			
		

    #设置另外一个数据库
		
			
			
				
				
				
				
			
		
	
4.12 databaseIdProvider环境

MyBatis 可以根据不同的数据库厂商执行不同的语句。

基本实例

Mybatis全局配置文件


    
    
    
    

映射文件

	
	select * from User

MyBatis全局配置文件

1)使用配置文件进行别名设置

配置typeAliases,为com.itheima.domain.User定义别名为user

	

2)使用@Alias注解为其指定一个别名

@Alias("user")
public class User{}

映射文件

# resultType中的user为别名
       
        select * from User where id=#{id}                  
      

六、 MyBatis映射文件深入 动态SQL

• 动态 SQL是MyBatis强大特性之一。极大的简化我们拼装SQL的操作。
• 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。
• MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。

– if
– choose (when, otherwise)
– trim (where, set)
– foreach

6.1 if

    select * from User
    
        
            #{id}
        
    

执行sql语句为  select * from user where id in (?,?)

参数

foreach标签的属性含义如下:
标签用于遍历集合,它的属性:
• collection:代表要遍历的集合元素,注意编写时不要写#{} 必填, 集合/数组/Map的名称
• open:代表语句的开始部分
• close:代表结束部分
• item:代表遍历集合的每个元素,生成的变量名
• sperator:代表分隔符

扩展 collection的选择

跟接口方法中的参数相关。

1. 只有一个数组参数或集合参数
默认情况:集合collection=list, 数组是collection=array

推荐:使用 @Param 来指定参数的名称, 如我们在参数前@Param(“ids”), 则就填写 collection=ids

2. 多参数
多参数请使用 @Param 来指定, 否则SQL中会很不方便

3. 参数是Map
指定为 Map 中的对应的 Key 即可。其实上面的 @Param 最后也是转化为 Map 的。

4. 参数是对象
使用属性.属性即可。
6.3 choose、when、otherwise

这三个标签需要组合在一起使用,类似于 Java 中的 switch、case、default。只有一个条件生效,也就是只执行满足的条件 when,没有满足的条件就执行 otherwise,表示默认条件。

实例

    Student selectByIdOrName(Student record);
  

me != null and name != ‘’">
and name=#{name}


and 1=2


### 6.4 SQL片段抽取

Sql 中可将重复的 sql 提取出来,使用时用 include 引用即可,最终达到 sql 重用的目的

```xml





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732433.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号