1.第一个MyBatis程序


1.创建数据库

2.连接数据库测试

3.导入mysql驱动、mybatis、junit架包。

4.在Mybatis核心配置文件中配置数据库连接的参数

5.在工具类中,通过4中的配置文件参数生成的SqlSessionFactory获得SqlSession

6.编写数据库对应的实体类

7.编写接口及Mapper配置文件(代替原先的实现类)

8.进行单元测试

9.解决Type interface XXX is not known to the MapperRegistry错误问题

10.解决Could not find resource XXX.xml错误问题

1.创建数据库

create database MyBatis;

use MyBatis;

create table student(
sno char(12) primary key not null,
sname varchar(20),
age int,
sex char(2),
address varchar(50)
)
创建数据库代码

插入以下数据

 2.连接数据库测试

jdbc:mysql://localhost:3306/MyBatis
数据库URL

3.导入mysql驱动、mybatis、junit架包

    
    
        
        
            mysql
            mysql-connector-java
            5.1.47
        
        
        
            org.mybatis
            mybatis
            3.5.2
        
        
        
            junit
            junit
            4.13.1
            test
        
    
所需依赖

4.在Mybatis核心配置文件中配置数据库连接的参数

XML 配置文件中包含了MyBatis 系统的核心设置,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。

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




    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        

        
        
    


    
    
    

        
        default="development">
            
                
                
                    
                    
                    
                    
                
            
        

核心配置文件代码

5.在工具类中,通过4中的配置文件参数生成的SqlSessionFactory获得SqlSession

构建SqlSessionFactory实例

  从XML 文件中构建 SqlSessionFactory 的实例

  每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的

  SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得

  SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例

  MyBatis 包含一个名叫 Resources 的工具类,使得从类路径或其它位置加载资源文件更加容易。

  
package com.user102;

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;

public class Utils {
    private static SqlSessionFactory sqlSessionFactory;
    static{
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }


}
工具类代码

 以上代码SqlSessionFactoryBuilder为局部变量,静态代码块执行完毕后xml解析资源将被释放,给其他需要的程序,SqlSessionFactory采用了饿汉单例模式,类初始化的时候创建一次,不会重复创建。getSqlSession拿到SqlSession使用完后应尽快关闭SqlSession

6.编写数据库对应的实体类

package com.user102.pojo;

public class Student {
    private String sno;
    private String sname;
    private int age;
    private String sex;
    private String address;

    @Override
    public String toString() {
        return "Student{" +
                "sno='" + sno + '\'' +
                ", sname='" + sname + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }

    public void setSno(String sno) {
        this.sno = sno;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public void setAge(int age) {
        this.age = age;
    }

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

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

    public String getSno() {
        return sno;
    }

    public String getSname() {
        return sname;
    }

    public int getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

    public String getAddress() {
        return address;
    }
}
实体类代码

 
7.编写接口及Mapper配置文件(代替原先的实现类)

package com.user102.dao;

import com.user102.pojo.Student;

import java.util.List;

public interface StudentMapper {
    public List  getAllStudent();
}
接口

 

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



    
    

XML

8.进行单元测试

package com.user102;

import com.user102.dao.StudentMapper;
import com.user102.pojo.Student;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class Test {
    @org.junit.Test
    public void test(){
        SqlSession sqlSession = Utils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List  allStudent = mapper.getAllStudent();
        System.out.println(allStudent);
    }
}
测试代码

 Type interface XXX is not known to the MapperRegistry错误
9.解决Type interface XXX is not known to the MapperRegistry错误问题

核心配置文件中未注册 mapper,在mybatis-config.xml中加入以下代码

    
        
    
注册XML代码

 再次测试,出现以下错误

10.解决Could not find resource XXX.xml错误问题

 未找到资源文件,由于Maven可能存在资源过滤的问题,我们将配置如下完善,在pom.xml中加入以下配置


   
       
           src/main/java
           
               **/*.properties
               **/*.xml
           
           false
       
       
           src/main/resources
           
               **/*.properties
               **/*.xml
           
           false
       
   
资源过滤代码

 再次测试:

文件目录: