SSM+R之MyBatis

1.MyBatis?
MyBatis的本质就是Java对数据库的操作。
MyBatis=接口+映射器+MyBatis基础配置文件。

2.MyBatis的核心组件分为哪4个?
2.1 SqlSessionFactoryBuilder(构造器):它会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式。
2.2 SqlSessionFactory(工厂接口):依靠它来生成SqlSession,使用的是工厂模式。
2.3 SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。在现有的技术中,一般我们会让其在业务逻辑代码中“消失”,而使用的是MyBatis提供的SQL Mapper接口编程技术,它能提高代码的可读性和可维护性。
2.4 SQL Mapper(映射器):MyBatis新设计存在的组件,它由一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
2.4.1 映射器的主要作用就是将SQL查询到的结果映射为一个POJO,或者将POJO的数据插入到数据库中,并定义一些关于缓存等的重要内容。
2.4.2 MyBatis在默认情况下提供自动映射,只要SQL返回的列名能和POJO对应起来即可。

3.MyBatis组件的生命周期?
根据每一个组件的作用去确定其生命周期。
MyBatis的本质就是Java对数据库的操作。
3.1 SqlSessionFactoryBuilder的作用是创建SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder就失去了作用,所以它只能存在于创建SqlSessionFactory的方法中,而不要让其长期存在。
3.2 SqlSessionFactory(数据库连接池,单利Singleton)的作用是创建SqlSession接口对象,存在于整个MyBatis的应用之中。
3.3 SqlSession(数据库连接 Connection对象)的作用是在一个事务中执行多条SQL语句,存在于一个业务请求中。
3.4 Mapper(执行SQL语句)的作用是一个请求中的业务处理。是一个由SqlSession创建的接口,存在于一个业务请求中。最大生命周期至多和SqlSession保持一致。

4.MyBatis的基础配置文件?

<configuration> <!-- 配置 顺序不能错,否则出现错误 -->
    <properties/><!-- 属性 ①程序传递 > ②properties文件 > ③property子元素 -->
    <settings/><!-- 设置 最复杂,默认即可--> 
    <typeAliases/><!-- 类型命名 MyBatis中别名不区分大小写 ①系统定义别名②自定义别名③扫描package,类别名为类名首字母小写得到的-->
    <typeHandlers/><!-- 类型处理器 ①系统定义②自定义③大多数情况下typeHandler因为枚举而使用④文件操作不常用,性能不佳。大多数情况采用文件服务器的形式-->
    <objectFactory/><!-- 对象工厂 ①默认使用或继承DefaultObjectFactory进行修改-->
    <plugins/><!-- 插件 最强大 单独介绍-->
    <environments><!-- 配置环境 主要作用配置数据库信息,可以配置多个数据库。-->
        <environment><!-- 环境变量 实际工作中,大部分情况采用Spring对数据源和数据库的事务进行管理-->
            <transactionManager/><!-- 事务管理器 -->
            <dataSource/><!-- 数据源 ①UNPOOLED②POOLED③JNDI-->
        </environment>
    </environments>
    <databaseIdProvider/><!-- 数据库厂商标识 -->
    <mappers/><!-- 映射器 单独介绍 ①用文件路径<mapper resource=""/>②用包名<package name="" />③用类注册<mapper class="" />④用userMapper.xml引入映射器<mapper url="" />-->
</configuration>

5.Mapper(映射器)?
5.1 select元素–查询语句
5.1.1 自动映射(默认,常用)和驼峰映射。
5.1.2 传递多个参数的4种方式:
①map(丧失业务可读性,不建议)
②注解@Param(参数个数<=5)
③JavaBean(参数个数>5)
④混合使用(看情况)。
5.1.3 使用resultMap映射结果集。
5.1.4 分页参数RowBounds。(offset是偏移量,limit是限制条数。使用场景是小数据量的查询,大量的数据查询可以通过分页插件去处理。)

5.2 insert元素–插入语句
5.2.1 主键回填。useGeneratedKeys=”true” keyProperty=”“。keyProperty代表用哪个POJO的属性去匹配这个主键。
5.2.2 自定义主键。(不常用)

5.3 update元素–更新语句

5.4 delete元素–删除语句

5.5 sql元素–定义一条SQL的一部分,方便以后引用它,最典型的是列名。

5.6 参数

5.7 resultMap元素
5.7.1 resultMap元素的构成:

<resultMap>
    <constructor><!-- 配置构造方法 -->
        <idArg/><!-- 主键参数 -->
        <Arg/>
    </constructor>
    <id property="" column=""/><!-- 主键 -->
    <result property="" column=""/><!-- 配置POJO到SQL列名的映射关系。 property代表着POJO属性的名称,column表示数据库SQL的列名-->
    <association/><!-- 一对一级联 -->
    <collection/><!-- 一对多级联 -->
    <discriminator><!-- 鉴别器级联 -->
        <case/>
    </discriminator>
</resultMap>

5.7.2 使用map存储结果集。(可读性丧失,不推荐)

5.7.3 使用POJO存储结果集。(常用)

5.8 级联。(单独重点了解)

6.动态SQL?
6.1 if元素–判断语句。单条件分支判断
6.2 choose(when,otherwise)–相当于Java中的switch和case语句。多条件分支判断
6.3 trim(where,set)–辅助元素,用于处理特定的SQL拼装问题,比如去掉多余的and、or等。用于处理SQL拼装的问题
6.4 foreach–循环语句。在in语句等列举条件常用
6.5 bind元素的作用是通过OGNL表达式去自定义一个上下文变量,这样更方便使用。

7.当只传一个参数到sql语句时,可以直接写参数名,当传多个参数时,应当这样写(多个参数已#{0}开始)。

8.实用代码

/**************MyBatis3.4.1可用的头文件**************/
<?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">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

/**************SqlSessionFactoryUtils**************/
public class SqlSessionFactoryUtils{
    private static final Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class;
    private static SqlSessionFactory sqlSessionFactory = null;
    private SqlSessionFactoryUtils(){}

    //getSqlSessionFactory()
    public static SqlSessionFactory getSqlSessionFactory(){
        synchronized(LOCK){
            if(sqlSessionFactory != null){
                return sqlSessionFactory;
            }
            String resource = "mybatis-config.xml";
            InputStream inputStream;
            try{
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }catch(IOException e){
                e.printStackTrace();
                return null;
            }
            return sqlSessionFactory;
        }
    }

    //openSqlSession()
    public static SqlSession openSqlSession(){
        if(sqlSessionFactory == null){
            sqlSessionFactory = getSqlSessionFactory();
        }
        return sqlSessionFactory.openSession();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值