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
再次测试:
文件目录: