框架--Mybatis--介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Luojun13Class/article/details/86378533

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. 度娘
    在这里插入图片描述
  2. 点击
    在这里插入图片描述
  3. 找到下载
    在这里插入图片描述
  4. 下载(点击后链接到github)
    在这里插入图片描述

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. 参考约束文件:
      在这里插入图片描述

    3. 配置实现
      在这里插入图片描述

<?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. 新建目录:
        在这里插入图片描述

      2. 再新建文件
        在这里插入图片描述

      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. 加载接口映射文件
    在这里插入图片描述
  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. 测试结果
    在这里插入图片描述
    缺少日志文件。所以,引入日志文件:log4j.properties
    在这里插入图片描述
    再运行:
    在这里插入图片描述

总结

  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,这些都是常用的叫法。

猜你喜欢

转载自blog.csdn.net/Luojun13Class/article/details/86378533