Mybatis学习笔记

Mapper

mapper接口和映射文件要保证两个一致

1.mapper接口的全类名和映射文件的namespace一致

2.mapper接口中的方法的方法名要和映射文件中的sql的id保持一致

mapper.xml文件 查询的时候需要增加属性

id:和方法名必须一致

resultType:设置结果类型,即查询的数据要转换为的java类型

resultMap:自定义的映射,处理多对一或一对多的映射关系
environments:配置连接数据库的环境        	
		属性:     	default:设置默认使用的环境ID
environment:设置一个具体的连接数据库的环境   
		属性:  id:设置环境的唯一标识,不能重复

transactionManager:设置事物管理器  

	属性: type:设置事物管理的方式。
	
	​	有两种属性“JDBC/MANAGED”   
	
	​			JDBC:表示使用JDBC原生的事物管理方式
	
	​			MANAGED:被管理,例如spring

DataSource:设置数据源  

	属性: type:设置数据源的类型	

	type=“POOLED/UNPOOLED/JNDI”		

		POOLED:表示使用数据库连接池
	
		UNPOOLED:表示不使用数据库连接池		
	
		JNDI:表示使用上下文中的数据源		
		
示例:<environments default="development”>

​					<environment id="development”>

​					<transactionManager type="JDBC/MANAGED”>

​					<dataSource type="POOLED/UNPOOLED/JNDI”>
<properties resource="jdbc.propertes"/>  引入 properties 文件,此后就可以在当前文件中使用${key}的方式访问value



<typeAliases>

<typeAlias type="com.example.comman.User" alias="别名"></typeAlias >

typeAliases:设置类型别名,为某个具体的类型设置一个别名,在mybatis范围中,可以使用别名表示一个具体的类型。

</typeAliases>

查询的数据有多条时,并将每条数据转换为map集合,两种方法

  • 将mapper接口方法的返回值设置为泛型是map的list集合
    List<Map<String,Object>> getMap();
    结果{passward=1230}

  • 可以将每条数据转换的map集合放在一个大的map中,但是必须要通过@MapKey注解。将查询的的某个字段的值作为大的map集合的键。

    @MapKey(“Id”)

    Map<String,Object> getMap();

    结果{1={passward=1230},2={}}

<insert 插入自增主键的操作
useGeneratedKeys=true //获取自增主键
keyProperty=“”//将添加的数据的自增主键为实体类类型的参数的属性值

resultMap中各字段的讲解

resultMap:设置自定义的映射关系

id:唯一标识

type:处理映射关系的实体类的类型

常用的标签

ID:处理主键和实体类中属性的映射关系

result:处理普通字段和实体类中属性的映射关系

column:设置映射关系的字段名,必须是sql查询出的某个字段

propert:设置映射关系中的属性的属性名,必须是处理的实体类类型的属性名

字段名和属性名不一致的情况,处理映射关系如下

1.为查询的字段设置别名,和属性名保持一致

2.当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰

此时可以在Mybatis的核心配置文件中设置一个全局配置,可以自动将下划线映射为驼峰

3.使用resultMap自定义映射处理

处理多对一的映射关系:

  • 级联方式处理

  • association

  • 分步查询

    <association property=“”

    ​ select="分步查询的另一个方法的类"设置分布查询sql的唯一标识

    ​ column="dept_id"传输另一个方法所需的参数,由本方法查询得出>

      //开启驼峰映射
      
      <setting name="mapUnderscoreToCamelCase" value="true” />
      
      //开启懒加载
      
      <setting name="lazyLoadingEnabled" value="true” />
      
      //开启按需加载
      
      <setting name="aggressiveLazyLoading" value="true” />
    

动态sql:

1.if

通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到sql中)

2.where

​	a.若where标签中有条件成立,会生成where关键字

​	b.会自动将where标签中内容前多余的and去掉,到那时其中内容后多余的and无法去掉

​	c.若where标签中没有任何一个条件成立,则where没有任何功能

3.trim

​	prefix,suffix:在标签中内容前面或后面添加指定内容

​	prefixoverrides,suffixoverrides:在标签中内容前面或后面去掉指定内容

4.choose,when,otherwise

​	相当于java中的if...else if.....else

​	when至少设置一个,otherwise最多设置一个

5.foreach

collection:设置要循环的数组或集合

item:用一个字符串表示数组或集合中的每一个数据

separator:设置每次循环的数据之间的分隔符

open:循环的所有内容以什么开始

close:循环的所有内容以什么为结束

6.sql片段

可以记录一段sql,在需要用的地方进行引用

<sql id="emp">emp_id,emp_name</sql>

需要用的地方进行引用<include refid="emp"></include>

Mybatis的一级缓存

Mybatis的一级缓存是SqlSession级别的,即通过同一个SqlSession查询的数据会被缓存。下一次查询相同的条件时直接从缓存中获取。

使一级缓存失效的四种方法:

1.不同的SqlSession对应不同的一级缓存

2.同一个SqlSession但是查询的条件不同

3.同一个SqlSession两次查询期间执行了任何一次增删改操作

4.同一个SqlSession两次查询期间手动清空了缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值