其他分享
首页 > 其他分享> > Mybatis-入门

Mybatis-入门

作者:互联网

第一章 初识Mybatis框架

1.1 框架概念

1.2 Mybatis框架简介

1.3 Mybatis官方网址

第二章 搭建Mybatis框架

2.1 搭建框架思路

2.2 搭建Mybatis框架步骤

  1. 准备

    • 建库建表建约束
    • 准备maven工程
  2. 导入mybatis所需jar包

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.26</version>
    </dependency>
    <!--导入MyBatis的jar包-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <!--junit-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
  3. 编写mybatis-config.xml核心配置文件

    • 名称:没有具体要求,建议使用mybatis-config.xml

    • 位置:src/main/resources

    • 作用:设置mybatis基本行为

    • 示例代码

      <?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>
          <!--设置数据库连接环境-->
          <environments default="development">
              <environment id="development">
                  <!-- 设置事务管理器 -->
                  <transactionManager type="JDBC"/>
                  <!--设置数据源-->
                  <dataSource type="POOLED">
                      <property name="driver" value="com.mysql.jdbc.Driver"/>
                      <property name="url" value="jdbc:mysql://localhost:3306/db220227"/>
                      <property name="username" value="root"/>
                      <property name="password" value="root"/>
                  </dataSource>
              </environment>
          </environments>
          <!--    设置映射文件路径-->
          <mappers>
              <mapper resource="mapper/EmployeeMapper.xml"/>
          </mappers>
      </configuration>
      
  4. 编写POJO及对应接口【CRUD】

    package com.atguigu.mapper;
    import com.atguigu.pojo.Employee;
    /**
     * @author Chunsheng Zhang 尚硅谷
     * @create 2022/5/7 10:53
     */
    public interface EmployeeMapper {
        /**
         * 通过员工id获取员工信息
         */
        public Employee selectEmpById(int empId);
    }
    
  5. 编写映射文件【xxxMapper.xml】

    • 名称:要求与接口名称一致

    • 位置:src/main/resouces/mapper/

    • 主要作用:为接口中的方法定义SQL语句【三点一致】

      • 映射文件名称与接口名称一致
      • 映射文件中mapper标签的namespace属性,与接口的全类名一致
      • 映射文件中sql语句的id属性值,与接口中方法名一致
    • 示例代码

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.atguigu.mapper.EmployeeMapper">
          <!--定义查询sql语句
              resultType:设置结果集类型全类名
          -->
        <select id="selectEmpById" resultType="com.atguigu.pojo.Employee">
              SELECT
                  id,
                  last_name lastName,
                  email,
                  salary
              FROM
                  tbl_employee
              WHERE
                  id = #{empId}
        </select>
      </mapper>
      
  6. 使用核心类库进行测试

    • 核心类库:SqlSession

    • 先获取SqlSessionFactory,再获取SqlSession,最后通过SqlSession获取接口的代理对象,进行测试

    • 示例代码

      @Test
      public void testHw() throws Exception{
      
          //定义mybatis核心配置文件路径
          String resource = "mybatis-config.xml";
          //使用IO流,读取配置文件
          InputStream inputStream = Resources.getResourceAsStream(resource);
          //通过SqlSessionFactoryBuilder构建SqlSessionFactory对象
          SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
          //通过sqlSessionFactory获取SqlSession对象
          SqlSession sqlSession = sqlSessionFactory.openSession();
          //最后通过SqlSession获取接口的代理对象,进行测试
          //旧版本玩法:sqlSession.select();
          EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
          //测试
          Employee employee = employeeMapper.selectEmpById(1);
          System.out.println("employee = " + employee);
      
      }
      

2.3 搭建Mybatis框架常见问题

image-20220507113607046

image-20220507113618641

第三章 日志框架【log4j】

3.1 log4j作用

3.2 log4j使用步骤

第四章 Mybatis核心配置文件详解

4.1 配置文件概述

4.2 Mybatis核心配置文件中标签的作用

第五章 Mybatis映射文件详解

5.1 映射文件概述

5.2 映射文件的详解

5.3 子标签中常用的属性

第六章 获取主键自增&数据库受影响行数

6.1 获取主键自增数值

6.2 获取数据库受影响行数

第七章 Mybatis中参数传递问题【重点】

参数传递概念:Mybatis中参数传递指的是,将接口中方法的参数,传递到映射文件的SQL语句中。

7.1 单个普通类型参数

7.2 多个普通参数

7.3 POJO参数【常用】

7.4 命名参数【常用】

7.5 Map参数【常用】

7.6 其他参数【List|Array|Collection等】

第八章 Mybatis中#{}与${}区别【面试题】

8.1 回顾Statement&PreparedStatement对象

8.2 #{}与$()区别

8.3 #{}和${}使用场景

第九章 Mybatis中返回值四种结果

9.1 查询单行数据返回单个对象

public Employee selectEmpByEmpIdAndLastName(int id,String lastName);
<!--    通过员工id及员工lastName获取员工信息-->
    <select id="selectEmpByEmpIdAndLastName" resultType="employee">
        select
            id,
            last_name,
            email,
            salary
        from
            tbl_employee
        where
            id = #{arg0}
        and
            last_name = #{arg1}
    </select>

9.2 查询多行数据返回对象的集合

/**
 * 测试【$使用场景】
 * 动态查询表名
 */
public List<Employee> selectAllEmp(@Param("tableName") String tableName);
<!--    测试动态表【$使用场景】-->
    <select id="selectAllEmp" resultType="employee">
        select
            id,
            last_name,
            email,
            salary
        from
            ${tableName}
    </select>

9.3 查询单行数据返回Map

9.4 查询多行数据返回Map

/**
 * 查询多行数据返回Map
 *      key:id
 *      value:employee
 * @return
 */
@MapKey("id")
public Map<Integer,Employee> selectAllEmpReturnMap();
<!-- 查询多行数据返回Map-->
<select id="selectAllEmpReturnMap" resultType="map">
    select
        id,
        last_name,
        email,
        salary
    from
        tbl_employee
</select>

第十章 Mybatis中自动映射与自定义映射【重难点】

回顾多表连接查询几种情况

-- employee 多 dept 一
-- 在【多】的表中,添加【一】的id

  1. 等值连接查询

    SELECT
    e.id,e.last_name,e.email,e.salary,
    d.dept_id,d.dept_name
    FROM
    tbl_employee e,tbl_dept d
    WHERE
    e.dept_id=d.dept_id

  2. 内连接查询

    SELECT
    e.id,e.last_name,e.email,e.salary,
    d.dept_id,d.dept_name
    FROM
    tbl_employee e
    INNER JOIN
    tbl_dept d
    ON
    e.dept_id=d.dept_id

  3. 外连接查询

    • 左外连接

      SELECT
      e.id,e.last_name,e.email,e.salary,
      d.dept_id,d.dept_name
      FROM
      tbl_employee e LEFT JOIN tbl_dept d
      ON
      e.dept_id=d.dept_id

    • 右外连接

      SELECT
      e.id,e.last_name,e.email,e.salary,
      d.dept_id,d.dept_name
      FROM
      tbl_employee e RIGHT JOIN tbl_dept d
      ON
      e.dept_id=d.dept_id

10.1 自动映射【resultType】与自定义映射【resultMap】概述

10.2 自定义映射【级联映射(一对一)】

建立对象与对象之间关联关系

/**
 * 自定义映射【级联映射】
 *      通过员工id获取员工信息,及员工所属的部门信息
 */
public Employee selectEmpAndDeptByEmpId(int empId);
<!--    自定义映射-级联映射-->
<resultMap id="empAndDeptRm" type="employee">
    <id property="id" column="id"></id>
    <result property="lastName" column="last_name"></result>
    <result property="email" column="email"></result>
    <result property="salary" column="salary"></result>
    <!--        级联映射-->
    <result property="dept.deptId" column="dept_id"></result>
    <result property="dept.deptName" column="dept_name"></result>
</resultMap>
<select id="selectEmpAndDeptByEmpId" resultMap="empAndDeptRm">
    SELECT
        e.`id`,
        e.`last_name`,
        e.`email`,
        e.`salary`,
        d.`dept_id`,
        d.`dept_name`
    FROM
        tbl_employee e,
        tbl_dept d
    WHERE
    	e.`dept_id` = d.`dept_id`
    AND
    	e.id = #{empId}
</select>

10.3 自定义映射【association(一对一)】

/**
 * 自定义映射【association】
 *      通过员工id获取员工信息,及员工所属的部门信息
 */
public Employee selectEmpAndDeptByEmpIdAssociation(int empId);
<!--    association映射-->
    <resultMap id="empAndDeptAssociationRm" type="employee">
        <!--        定义主键映射关系-->
        <id property="id" column="id"></id>
        <!--        定义非主键映射关系-->
        <result property="lastName" column="last_name"></result>
        <result property="email" column="email"></result>
        <result property="salary" column="salary"></result>
        <!--        association映射-->
        <association property="dept"
                     javaType="com.atguigu.pojo.Dept">
            <id property="deptId" column="dept_id"></id>
            <result property="deptName" column="dept_name"></result>
        </association>
    </resultMap>
    <select id="selectEmpAndDeptByEmpIdAssociation" resultMap="empAndDeptAssociationRm">
         SELECT
            e.`id`,
            e.`last_name`,
            e.`email`,
            e.`salary`,
            d.`dept_id`,
            d.`dept_name`
        FROM
            tbl_employee e,
            tbl_dept d
        WHERE
            e.`dept_id` = d.`dept_id`
        AND
            e.id = #{empId}
    </select>

10.4 自定义映射【collection(一对多)】

10.5 resultMap标签详解

第十一章 Mybatis中延迟加载【懒加载】

11.1 延迟加载使用场景

11.2 延迟加载语法

11.3 延迟加载扩展

第十二章 Mybatis中动态SQL【重要】

12.1 动态SQL概述

12.2 动态SQL常用标签

第十三章 Mybatis中缓存机制

13.1 缓存概述

13.2 Mybatis中一级缓存

13.3 Mybatis中二级缓存

13.4 Mybatis中第三方缓存【EhCache】

第十四章 Mybatis逆向工程

14.1 逆向工程概述

14.2 逆向工程-MBG

14.3 MBG基本使用

第十五章 Mybatis分页插件【PageHelper】

15.1 分页功能基本概述

15.2 PageHelper概述

15.3 PageHelper应用

15.4 Page与PageInfo

标签:缓存,入门,dept,SQL,Mybatis,id,name
来源: https://www.cnblogs.com/tianzhuo/p/16613072.html