为什么使用Mybatis

  1. 传统JDBC的弊端

    1. 影响性能:数据库连接,使用时就创建,不用就释放。对数据库频繁开关,浪费资源,使性能下降。
    2. 不利于维护:sql语句、preparedStatement参数值、resultSet结果集 硬编码到java代码中,如果sql语句修改,需要重新编译java代码。
  2. Mybatis优势

    1. 简化操作,提供连接池控制连接
    2. java文件分离,分离成业务接口+SQLMapper.xml
    3. 免去设置参数和结果集的操作

Mybatis介绍

基于ORM思想

  • ORM概念:对象关系映射。在关系型数据库和业务实体之间做一个映射,只需要操作对象的属性和方法,就能完成对数据库的表的操作。

    持久层框架

    image.png

Mybatis使用

配置连接

依赖包

  1. mybatis.jar
  2. mysql-connector-java.jar
  3. junit.jar
  4. hamcrest-core-1.3.jar

    mybatis-config.xml 主配置文件

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE configuration
    3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    5. <configuration>
    6. <environments default="development">
    7. <environment id="development">
    8. <transactionManager type="JDBC" />
    9. <dataSource type="POOLED">
    10. <!-- JDBC:驱动,地址,用户名,密码 -->
    11. <property name="driver" value="com.mysql.jdbc.Driver" />
    12. <property name="url" value="jdbc:mysql://127.0.0.1:3306/exam?useUnicode=true&amp;characterEncoding=utf8" />
    13. <property name="username" value="root" />
    14. <property name="password" value="123456" />
    15. <!-- 默认情况下:池中有10个连接存在! -->
    16. </dataSource>
    17. </environment>
    18. <!-- 还可以配置多个其它的环境:test product -->
    19. <!-- <environment id="test">
    20. <transactionManager type="JDBC" />
    21. <dataSource type="POOLED">
    22. <property name="driver" value="${driver}" />
    23. <property name="url" value="${url}" />
    24. <property name="username" value="${username}" />
    25. <property name="password" value="${password}" />
    26. </dataSource>
    27. </environment> -->
    28. </environments>
    29. </configuration>

创建SqlSession会话对象

  1. package com.Week_6.day2_16.util;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. /**
  9. * @ClassName Util
  10. * @Description //Session会话
  11. * @Author 16014
  12. * @Date 2022/2/15 16:01
  13. * @Version 1.0
  14. **/
  15. public class SessionUtil {
  16. private static SqlSessionFactory sqlSessionFactory;
  17. static {
  18. String resource = "mybatis-config.xml";
  19. InputStream inputStream = null;
  20. try {
  21. inputStream = Resources.getResourceAsStream(resource);
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  26. }
  27. public static SqlSession getSession() {
  28. return sqlSessionFactory.openSession();
  29. }
  30. }

创建Sql连接池

处理过程:
image.png

编写过程

  1. 编写实体类

    1. public class StudentEntity {
    2. private long id;
    3. private String stu_name;
    4. private String gender;
    5. }
  2. 编写接口

    1. //根据ID查询
    2. public interface StudentMapper {
    3. StudentEntity getStudentById(long id);
    4. }
  3. 在mapper.xml中对实体类映射

    1. <?xml version="1.0" encoding="UTF-8" ?>
    2. <!DOCTYPE mapper
    3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    5. <mapper namespace="com.Week_6.day2_16.mapper.StudentMapper">
    6. <!--数据库映射-->
    7. <!--type:映射的实体类;property:实体类对象名;column:数据库字段名;javaType:把对象的数据类型通过javaType转换成数据库字段对应的类型-->
    8. <resultMap type="StudentEntity" id="stumap">
    9. <id property="id" column="id" javaType="long"/>
    10. <result property="stu_name" column="stu_name" javaType="string"/>
    11. <result property="gender" column="gender" javaType="string"/>
    12. </resultMap>

    对应的数据类型
    20220215174634.png20220215174742.png