MyBatis基础学习

MyBatis简介

ORM概念(Object Relational Mapping):
	对象映射关系,是指对象与数据库之间的映射的元数据
MyBatis是一个ORM的实现框架,是一个数据持久层框架,它支持定制化 SQL、存储过程以及高级映射

配置MyBatis

下载jar mybatis.jar,driver
MyBatis基本配置:
config.xml
	<?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">
    <configuration>
    	<!--资源文件-->
    	<properties resource=""/>
    	<!--全局配置-->
		<settings></settings>
		<!--类别名-->
		<typeAliases></typeAliases>
		<!--类型转换器-->
		<typeHandlers></typeHandlers>
		<!--通过environments的default值和environment的id指定运行环境-->
		<environments default="">
			<environment id="">
				<!--事务管理器,type事务的提交方式-->
				<transactionManager type="JDBC"/>
				<!--数据源,使用连接池方式-->
				<dataSource type="POOLED">
					<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				</dataSource>
			</environment>
		</environments>
		<!--mapper.xml配置路径-->
		<mappers></mappers>
	</configuration>    

mapper.xml

	<?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">
	<mapper namespace="命名,对应的接口全类名">

	</mapper>

使用MyBatis

public class MyFirstMyBatisApp{
	public static void main(String[] args){
		//通过SqlSessionFactoryBuilder获取sqlSessionFactory(先获取工厂,然后从工厂中获取SqlSession)
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build("config.xml");
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//执行statement产生的结果集由ResultSetHandler来处理映射
		sqlSession.select(String statement,ResultSetHandler);
		//使用动态代理方式
		Mapper mapper = sqlSession.getMapper(Mapper.class);
		mapper.xxx();
	}
}

MyBatis的sql标签以及参数,返回值

	<!--结果集映射,Java属性名与表字段名不匹配时,可以使用-->
	<resultMap id=""></resultMap>

	<select parameterType="传入参数类型" resultType="返回值类型">
	
	</select>
	<insert></insert>
	<update></update>
	<delete></delete>

类型转换器

MyBatis自带一些类型转换器
自定义类型转换器:
需要实现TypeHandler接口
通过里面的方法实现转换

	<typeHandlers>
		<typeHandler handler="转换器地址" javaType="要转换的Java类型" jdbcType="数据库类型"/>
	</typeHandlers>

MyBatis动态SQL

	<if test="条件,满足则拼接下面的sql语句">
		id=#{id}
	</if>
	<where>	<!--可以去掉多余的and-->
		<if test="条件">
			
		</if>
	</where>
	<trim prefix="前缀" suffixOverrides="后缀"><!--可以去掉多余的and,根据suffixOverrides和prefix来判断and是前缀还是后缀-->
		<if test="条件"></if>
	</trim>
	<set><!--代替sql中的set,可以去掉多余逗号(,)-->
		<if test=""></if>
	</set>
	<foreach collection="类型(array,list)" item="变量名" open="开始符号" close="结束符号" separator="分隔符">
		<!--参数是数组或集合类型可以用foreach标签遍历-->
		#{变量名}
	</foreach>
	<!--将重复的sql提取出来-->
	<sql></sql>

MyBatis 一对一,一对多

	<resultMap id="">
		<association>
			...一对一
		</assiciation>
		...使用collection实现一对多
		<collection property="属性名" select="查询" column="列名"></collection>
	</resultMap>

MyBatis延迟加载

延迟加载:先从单表中查询,需要时才从关联的表中查询,提高数据库性能
在config.xml中配置:

	<settings>
		<!--开启延迟加载-->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!--关闭立即加载-->
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>

MyBatis缓存

一级缓存:MyBatis默认开启一级缓存
如果是同一个SqlSession,则在第二次做相同的查询时会在缓存中找(只执行一次sql)
二级缓存:MyBatis自带二级缓存,二级缓存是指同一个namespace生成的mappre对象(默认关闭二级缓存)
开启二级缓存:

	<!--config.xml配置-->
	<settings>
		<setting name="cacheEnabled" value="true"/>
	</settings>
	<!--mapper.xml配置
	声明开启二级缓存:-->
	<cache/>
	<!--禁用二级缓存
		设置某一个查询的 useCache="false"(默认为true)
		清理缓存
		与一级缓存清理方法相同(增删改时会清理缓存)
		设置flushCache="true"
	-->
	<!--
		第三方提供的二级缓存(ehcache,memcache)
		mapper.xml中配置实现了cache接口的类
	-->
	<cache type="实现了cache接口的类"></cache>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值