MyBatis框架介绍

        mybatis是Apache软件基金会下的一个开源项目,前身是ibatis框架。2010年这个项目由apache 软件基金会迁移到google code下,改名为mybatis。2013年11月又迁移到了github(https://github.com/mybatis/mybatis-3/releases)。
        mybatis是一个持久层的框架,是对JDBC操作数据库的封装,使开发者只需要关注业务本身,不需要花费精力去处理加载驱动、创建数据库连接对象、创建statement语句对象、参数设置、结果集处理等一系列繁杂的过程代码。
        mybatis通过xml或注解进行配置,将java对象与sql语句中的参数自动映射生成最终执行的sql语句,并将sql语句执行结果自动映射成java对象,返回给业务层(service)应用。

三句话概括上面内容:

  1. mybatis早期版本叫做ibatis,目前代码托管在github,大家可以在此下载。
  2. mybatis是对jdbc的封装,是一个持久层的框架。
  3. mybatis是通过xml或者注解进行配置,实现java对象与sql语句的对应关系(映射)。

MyBatis下载

  1. 度娘
    框架--Mybatis--介绍
  2. 点击
    框架--Mybatis--介绍
  3. 找到下载
    框架--Mybatis--介绍
  4. 下载(点击后链接到github)
    框架--Mybatis--介绍

Mybatis开发流程

流程

  1. 数据库环境准备
  2. 添加依赖
  3. SqlMapConfig.xml 主配置
  4. 实体类(User.java)
  5. 接口(IUserDao.java)
  6. 接口映射(IUserDao.xml)
  7. 在SqlMapConfig.xml中,加载IUserDao.xml
  8. 编写测试代码

举例

  1. 需求:查询全部用户列表
  2. 数据库环境配置:
-- 1.创建数据库
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;
 
-- 2.创建用户表
DROP TABLE IF EXISTS USER;
 
CREATE TABLE USER (
  id INT(11) NOT NULL AUTO_INCREMENT,
  username VARCHAR(32) NOT NULL COMMENT '用户名称',
  birthday DATETIME DEFAULT NULL COMMENT '生日',
  sex CHAR(1) DEFAULT NULL COMMENT '性别',
  address VARCHAR(256) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY  (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
 
 
INSERT  INTO USER(id,username,birthday,sex,address) VALUES 
(41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),
(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),
(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),
(46,'老王','2018-03-07 17:37:26','男','北京'),
(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
 
SELECT * FROM USER;
  1. 创建项目,添加依赖
<?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.luojun</groupId>
    <artifactId>mybatis01_01_hello</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--mybatis支持包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--数据库驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.30</version>
        </dependency>
        <!--日志包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>			    
</project>
  1. SqlMapConfig.xml 主配置

    1. 配置内容:

      1. 数据库连接配置
      2. 数据库连接池、事务管理
      3. 加载接口的映射
    2. 参考约束文件:
      框架--Mybatis--介绍

    3. 配置实现
      框架--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>
    <!--default 表示默认使用哪一个运行环境配置-->
    <environments default="mysql">
        <!--id="mysql" 表示mysql的运行环境配置-->
        <environment id="mysql">
            <!--事务管理器配置:基于JDBC的事务控制-->
            <transactionManager type="JDBC"></transactionManager>
            <!--连接池配置(UNPOOLED/POOLED/JNDI)-->
            <!--type="POOLED" 表示使用mybatis自带的连接池-->
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf8"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </dataSource>
        </environment>
    </environments>
</configuration>
  1. 实体类
public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;// 省略get set
}

/* 省去getter和setter的方法 */
  1. dao接口
/**
 * 数据访问接口
 */
public interface IUserDao {
    /**
     * 查询查询
     */
    List<User> findAll();
}
  1. dao接口映射(XML)
    1. 写一个映射文件:IUserDao.xml
    2. 在哪个目录定义上面的文件?(可以随意,但通常映射文件与接口保持在同一目录)
      1. 新建目录:
        框架--Mybatis--介绍

      2. 再新建文件
        框架--Mybatis--介绍

      3. IUserDao.xml文件内容

<?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">

<!--namespace 名称空间,表示当前的xml是哪一个接口的映射-->
<mapper namespace="com.luojun.dao.IUserDao">

    <!--id 对应的是IUserDao接口的方法名称-->
    <!--resultType 方法的返回值类型,如果方法返回的是集合,只要指定集合中元素的类型-->
    <!--如何封装数据?mybatis会自动封装数据,要求:查询列名称要与对象的属性名称一致。-->
    <select id="findAll" resultType="com.luojun.entity.User">
        select * from user
    </select>
</mapper>
  1. 加载接口映射文件
    框架--Mybatis--介绍
  2. 测试
package com.luojun.dao;

import com.luojun.entity.User;
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;
import java.util.List;

/**
 * 运行mybatis入门案例
 */
public class UserDaoTest {
    public static void main(String[] args) throws Exception {

        // 1. 获取文件流
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

        // 2. 创建工厂的构建器
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        // 3. 创建SqlSession的工厂
        SqlSessionFactory factory = builder.build(in);

        // 3. 创建SqlSession
        SqlSession session = factory.openSession();

        // 4. 创建接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);

        // 查看是否是代理对象?
        System.out.println(userDao.getClass());

        // 5. 调用方法
        List<User> list = userDao.findAll();
        System.out.println(list);

        // 6. 关闭,释放资源
        session.close();
        in.close();
    }
}
  1. 测试结果
    框架--Mybatis--介绍
    缺少日志文件。所以,引入日志文件:log4j.properties
    框架--Mybatis--介绍
    再运行:
    框架--Mybatis--介绍

总结

  1. 需要主配置加载接口映射文件路径:
<mappers>
	<mapper resource="com/luojun/dao/IUserDao.xml"/>
</mappers>
  1. 映射文件的namespace对应接口路径
  2. select中的id对应IUserDao中的方法名称
public interface IUserDao{
	List<User> findAll();
}

<mapper namespace="com.luojun.dao.IUserDao">
	<select id="findAll" resultType="com.luojun.entity.User">
		select * from user
	</select>
</mapper>
  1. UserDao也可以叫做UserMapper,这些都是常用的叫法。

相关文章:

  • 2021-08-04
  • 2021-12-01
  • 2021-12-29
  • 2018-06-19
  • 2021-07-12
  • 2021-11-12
  • 2021-12-27
  • 2021-10-17
猜你喜欢
  • 2021-08-06
  • 2021-07-08
  • 2021-07-20
  • 2022-02-12
  • 2021-06-18
  • 2021-07-11
  • 2022-12-23
相关资源
相似解决方案