基本了解
什么是MyBatis?
MyBatis做了什么?
历史:
Mybatis的简单配置
在新建的project的src目录下,新建mybatis-config.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" PUBLIC "-//mybatis.org//DTD Config 3.0//EN"> -<configuration> -<settings> <setting value="true" name="mapUnderscoreToCamelCase"/> <setting value="true" name="lazyLoadingEnabled"/> </settings> -<typeAliases> <typeAlias alias="Employee" type="com.test.entity.Employee"/> <typeAlias alias="Customer" type="com.test.entity.Customer"/> </typeAliases> -<environments default="local"> -<environment id="local"> <transactionManager type="JDBC"/> -<dataSource type="POOLED"> <property value="com.mysql.jdbc.Driver" name="driver"/> <property value="jdbc:mysql://localhost:3306/orcl" name="url"/> <property value="username" name="username"/> <property value="password" name="password"/> </dataSource> </environment> </environments> -<mappers> <mapper resource="com/test/data/employee-mapper.xml"/> <mapper resource="com/test/data/customer-mapper.xml"/> </mappers> </configuration> </textarea>
Mybatis的使用
配置Maven,pom.xml配置mybatis-config.xml文件。
创建出SqlSessionFactory(建造者模式,单例模式)
准备好实体类,mapper配置文件
可以在Service层写代码了
说到这里,应该提到MyBatis的逆向工程。逆向工程使用起来也极为简单。一共有三个文件。我会上传到资源里面去。
https://download.csdn.net/download/wuzhixiu007/10445170
逆向工程使用步骤:
1:修改generator.xml文件
2:在generator.xml文件路径中进入dos系统,
复制java -jar mybatis-generator-core-1.3.5.jar -configfile generator.xml –overwrite
回车。
Mybatis的框架
在框架支撑层还有事务控制和缓存机制,这里就不多做赘述了。
Mybatis的核心组件
SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能;
Executor:MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护;
StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合;
ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数;
ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换;
MappedStatement:MappedStatement维护了一条<select|update|delete|insert>节点的封装,
SqlSource:负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回。
BoundSql:表示动态生成的SQL语句以及相应的参数信息;
Configuration:MyBatis所有的配置信息都维持在Configuration对象之中。
Mybatis的优劣
优点:
1. 与JDBC相比,减少了50%以上的代码量。
2. MyBatis是最简单的持久化框架,小巧并且简单易学。
3. MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
4. 提供XML标签,支持编写动态SQL语句。
5. 提供映射标签,支持对象与数据库的ORM字段关系映射。
缺点:
1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
总结起来
优点:封装少,高性能,易维护,可优化,小巧简单。
缺点:依赖数据库,工作量略大。
FAQ
1. #{} 和${}的区别?
#{}是预编译处理,${}是字符串替换。
Mybatis在处理#{}时,会将sql中的#{}替换为?号;
Mybatis在处理${}时,就是把${}替换成变量的值。
使用#{}可以有效的防止SQL注入,提高系统安全性。
2.mapper中如何传递多个参数?
使用 @param 注解。
3.当实体类中的属性名和表中的字段名不一样?
通过在查询的sql语句中定义字段名的别名
通过<resultMap>来映射字段名和实体类属性名的一一对应的关系4.如何执行批量操作?
以删除为例:
<delete id="removeBatch" parameterType="int"> delete from submit where submit_id IN <foreach collection="array" index="index" item="item" open="(" separator="," close=")"> #{item} </foreach>
item:集合中每一个元素进行迭代时的别名。
index:指定一个名字,用于表示每次迭代过程中,每次迭代到的位置。
open:表示该语句以什么开始。
separator:每次进行迭代的分隔符。
close:表示以什么结束。
collection属性的值必须指定:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list;
2.如果传入的是单参数且参数类型是一个array数组的时候,collection属性值为array;
3.如果传入多个参数,需要将其封装成一个Map。