Mybatis的介绍及使用

导读:本篇文章讲解 Mybatis的介绍及使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

Mybatis

搭建MyBatis开发环境

1、创建Maven工程,导入MyBatis依赖的组件

2、编写MyBatis核心配置文件(mybatis-config.xml)

3、创建实体类-POJO

4、创建SQL映射文件(mapper.xml)

5、创建测试类


Mybatis

MyBatis是一款优秀的持久层框架,用于简化JDBC开发
MyBatis 本是 Apache的一个开源项目iBatis, 2010年这个项目由apache softwarefoundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github

官网:mybatis – MyBatis 3 | 入门

持久层

负责将数据到保存到数据库的那一层代码

JavaEE三层架构:表现层、业务层、持久层

框架

框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

JDBC缺点

1.硬编码:注册驱动,获取连接,SQL语句

2.操作繁琐:手动设置参数,手动封装结果集

Mybatis特点

1、基于SQL语法,简单易学

2、能了解底层封装过程,内部通过JDBC访问数据库的操作

3、SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度

4、方便程序代码调试

ORM(Object Relational Mapping)

对象/关系映射,是一种数据持久化技术。它在对象模型关系型数据库之间建立起对应关系,

并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。

编写程序的时候,以面向对象的方式处理数据。

保存数据的时候,却以关系型数据库的方式存储。

ORM解决方案包含下面四个部分:

1、在持久化对象上执行基本的增、删、改、查操作

2、对持久化对象提供一种查询语言或者API

3、对象关系映射工具

4、提供与事务对象交互、执行检查、延迟加载以及其他优化功能

搭建MyBatis开发环境

1、创建Maven工程,导入MyBatis依赖的组件

找到pom.xml在dependencies中添加依赖 

Mybatis的介绍及使用

2、编写MyBatis核心配置文件(mybatis-config.xml)

configuration 配置
properties    可以配置在Java 属性配置文件中
settings    修改 MyBatis 在运行时的行为方式
typeAliases   Java 类型命名一个别名(简称)
typeHandlers   类型处理器
objectFactory   对象工厂
plugins   插件
environments   环境
environment   环境变量
transactionManager  事务管理器
dataSource   数据源
mappers    映射器

 配置properties元素的两种方式

1、通过外部指定的方式,即配置在典型的Java属性文件中(如:database.properties),实现动态配置

2、直接配置为xml,并使用这些属性对配置项实现动态配置

通过外部指定的方式(database.properties),实现动态配置

配置propertiesresource属性

<properties>
		<property name="driver" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
		<property name="user" value="root"/>
		<property name="password" value=“aptech"/>
</properties>
......
<dataSource type="POOLED">
		<property name="driver" value="${driver}"/>
		<property name="url" value="${url}"/>
		<property name="username" value="${user}"/>
		<property name="password" value="${password}"/>
</dataSource>

 若两种方式同时都用了,那么哪种方式优先?

配置propertiesresource指定

配置propertynamevalue

<properties resource="database.properties">
	<property name="driver" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
	<property name="user" value="root"/>
	<property name="password" value="root"/>
</properties>

  resource属性值的优先级高于property子节点配置的值

settings元素

作用:是设置一些非常重要的设置选项,用来设置和改变MyBatis运行时的行为方式 

设置项

描述

允许值

默认值

cacheEnabled

对在此配置文件下的所有cache 进行全局性开/关设置

true | false

true

lazyLoadingEnabled

全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载

true | false

true

autoMappingBehavior

MyBatis对于resultMap自动映射匹配级别

NONE |

PARTIAL |

FULL

PARTIAL

typeAliases元素

作用:配置类型别名,通过与MyBatis的SQL映射文件相关联,减少输入 多余的完整类名,以简化操作。

<typeAliases>
	<package name ="cn.smbms.pojo" />
</typeAliases>

 environments元素

表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上

子元素节点:environment,但是必须指定其中一个默认运行环境(通过default指定)

注意:每个SqlSessionFactory实例只能选择一个运行环境

Mybatis的介绍及使用

dataSource

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源

有三种内建的数据源类型

<dataSource type=" [UNPOOLED | POOLED | JNDI]" />
<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
 	<property name="url" value="${url}"/>
	<property name="username" value="${user}"/>
	<property name="password" value="${password}"/>
</dataSource>

mappers元素

作用:映射器,定义SQL映射语句

须在配置中引用mapper映射文件

方式一:使用类资源路径获取资源

<!-- 将mapper映射文件加入到系统核心配置文件中 -->
<mappers>
	<mapper  resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>

 方式二:使用URL获取资源

<mappers>
		<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
		<mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
</mappers>

3、创建实体类-POJO

4、创建SQL映射文件(mapper.xml)

SQL映射文件的几个顶级元素(按照定义的顺序)

mapper namespace
cache 配置给定命名空间的缓存
cache-ref 从其他命名空间引用缓存配置
resultMap 用来描述数据库结果集和对象的对应关系
sql 可以重用的SQL块,也可以被其他语句引用
insert 映射插入语句
update 映射更新语句
delete 映射删除语句
select 映射查询语句

mapper

namespace:命名空间

namespace和子元素的id联合保证唯一,区别不同的mapper

绑定DAO接口

namespace的命名必须跟某个接口同名

接口中的方法与映射文件中SQL语句id一一对应

示例:

<mapper namespace="cn.cvs.dao.sysuser.SysUserMapper">
	<select id="getUserList" …
		……
	</select>
</mapper>

select语句有很多属性可以详细配置每一条语句

id:命名空间中唯一的标识符

接口中的方法与映射文件中的SQL语句id一一对应

parameterType:

表示查询语句传入参数的类型的完全限定名和别名

支持基础数据类型和复杂数据类型

resultType

SQL语句返回值类型的完整限定名或别名

示例:仅传入一个简单数据类型的查询条件,如一个基本类型或其包装类型,或一个String类型等,MyBatis框架的处理方式也非常简单。需求:根据真实姓名模糊查询用户信息

1.SysUserMapper接口中添加查询方法

List<SysUser>  getUserListByRealName(String realName);

2SysUserMapper.xml中添加SQL语句映射

select * from t_sys_user where realName like CONCAT ('%', #{param}, '%')

 3、在单元测试类中添加测试方法

List<SysUser> userList =sqlSession.getMapper(SysUserMapper.class) .getUsersByRealName("李");

别名与Java类型映射

别名 映射的类型
string String
byte Byte
long Long
short Short
double Double
float Float
boolean Boolean
date

Date

int Integer

integer

Integer
arraylist ArrayList
map Map
list List

collection

Collection
iterator Iterator
decimal BigDecimal
bigdecimal BigDecimal
object Object

……

……

parameterType

基础数据类型

int、StringDate等,一个参数传递单一数值

用@Param注解为参数命名,通过 #{参数名} 获取传入的值

复杂数据类型

Java实体类,Map

通过#{属性名}或者#{mapkeyName}即可获取传入值

resultType :直接表示返回类型

基本数据类型

复杂数据类型

resultMap :对外部resultMap的引用

应用场景:

数据库字段信息与对象属性不一致

复杂的联合查询,自由控制映射结果

二者不能同时存在,本质上都是Map数据结构

resultMap自动映射匹配前提:字段名与属性名一致

resultMap的自动映射级别autoMappingBehavior

PARTIAL(默认):自动匹配所有

NONE:进制自动匹配

<settings>
	<setting  name="autoMappingBehavior" value="NONE"/>
</settings>

 insert属性:id、parameterType

<insert  id="add" parameterType="User" >
 insert into  smbms_user (userCode,userName,userPassword) 
		values ( #{userCode},#{userName},#{userPassword})
</insert>

 注意:insertupdatedelete元素均没有resultType属性

update属性:id、parameterType

<update id ="modify" parameterType="User">
update smbms_user set userCode = #{userCode},
	         userName = #{userName},
              userPassword = #{userPassword}  where id = #{id}
</update>

 delete属性:id、parameterType

<delete id ="deleteUserById" parameterType="int">
	delete from smbms_user where id = #{id}
</delete>

 resultMap属性

id:resultMap的唯一标识

type:Java实体类

resultMap子元素

id:一般对应数据库中该行的主键id,设置此项可提高MyBatis性能

result:映射到JavaBean的某个“简单类型”属性

association:映射到JavaBean的某个“复杂类型”属性,比如JavaBean

collection:映射到JavaBean的某个“复杂类型”属性,比如集合

association

复杂的类型关联,一对一

内部嵌套:映射一个嵌套JavaBean属性

属性

property:映射数据库列的实体对象的属性

javaType:完整Java类名或者别名

resultMap:引用外部resultMap

子元素:id、result

property:映射数据库列的实体对象的属性

column:数据库列名或者别名

collection

复杂类型集合,一对多

内部嵌套、映射一个嵌套结果集到一个列表

属性

property:映射数据库列的实体对象的属性

ofType:完整Java类名或者别名(集合所包括的类型)

resultMap:引用外部resultMap

子元素:id、result

property:映射数据库列的实体对象的属性

column:数据库列名或者别名

5、创建测试类

1、读取核心配置文件mybatis-config.xml

2、创建SqlSessionFactory对象,读取配置文件

3、创建SqlSession对象

4、调用mapper文件进行数据操作

SqlSessionFactory

SqlSessionFactory是每个MyBatis应用的核心

作用:创建SqlSession实例

SqlSessionFactory工具类

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        String mybatisPath = "mybatis/mybatis-config.xml";
        //1、加载mybatis配置文件
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream(mybatisPath);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //2、根据mybatis配置文件,创建生成SqlSession的factory工厂
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    }
    public static SqlSession createSqlSession(){
        if (sqlSessionFactory != null){
            return sqlSessionFactory.openSession();
        }
        return null;
    }
    public static void closeSqlSession(SqlSession sqlSession){
        if (sqlSession != null){
            sqlSession.close();
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97167.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!