Mybatis的使用以及快速入门

一、思维导图

二、基本配置

(1)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>

<!--    映入外部配置外部文件-->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </properties>

<!--    标准的日志工厂实现-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
<!--    可以给实体类起别名-->
<!--    <typeAliases>-->
<!--        <typeAlias type="com.kuang.pojo.User" alias="User"></typeAlias>-->
<!--    </typeAliases>-->
    <typeAliases>


    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
      <mapper class="com.kuang.dao.BlogMapper"/>
    </mappers>


</configuration>

 (2)db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8

(3)MybatisUtils

package com.kuang.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
                                    
//sqlSessionFactory -->sqlSession

public class MybatisUtils {
    private  static  SqlSessionFactory sqlSessionFactory;
    static {

        InputStream inputStream = null;
        try {
//            使用Mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
//        获取salSessionFactory,完全包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSession(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSession;
    }
}

(4)pom 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
<!--父工程-->
    <groupId>com.kuang</groupId>
    <artifactId>Mybatis-Study</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>Mybatis-01</module>
        <module>mybatis-02</module>
        <module>mybatis-03</module>
        <module>mybatis-06</module>
        <module>mybatis-08</module>
        <module>mybatis-09</module>
        <module>mybatis-10</module>
        <module>mybatis-15</module>
    </modules>

    <!--    导入依赖-->
    <dependencies>
<!--        mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
<!--        mybatis-->
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
<!--        junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>

        </dependency>
    </dependencies>
<!--    在build中配置resource,来防止我们资源导出失败的问题-->、
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

</project>

二、注解的方式(与SQL有关)

(1)CRUD

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.kuang.dao.UserMapper">
<!--  在当前Mapper.xml中使用二级缓存-->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    <select id="querUserById" resultType="User">
        select * from user where id=#{id}
    </select>
</mapper>

UserMapper.xml文件。这里面主要写的是sql,现在我们来看一下,

namespace为所引用的接口,这里相当于UserMapper.

id,相当于这个UserMapper中方法的名字

resultType为返回的类型,parameterType为参数的类型

(2)多对一

(a)复杂环境的搭建

1)新建数据库 2)导入lomobok 3)新建实体类Teacher,Student 4)建立Mapper接口 5)建立Mapper.xml文件 6)在核心配置文件中绑定注册我们的Mapper接口或者文件 6)测试查询是否能够成功

(b)现在我们需要查询学生和老师的相关信息

 其次,是在student中把resultType="Student",改成resultMap="StudentTeacher"

再写reultMap里面的值。

 (b)按照结果嵌套处理

 (3)一对多处理

(4)动态SQL

(a)什么是动态SQL

动态SQL就是根据不同的条件生成不同的SQL语句。

 (b)if

(5)缓存

一级缓存也就本地缓存

1)工作机制:

(a)一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中,如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中。

(b)新的会话查询信息,就可以从二级缓存中获取内容

(c)不同的mapper查出的数据会放在自己对应的缓存map中;

2)如何开启全局缓存

 

 (2)在要使用二级缓存的Mapper中开启

也可以自动参数

(3)测试

 (a)问题:我们需要将实体类序列化,否则会报错

 小结:

 (a)只有开启了二级缓存,在同一个Mapper下就有效

(b)所以的数据都会先放在一级缓存中

(c)只有当会话提交,或者关闭的时候,才会提交到二级缓存中。

(6)Mybatis的核心

 

(7)Mybatis总结

通过这次Mybatis,我也终于了解了在项目开发中为什么将SQL和代码进行分离,以及各个参与的意思,xml文件怎么和接口向连接的,以及为什么实体类要进行实现序列化接口等等。

猜你喜欢

转载自blog.csdn.net/MyxZxd/article/details/107672923