一、MyBatis简介
1.1、简介
MyBatis是目前主流的ORM框架,它是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1.2、什么是ORM
对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
1.3、MyBatis和Hibernate的区别
Hibernate | MyBatis | |
---|---|---|
是否为自动框架 | 全自动框架,不用写SQL,全部自动生成 | 半自动框架,需要写SQL,由框架完成映射 |
SQL优化 | 不利于SQL的优化 | 方便SQL的优化 |
入门 | 相对复杂 | 相对简单 |
二、MyBatis的基本使用
2.1、导入依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
2.2、添加配置文件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>
<!--多种环境:开发、测试、生产-->
<environments default="development">
<environment id="development">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--数据源 POOLED代表连接池-->
<dataSource type="POOLED">
<!--JDBC的配置-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/bookms_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件的位置-->
<mappers>
<mapper resource="mappers/BookMapper.xml"></mapper>
</mappers>
</configuration>
2.3、定义mapper接口
这里做演示,只定义一个insert方法
/**
* 人的映射接口
*/
public interface PersonMapper {
void insert(Person person);
}
2.4、映射文件
在resources的mappers目录下添加映射文件
<?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="com.my.mybatis_demo.dao.PersonMapper">
<!--insert配置插入操作 id是接口中方法的名称 parameterType是参数类型-->
<insert id="insert" parameterType="com.my.mybatis_demo.entity.Person">
insert into person(name,age,sex)
values(#{name},#{age},#{sex});
</insert>
</mapper>
2.5、#{}和${}的区别
#{} | ${} | |
---|---|---|
是否可以防止SQL注入 | 是 | 否 |
插入方式 | 占位符方式插入,以preparedstatement方式 | 字符串拼接 |