Mybatis 使用汇总(介绍,功能,连接池,日志,注解,XML映射文件)
Mybatis 介绍
Mybatis 功能
Mybatis 连接池
mybatis日志
Mybatis 注解
Mybatis XML 映射文件
00.Mybatis 是一款优秀的持久层框架(DAO),它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
官网:https://mybatis.org/mybatis-3/zh/index.html
mybatis相关注解:
01。使用注解开发:
@Mapper
@Select
@Delete
@Update
@Delete("select * from user where id=#{}")
public List<User> delete(Integer id);
@Results 手动映射不一样的字段
@Results(@Result(column = user_name),property="username")
@Select("select dept_id from user where name like concat('%",#{user_name},‘%’)
public List<User> list();
@Test
@SpringBootTest
sql注入:select count(*) from user where username='test' and password='' or 1=1
#{}:执行时会将#{}替换为?生成预编译sql,会自动设置参数值
${}:拼接sql,直接将参数拼接在sql语句中,存在sql注入问题
实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。
如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。解决方案:
1. 起别名 通过 @Results及@Result 进行手动结果映射
2. 结果映射
3. 开启驼峰命名 :user_name--->uaerName# 在application.properties中添加:
mybatis.configuration.map-underscore-to-camel-case=true
02.Mybatis 功能
1. 数据库连接四要素(驱动、链接、用户名、密码),都配置在springboot默认的配置文件
application.properties中
2. 查询结果的解析及封装,由mybatis自动完成映射封装,我们无需关注
3.在mybatis中使用了数据库连接池技术(Hikari(springboot默认)),从而避免了频繁的创建连接、销毁连接而带来的资源浪费
4.使用了mybatis 开发持久层程序操作数据库,只需关注:1.连接字符串,mapper接口
4.使用了mybatis 开发持久层程序操作数据库,只需关注:1.连接字符串,mapper接口
5.数据库连接池技术:
5.1 Druid(德鲁伊)Druid连接池是阿里巴巴开源的数据库连接池项目功能强大,性能优秀,是Java语言最好的数据库连接池之一
5.2 Hikari(springboot默认
6.开起mybatis日志:
application.yml文件开启mybatis日志,可以在运行时在控制台查看日志:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 动态SQL-if,where,set,foreach, include,sql:
:定义可重用的SQL片段, :通过属性refid,指定包含的SQL片段
动态SQL-if,where,set,foreach,:定义可重用的SQL片段, :通过属性refid,指定包含的SQL片段
在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:
1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下
(同包同名)
2. XML映射文件的namespace属性为Mapper接口全限定名一致
3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
<select id="list" resultType="com.it.pojo.Emp">
select * from emp
<where>
<!-- if做为where标签的子元素 -->
<if test="name != null">
and name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
order by update_time desc
</select>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itheima.mapper.EmpMapper">
<!--更新操作-->
<update id="update">
update emp
<!-- 使用set标签,代替update语句中的set关键字 -->
<set>
<if test="username != null">
username=#{username},
</if>
<if test="name != null">
name=#{name},
</if>
<if test="gender != null">
gender=#{gender},
</if>
<if test="image != null">
image=#{image},
</if>
<if test="job != null">
job=#{job},
</if>
<if test="entrydate != null">
entrydate=#{entrydate},
</if>
<if test="deptId != null">
dept_id=#{deptId},
</if>
<if test="updateTime != null">
update_time=#{updateTime}
</if>
</set>
where id=#{id}
</update>
</mapper>
<!--删除操作-->
<delete id="deleteByIds">
delete from emp where id in
<foreach collection="ids" item="id" separator="," open="("
close=")">
#{id}
</foreach>
</delete>
定义可重用的SQL片段:
<sql id="commonSelect">
select id, username, password, name, gender, image, job,
entrydate, dept_id, create_time, update_time from emp
</sql>
<include refid="commonSelect"/>
小结:if,where,set,foreach,include,sql
<if>用于判断条件是否成立,如果条件为true,则拼接SQL
<where>where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND或OR
<set>动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)
03.在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:
1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下
(同包同名)
2. XML映射文件的namespace属性为Mapper接口全限定名一致
3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
结论:
使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,
建议使用XML来配置映射语句