总结一下毕设中主要技术(7)

150 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

今天主要就是介绍 Mybatis,身为 SSM 框架中的框架之一,如果老师问到 SSM,就一定会涉及 Mybatis,即使他们不问,自己也可以往这方面靠,把自己知道的说出来.......

使用流程

  1. 创建数据库表;
  2. 创建 maven 项目;
  3. 导入依赖;
  4. 创建实体类;
  5. 编写 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>
  1. 编写数据源 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
  1. 编写全局配置文件(主要是配置数据源信息)
<!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>

小结

  1. 编写mapper.xml,书写SQL,并定义好SQL的输入参数,和输出参数;
  2. 编写全局配置文件,配置数据源,以及要加载的mapper.xml文件;
  3. 通过全局配置文件,创建SqlSessionFactory;
  4. 每次进行CRUD时,通过SqlSessionFactory创建一个SqlSession;
  5. 调用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 语句。