一. MyBatis简介
1. 背景
原始 JDBC 的操作问题分析
(1). 频繁创建和销毁数据库的连接会造成系统资源浪费从而影响系统性能。
(2). sql 语句在代码中硬编码,如果要修改 sql 语句,就需要修改 java 代码,造成代码不易维护。
(3). 查询操作时,需要手动将结果集中的数据封装到实体对象中。
(4). 增删改查操作需要参数时,需要手动将实体对象的数据设置到 sql 语句的占位符。
当然也有相应的解决方案:使用数据库连接池初始化连接资源、 将 sql 语句抽取到配置文件中、使用反射、内省等底层技术,将实体与表进行属性与字段的自动映射 。
2. 什么是MyBatis?
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
MyBatis官网地址:https://mybatis.org/mybatis-3/zh/index.html
二.配置文件详解
1. 映射配置文件
映射配置文件包含了数据和对象之间的映射关系以及要执行的 SQL 语句
配置文件案例如下:
<?xml version="1.0" encoding="UTF-8" ?> <!--MyBatis的DTD约束--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper:核心根标签 namespace属性:名称空间 --> <mapper namespace="StudentMapper"> <!-- select:查询功能的标签 id属性:唯一标识 resultType属性:指定结果映射对象类型 parameterType属性:指定参数映射对象类型 --> <select id="selectAll" resultType="student"> SELECT * FROM student </select> <select id="selectById" resultType="student" parameterType="int"> SELECT * FROM student WHERE id = #{id} </select> <insert id="insert" parameterType="student"> INSERT INTO student VALUES (#{id},#{name},#{age}) </insert> <update id="update" parameterType="student"> UPDATE student SET name = #{name},age = #{age} WHERE id = #{id} </update> <delete id="delete" parameterType="int"> DELETE FROM student WHERE id = #{id} </delete> </mapper>