MyBatis技术总结
分类:JavaEE框架技术原创文章
作者: 张岩
-
什么是MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
-
MyBatis中的主要组成部分
Resource:MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,使得从类路径或其它位置加载资源文件更加容易
SqlSessionFactoryBuilder:可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例
SqlSessionFactory:每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得
SqlSession:既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。SqlSessionFactory创建代码示例:
//1.读取配置文件 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); //2.创建SqlSessionFactory SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); ``` >SqlSession:SqlSession 提供了在数据库执行 SQL 命令所需的所有方法,整合了JDBC中的数据库连接、SQL语句的执行,返回集的操作等。声明周期:从连接池中获取连接,到执行完毕归还连接 ##### SqlSession创建代码示例: ```java //1.通过sqlSessionFactory创建SqlSession SqlSession sqlSession = sqlSessionFactory.openSession(); ```
-
MyBatis配置
- 设置(settings)
主要作用:用来配置MyBatis的一些应用,例如日志等等。子节点是setting
设置(settings)代码示例:
<settings> <!-- 开启日志 --> <setting name= "logImpl" value= "STDOUT_LOGGING"/> </settings>
- 类型别名(typeAliases)
主要作用:实体类设置别名,在返回并保存数据库中的数据时用到,子节点是typeAlias
type:数据类型,alias:别名类型别名(typeAliases)代码示例:
<typeAliases> <typeAlias type="com.apesource.entity.Employee" alias="Employee"/> <typeAlias type="com.apesource.entity.EmployeeParam" alias="EmployeeParam"/> <typeAlias type="com.apesource.entity.Order" alias="Order"/> </typeAliases>
- 环境配置(environments)
主要作用:环境集,配置多个环境,例如开发环境,测试环境等等,子节点是environment
环境配置(environments)代码示例:
<environments default="development"> <!-- 开发环境 --> <environment id="development"> <!-- 事务管理器 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="${driver_class}" /> <!-- &符号不能直接使用转义为:$amp; --> <property name="url" value="${jdbc_url}" /> <property name="username" value="${db_username}" /> <property name="password" value="${db_password}" /> </dataSource> </environment> </environments>
- 映射器(mappers)
主要作用:管理SQL语句的映射
mapper是每一个SQL语句映射的文件,注意:文件地址用/分隔映射器(mappers)代码示例:
<!-- 映射管理 --> <mappers> <mapper resource="com/apesource/dao/mapper/EmployeeMapper.xml"/> <mapper resource="com/apesource/dao/mapper/OrderMapper.xml"/> </mappers>
-
MyBatis XML 映射器
1.常用节点作用总结
- select :查询操作节点,返回类型一般都是自定义实体类,有多条件查询操作,参数类型一般是自定义实体类。
- update:修改操作节点,返回类型一般为int,参数类型一般是自定义实体列,一般不修改null字段
- delete:删除操作节点,返回类型一般为int,参数类型一般是int,有批量删除操作。
- insert:插入操作节点,返回类型一般为int,参数类型一般为自定义实体类,有批量添加等操作
2.常用属性作用总结
- id 属性:唯一标识节点名,与相同包下相同的接口方法名相同。
- resultType 属性:返回类型,相同包下相同的接口返回类型相同。可以自动添加到集合内。
- parameterType 属性:参数类型,相同包下相同的接口参数类型相同。
- useGeneratedKeys属性:主键回填操作开启,为true
- keyProperty属性:回填值保存到resultType 类下的属性中。
3.常见SQL映射示例
示例1:普通增加
SQL映射配置:<insert id="方法名" parameterType="参数类型" useGeneratedKeys="true" keyProperty="回填属性名"> INSERT INTO 表明('字段1','字段2','字段3') VALUES(#{类属性名1},#{类属性名2},#{类属性名3}) </insert>
接口方法定义:返回值 方法名(参数类型 参数名);
示例2:批量增加
SQL映射配置: <insert id="方法名" parameterType="list"> INSERT INTO answer_record('字段1','字段2','字段3','字段4')VALUES <foreach collection="list" item="集合元素" separator="分隔符"> ( #{集合元素.属性名}, #{集合元素.属性名}, #{集合元素.属性名}, #{集合元素.属性名}, ) </foreach> </insert>
接口方法定义:返回值 方法名(集合类型 参数名);
>示例3:普通删除
>```xml
>SQL映射配置:<delete id="方法名">
> DELETE FROM 表名
> where条件
> </delete>
```
>>```java
>> 接口方法定义: int 方法名(int recordId);
```
>示例4:批量删除
>```xml
>SQL映射配置:
><delete id="方法名" parameterType="list">
> DELETE FROM 表名
> WHERE 字段名 IN
> <foreach collection="list" item="集合元素" open="(" close=")"
> separator=",">
> #{集合元素}
> </foreach>
></delete>
>```
>>```java
>> 接口方法定义: int 方法名(集合类型 参数名);
>>```
>示例5:动态修改
>```xml
>SQL映射配置:
><update id="方法名" parameterType="参数类型">
> UPDATE
> 表名
> <set>
> <!- 判断属性是否为空->
> <if test="类属性名 != null">字段名 = #{类属性名},</if>
> <if test="类属性名 != null">字段名 = #{类属性名},</if>
> </set>
> WHERE 字段名 =#{类属性名}
></update>
>```
>>```java
>> 接口方法定义:返回类型 方法名(参数类型 参数名);
>>```
>示例6:动态查询
>```xml
>SQL映射配置:
><select id="方法名"
> parameterType="参数类型" resultType="返回类型">
> SELECT 字段名1 AS 别名1 ,字段名2 AS 别名2
> FROM 表名
> <where>
> <if test="类属性名 != null"> AND 字段名 = #{类属性名}</if>
> <!-- 模糊查询连接字符串,concat方法 -->
> <if test="类属性名 != null">AND 字段名 Like concat('%',#{类属性名},'%') </if>
> </where>
>
></select>
>```
>>```java
>> 接口方法定义 返回类型 方法名(参数类型 参数名)
>>```
>示例7:查询结果封装为Map
>```xml
>SQL映射配置:
><select id="方法名"
> parameterType="参数类型" resultType="map">
> SELECT 字段名1 AS 别名1 ,字段名2 AS 别名2
> FROM 表名
> WHERE 条件
></select>
>```
>>```java
>> 接口方法定义:Map<数据类型> 方法名(参数类型 参数名)
>>```
网友评论