本文已参与「新人创作礼」活动,一起开启掘金创作之路。
今天主要就是介绍 Mybatis,身为 SSM 框架中的框架之一,如果老师问到 SSM,就一定会涉及 Mybatis,即使他们不问,自己也可以往这方面靠,把自己知道的说出来.......
使用流程
- 创建数据库表;
- 创建 maven 项目;
- 导入依赖;
- 创建实体类;
- 编写 mapper 映射文件(编写 sql);
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
<select id="findAll" resultType="com.yogurt.po.Student">
SELECT * FROM student;
</select>
<insert id="insert" parameterType="com.yogurt.po.Student">
INSERT INTO student (name,score,age,gender) VALUES (#{name},#{score},#{age},#{gender});
</insert>
<delete id="delete" parameterType="int">
DELETE FROM student WHERE id = #{id};
</delete>
</mapper>
- 编写数据源 properties 文件(配置数据库);
db.url=jdbc:mysql://192.168.1.183:3306/myblog?characterEncoding=utf8 db.user=root db.password=root db.driver=com.mysql.jdbc.Driver
- 编写全局配置文件(主要是配置数据源信息)
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置文件信息 -->
<properties resource="properties/db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 从配置文件中加载属性 -->
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.user}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载前面编写的SQL语句的文件 -->
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
小结
- 编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数;
- 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件;
- 通过全局配置文件,创建SqlSessionFactory;
- 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession;
- 调用SqlSession上的selectOne,selectList,insert,delete,update等方法,传入mapper.xml中SQL标签的id,以及输入参数。
注意
全局配置文件中,各个标签要按照如下顺序进行配置,因为mybatis加载配置文件的源码中是按照这个顺序进行解析的
<configuration>
<!-- 配置顺序如下
properties
settings
typeAliases
typeHandlers
objectFactory
plugins
environments
environment
transactionManager
dataSource
mappers
-->
</configuration>
<properties>
一般将数据源的信息单独放在一个 properties 文件中,然后用这个标签引入,在下面 environment 标签中,就可以用 ${} 占位符快速获取数据源的信息
<settings>
用来开启或关闭 mybatis 的一些特性,比如可以用<setting name="lazyLoadingEnabled" value="true"/> 来开启延迟加载,可以用 <settings name="cacheEnabled" value="true"/> 来开启二级缓存
<typeAliases>
在 mapper.xml 中需要使用 parameterType 和 resultType 属性来配置 SQL语句 的输入参数类型和输出参数类型,类必须要写上全限定名,比如一个 SQL 的返回值映射为 Student 类,则 resultType 属性要写 com.yogurt.po.Student,这太长了,所以可以用别名来简化书写,比如
<typeAliases>
<typeAlias type="com.yogurt.po.Student" alias="student"/>
</typeAliases>
之后就可以在resultType上直接写student,mybatis会根据别名配置自动找到对应的类。
当然,如果想要一次性给某个包下的所有类设置别名,可以用如下的方式
<typeAliases>
<package name="com.yogurt.po"/>
</typeAliases>
如此,指定包下的所有类,都会以简单类名的小写形式,作为它的别名
另外,对于基本的Java类型(8大基本类型、包装类,以及 String 类型),mybatis 提供了默认的别名,别名为其简单类名的小写,比如原本需要写java.lang.String,其实可以简写为string
<typeHandlers>
用于处理 Java 类型和 Jdbc 类型之间的转换,mybatis 有许多内置的 TypeHandler,比如 StringTypeHandler,会处理 Java 类型 String 和 Jdbc 类型 CHAR 和 VARCHAR。这个标签用的不多;
<objectFactory>
mybatis 会根据 resultType 或 resultMap 的属性来将查询得到的结果封装成对应的 Java 类,它有一个默认的 DefaultObjectFactory,用于创建对象实例,这个标签用的也不多;
<plugins>
可以用来配置 mybatis 的插件,比如在开发中经常需要对查询结果进行分页,就需要用到 pageHelper 分页插件,这些插件就是通过这个标签进行配置的。在 mybatis 底层,运用了责任链模式+动态代理去实现插件的功能;
<!-- PageHelper 分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
<environments>
用来配置数据源
<mappers>
用来配置 mapper.xml 映射文件,这些 xml 文件里都是 SQL 语句。