myBatis框架

1.传统的jdbc开发:

开发过程
1)加载驱动
2)获取链接connection
3)获取预处理对象statement
4)设置sql (采用占位符,防止sql注入)
5)给占位符设置值
6)执行获取结果集
7)对结果集进行封装
8)释放资源
开发问题:
1)频繁的创建链接
2)释放资源 造成了系统资源的浪费。 --》 数据库连接池
3)sql语句在java代码中,造成后期维护不易。
4)占位符设置值 存在硬编码。where语句里 条件不固定,造成维护不易
5)对结果集的解析封装 存在硬编码

​2.ORM简介

Object Relational Mapping: 对象关系映射。
简单的理解为:ORM是通过 使用描述对象和数据库之间的映射关系的 元数据,将程序中的 对象自动的持久化到关系型数据库中。

3.mybatis架构

mybatis是一个ORM框架,是一个基于Java的[持久层]框架。
​ mybatis会对jdbc的操作过程进行封装,使得开发者只需要关注SQL本身,而无需去花费精力去处理 注册驱动、获取链接、
设置参数、结果集解析、 释放资源等工作,可以简化jdbc开发成本。

4.mybatis环境搭建
​ 1.新建java项目,导入jar包
​ 2.配置log4j.properties 打印日志
​ 3.配置mybatis全局配置文件

<environments default="mysql">
		<environment id="mysql">
			<!-- 事务管理 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 数据源 -->
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
<!-- 加载映射文件 -->
	<mappers>
		<mapper resource="UserMapper.xml"/>
	</mappers>

5.会话工厂与会话

SqlSessionFactory: 会话工厂,通过全局配置文件创建的,由SqlSessionFactoryBuild对象创建。
​ 作用:创建会话。
​ 特点:会话工厂一旦创建,就会在应用程序的执行期间一直存在。我们就不需要重复的来创建这个会话工厂了。
所以我们应该 把它的实现方式设计为 单例模式的。
SqlSession: 会话。 作用:操作数据库。
​ 特点:线程不安全的。应该把会话声明为局部的。

6.动态代理实现sql查询

只需要程序员编写Mapper接口(相当于dao接口),和映射文件,由 mybatis框架根据接口来创建接口的动态代理对象,
来代理接口方法的实现(类似于传统dao开发方式中的实现类)
规范要求:
1.mapper.xml映射文件 和 mapper接口的名字 必须一致。
2.mapper.xml映射文件的 namespace 与 接口 的类全路径相同
3.mapper.xml映射文件的 statement的id 与 接口的方法名相同
4.mapper.xml映射文件 的参数类型parameterType 与 接口方法的 参数类型相同
5.mapper.xml映射文件 的输出结果类型 与 接口方法的 返回类型相同

7.Mapper.xml详解
parameterType(输入类型)
java简单类型 int、String #{占位符的方式,任意字符}
pojo自定义对象 新增 #{pojo的属性名}

hashmap

<!-- hashmap用例取值方式: #{map的key}
			注意: 当使用map中不存在的key取值时,取值为空null。 代码此处不报错-->
			<select id="selectByMap" parameterType="map" resultType="User">
				select * from user where sex = #{sex} and address like concat ("%",#{address},"%")
			</select>

多参数的

<!-- 多参数的 用例parameterType 可以省略掉@Param: 作用:把注解的对象 set放到了map中 ,key就是("")
			第二种取值方式: #{index}, 下标index从0开始-->
			<select id="selectByParams" resultType="User">
				<!-- select * from user where sex = #{sex} and address like concat ("%",#{address},"%") -->
				select * from user where sex = #{0} and address like concat ("%",#{1},"%")
			</select>

resultType(输出类型)
java简单类型的
pojo自定义对象
hashmap

resultMap
resultType:在指定pojo对象接收 映射的结果集时, 需要要将 pojo对象的属性名 和 数据库表的字段名要一致。
如果有不一致的,则查询的改字段为null。

解决对象属性名与表的类名不一致的方法:
方案一:给sql查询的字段 as 别名, 别名和pojo对象的属性名一致
SELECT carId carId, name carName , userId userId from car

方案二:使用resultMap方式

8.动态sql,实现sql语句的拼接

<!-- 动态sql :if用例
	if: 语句判断, <if test=""> 使用and进行的并
	where: 去除多余的and 或者是 or-->
	
	<select id="selectIf" parameterType="map" resultType="User">
		select * from user
		<where>
			<if test="sex!=null and sex!=''">
				and sex = #{sex}
			</if>
			<if test="address!=null and address!=''">
				and address like concat ("%",#{address},"%")
			</if>
		</where>
	</select>

foreach: 批量删除
collection:集合的类型 。 可以是 list(list集合) / array(数组) / map /pojo包装类中的 属性名
item: 循环中的当前对象
open:循环的开始
close:循环的介绍
separator: 分割符

<delete id="deleteBatch" parameterType="int">
	delete from user where id in
	<foreach collection="list" item="id" open="(" close=")" separator=",">
		#{id}
	</foreach>
</delete>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值