MyBatis的简介

原始jdbc操作

  • 查询数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//注册驱动
Class.forName("com.mysql.jdbc.Driber");
//获得连接
Connection connection=DriverManager.getConnection("jdbc:mysql:///test","root","mysql");
//获得statement
PrepareStatement statement=connection.prepareStatement("select id,username,password from user");
//执行查询
ResultSet resultSet=statement.executeQuery();
//遍历结果集
while(resultSet.next()){
User user=new User();
user.setid(resultSet.get("id"));
user.setUsername((resultSet.getString("username"))
user.setPassword((resultSet.getString("password"
System.out.println(user);
))
}
//释放资源
resultSet.close();
statement.close();
connection.close();
  • 插入数据
    1

原始jdbc操作的分析

  • 原始jdbc开发存在的问题如下:
    1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
    2.sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。
    3.查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置
  • 应对上述问题给出的解决方案:
    1.使用数据库连接池初始化连接资源
    2.将sql语句抽取到xml配置文件中
    3.使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

什么是MyBatis

  • mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
  • mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
  • 最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。

MyBatis的快速入门

MyBatis开发步骤

  • 添加MyBatis的坐标
  • 创建user数据表
  • 编写User实体类
  • 编写映射文件UserMapper.xml
  • 编写核心文件SqlMapConfig.xml
  • 编写测试类

环境搭建

  1. 导入MyBatis的坐标和其他相关坐标

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <!--mybatis坐标-->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
    </dependency>
    <!--mysql驱动坐标-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
    <scope>runtime</scope>
    </dependency>
    <!--单元测试坐标-->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>
    <!--日志坐标-->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
    </dependency>
  2. 创建user数据表

  3. 编写User实体

  4. 编写UserMapper映射文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?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="userMapper">
    <select id="findAll" resultType="com.itheima.domain.User">
    select * from User
    </select>
    </mapper>
  5. 编写MyBatis核心文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <!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:///test"/>
    <property name="username" value="root"/><property name="password" value="root"/>
    </dataSource>
    </environment>
    </environments>
    <mappers> <mapper resource="com/itheima/mapper/UserMapper.xml"/> </mappers>
    </configuration>

    编写测试代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //加载核心配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //获得sqlSession工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
    //获得sqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //执行sql语句
    List<User> userList = sqlSession.selectList("userMapper.findAll");
    //打印结果
    System.out.println(userList);
    //释放资源
    sqlSession.close();

MyBatis的映射文件概述

MyBatis的增删改查操作

MyBatis的核心配置文件概述

MyBatis的相应API