Java-Mybatis入门

一、Mybatis简介

Mybatis是一个Java持久层框架,内部封装了jdbc。

Mybatis通过XML或者注解的方式将要执行的各种statement配置起来,通过Java对象和statement中SQL的动态参数进行映射,最终生成可执行的sql语句。最终由Mybatis框架执行sql,并将结果映射,将Java对象返回。

结果的封装使用ORM思想。ORM(Object Relational Mapping,关系对象映射),即把数据库中表和实体类及实体类的属性对应起来,通过操作实体类来操作数据库表。


二、Mybatis使用入门

Mybatis环境搭建

  1. 创建Maven工程,添加坐标(dependencies)
  2. 创建实体类,Dao接口
  3. 创建Mybatis的主配置文件SqlMapConfig.xml
  4. 创建映射配置文件IUserDao.xml
结构示例

环境搭建注意事项

  1. 创建IUserDao.xml和IUserDao.java时,命名规则保持一样。在Mybatis中把持久层的操作接口名称和映射文件也叫做Mapper。
  2. 在IDEA中创建包package和目录directory时,包可以直接创建三级(com.joeaaa.dao),但目录需要一层层手动创建。
  3. Mybatis的映射配置文件的位置必须和Dao接口的包结构相同,即src/main/java/com/joeaaa/dao/IUserDao.java,src/main/resources/com/joeaaa/dao/IUserDao.xml
  4. 映射配置文件的mapper标签的namespace属性值必须是Dao接口的全限定类名,即<mapper namespace=”com.joeaaa.dao.IUserDao”>
  5. 映射配置文件的操作配置(select),id属性值必须是Dao接口的方法名<select id=”findAll” resultType=”com.joeaaa.domain.User”>
  6. 当3、4、5点遵从之后,开发中就不用再写Dao的实现类。

测试用例

创建测试class,src/test/java/com/joeaaa/test/demo01Test.java

  1. 读取配置文件
  2. 创建SqlSessionFactory工厂
  3. 使用工厂生产出SqlSession对象
  4. 使用SqlSession创建Dao接口的代理对象
  5. 使用代理对象执行方法
  6. 资源释放

测试用例:

// src/test/java/com/joeaaa/test/demo01Test.java
package com.joeaaa.test;

import com.joeaaa.dao.IUserDao;
import com.joeaaa.domain.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;

public class demo01Test {
    public static void main(String[] args) throws IOException {
        // 1、读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2、创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3、使用工厂生产出SqlSession对象
        SqlSession session = factory.openSession();
        // 4、使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        // 5、使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        // 6、资源释放
        session.close();
        in.close();
    }
}

IUserDao 接口

// src/main/java/com/joeaaa/dao/IUserDao.java
package com.joeaaa.dao;

import com.joeaaa.domain.User;
import java.util.List;

// 用户的持久层操作
public interface IUserDao {
    List<User> findAll();
}

User实现类

// src/main/java/com/joeaaa/domain/User.java
package com.joeaaa.domain;

import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}