MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使 用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Ordinary Java Object,普通的 Java 对象)映射成数据库中的记录。 简单的说:MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis 重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码
因为 MyBatis 具有封装少、映射多样化、支持存储过程、可以进行 SQL 语句优化等特点,符合互联网高并发、大数据、高性能、高响应的要求,使它取代 Hibernate 成 为了Java 互联网中首选的持久框架
在 Mybatis 中配置文件有两种
全局配置文件的名称是自定义的,在 JavaProject 项目中需要放到 src 目录下
全局配置文件的作用是完成一些全局性的配置,如:
DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
configuration>
Mybatis 配置文件中的属性定义。properties 标签中允许内部定义属性,也可以是外部的 properties 文件定义属性。无论是内部定义还是外部定义,都可以使用${name}获取值
<properties>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/lanh"/>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="root"/> properties>
<properties resource="db.properties">properties>
setting 标签的配置是配置 MyBatis 框架运行时的一些行为的,例如缓存、延迟加载、 结果集控制、执行器、分页设置、命名规则等一系列控制性参数,其所有的 setting 配置都放在父标签 settings 标签中
下面仅仅是举个例子,只需要知道settings的作用即可,需要用的时候再去查文档
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
settings>
类型别名可为 Java 类型设置一个缩写名字
<typeAliases> <typeAlias alias="user" type="com.lanh.pojo.User" /> typeAliases>
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
<typeAliases> <package name="com.lanh.pojo"/> typeAliases>
MyBatis 可以配置多个环境。这可以帮助你 SQL 映射对应多种数据库等。比如说,想为 开发、测试、发布产品配置不同的环境
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
environments>
指定映射配置文件
<mappers>
<mapper resource="com/lanh/mapper/UserMapper.xml"/>
mappers>
<mappers>
<mapper url="file:///D:\code\mybatis\src\com\lanh\mapper\UserMapper.xml" />
mappers>
<mappers>
<mapper class="com.lanh.mapper.UserMapper"/>
mappers>
<mappers> <package name="com.lanh.mapper"/> mappers>
映射配置文件主要是用来编写 sql 语句的,结果集的映射关系的指定,以及缓存的一些配置等等
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lanh.mapper.UserMapper"> mapper>
指定查询结果集与对象的映射关系,是最复杂也是最强大的标签
<resultMap id="userMapper" type="com.lanh.pojo.User">
<id property="userid" column="user_id"/>
<result property="username" column="user_name"/>
resultMap>
查询语句。
<select id="selectUser" parameterType="int" resultType="u"> select * from users where userid = #{userid} select>
添加语句。
<insert id="insertUser" parameterType="com.lanh.pojo.User">insert into users values(default ,#{username},#{usersex}) insert>
更新语句。
<update id="updateUser" parameterType="com.lanh.pojo.User"> update users set username=#{username},usersex=#{usersex} where userid =#{userid} update>
删除语句。
<delete id="deleteUser" parameterType="int"> delete from users where userid = #{userid} delete>
可以用来定义可重用的 SQL 代码片段。
通过
<sql id="userColumns"> userid,username,usersex sql>
<select id="selectUser" parameterType="int" resultType="u">
select
<include refid="userColumns"/>
from users
select>