mybatis入门及配置解析

一、快速入门

1. 引入pom
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.32</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.8</version>
</dependency>
2. 编写全局配置文件(mybatis-config.xml)
3. 配置映射文件Mapper
1)配在全局文件中包含
2)集成spring可以用 MapperScannerConfigurer的basePackage来配置要扫描成mapper的路径
4. 编码
public class TestMybatis {

    @Test
    public void test() throws IOException {
        // 1、根据mybatis全局配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        // 使用MyBatis提供的Resources类加载mybatis的配置文件,获取输入流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 构建sqlSession的工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2、从SqlSession工厂中,获取sqlsession,用来执行sql
        SqlSession session = sqlSessionFactory.openSession();
        try {
            // 查询selectOne(用getMapper()方法也可以)
            Employee employee = (Employee) session.selectOne("com.hd.test.mapper.EmployeeMapper.getEmployeeById", 1);
            // 输出信息
            System.out.println(employee);
        } finally {
            // 关闭session
            session.close();
        }
    }
    
}

二、全局配置文件(mybatis-config.xml)

1. environment属性
1)MyBatis提供的多环境适应机制,例如开发、测试、生产环境都需要有不同的配置
2. properties属性
1)该属性主要作用就是引入外部的properties是文件,文件格式为xxx=xxx
2)eg: <properties resource="jdbc.properties"></properties>
3. settings属性
1)调整 settings 中的设置是非常关键的,它们会改变 MyBatis 的运行时行为
	(1)cacheEnabled   		该配置影响的所有映射器中配置的缓存的全局开关
	(2)lazyLoadingEnabled   	延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态	
	(3)logPrefix  			指定 MyBatis 增加到日志名称的前缀
	(4)logImpl 				指定 MyBatis 所用日志的具体实现,未指定时将自动查找	
4. typeAliases别名
1)类型别名是为 Java 类型命名的一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余
5. mapper映射器
1)<mappers>
		<mapper resource="usermapper.xml"/>
	</mappers>	
6. plugins插件
1)MyBatis中的插件,其实类似于拦截器的效果,可以实现在MyBatis的整个运行流程中的 某些指定位置进行拦截
	(1) Executor:对执行器进行拦截
	(2) ParameterHandler:参数处理时进行拦截
	(3) ResultSetHandler:处理结果集,封装Java对象时进行拦截
	(4) StatementHandler:编译statement时进行拦截

三、映射文件Mapper

1. CRUD标签
1)select
	(1)id:当前名称空间下的statement的唯一标识。必须。要求id和mapper接口中的方法的名字一致
	(2)resultType:将结果集映射为java的对象类型。必须(和 resultMap 二选一)
	(3)parameterType:传入参数类型。可以省略(或者在Dao层加@Param注解映射,多个参数的时候很有用)
2)insert	
	(1)id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
	(2)parameterType:参数的类型,使用动态代理之后和方法的参数类型一致	
	(3)useGeneratedKeys:开启主键回写 (会返回插入的表id)
	(4)keyColumn:指定数据库的主键
	(5)keyProperty:主键对应的pojo属性名
3)update
	(1)id:当前名称空间下的statement的唯一标识(必须属性)
	(2)parameterType:传入的参数类型,可以省略	
4)delete
	(1)id:当前名称空间下的statement的唯一标识(必须属性)	
	(2)parameterType:传入的参数类型,可以省略
2. #{}和${}
1)#{} 只是替换?,相当于PreparedStatement使用占位符去替换参数,可以防止sql注入
2)${} 是进行字符串拼接,相当于sql语句中的Statement,使用字符串去拼接sql;$可以是sql中的任一部分传入到Statement中,不能防止sql注入
3)#{} 只是表示占位,与参数的名字无关,如果只有一个参数,会自动对应(多个的话Dao层加@Param注解,${} 也可以这样用)
3. resultMap
1)概念
	(1)ResultMap是Mybatis最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中
	(2)完成高级查询,比如一对一,一对多,多对多
2)属性说明
	(1)id: resultMap标签的标识
	(2)type: 返回值的全限定类名,或类型别名
	(3)autoMapping: 值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法
3)子元素说明
	(1)id : 用于设置主键字段与领域模型属性的映射关系 	
	(2)result: 用于设置普通字段与领域模型属性的映射关系
		a. property : 需要映射到JavaBean 的属性名称
		b. column : 数据表的列名或者标签别名
		c. javaType : 一个完整的类名,属性的java类型
		d. jdbcType :JDBC类型
		e. typeHandler : 数据库与Java类型匹配处理器
	(3)association联合(联合元素用来处理“一对一”的关系)
		a. 概念
			需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler
		b. 不同情况需要告诉MyBatis 如何加载一个联合。MyBatis 可以用两种方式加载
			select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活
			resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型	
		c. 属性
			select:指定嵌套SQL,可以是本XML或者其他XML文件中的<select>	
			fetchType:延迟加载,lazy打开延迟加载;eager积极加载
	(4)collection聚集(聚集元素用来处理“一对多”的关系)
		a. 概念
			需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称
		b. 不同情况需要告诉MyBatis 如何加载一个聚集。MyBatis 可以用两种方式加载
			select: 执行一个其它映射的SQL 语句返回一个Java实体类型。较灵活		
			resultsMap: 使用一个嵌套的结果映射来处理通过join查询结果集,映射成Java实体类型(用的时候id最好取别名)
		c. 属性
			select:指定嵌套SQL,可以是本XML或者其他XML文件中的<select>	
			fetchType:延迟加载,lazy打开延迟加载;eager积极加载	
4. sql片段
1)定义可重用的部分,然后 <include refid="paymentOrderSql"></include>
5. 动态sql
1)if(注意 null和空串‘’ 赋值和判断相等的区别)
	<if test="name!=null and name.trim()!=''"> 

	</if>
2)choose when otherwise
	<choose>
        <when test='"Y" == isSuperVip '>
            and source = 'superVip'
        </when>
        <otherwise>
            and source != 'superVip'
        </otherwise>
    </choose>
3)update中的where
	update table_name set name = "a"
	<where>            
		<if test="emsType!=null  and emsType!=''">
             emsType=#{emsType}
        </if>
        <if test="goodsOrderNo!=null and goodsOrderNo!=''">
            and goodsOrderNO=#{goodsOrderNo}
        </if>
    </where>     
4)foreach (一般和in一起用)
	    <foreach collection="ids" item="id" open="(" close=")" separator=",">
	        #{id}
	    </foreach>
6. 其他
1)sql语句中出现’<’ 
	(1)使用xml中的字符实体 —— &lt 、&gt 		  
2)<![CDATA[ < ]]>
	(1)被<![CDATA[]]>这个标记所包含的内容将表示为纯文本
	(2)比如<![CDATA[ a < c ]]>表示文本内容“a < c”

参考网址

Mybatis教程-实战看这一篇就够了*

注:文章是经过参考其他的文章然后自己整理出来的,有可能是小部分参考,也有可能是大部分参考,但绝对不是直接转载,觉得侵权了我会删,我只是把这个用于自己的笔记,顺便整理下知识的同时,能帮到一部分人。
ps : 有错误的还望各位大佬指正,小弟不胜感激

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值