我们知道MyBatis主要是为了方便我们与数据库进行连接,更方便快捷的实现增删改查操作。
另外,在使用MyBatis框架时,很多时候我们使用的是动态代理的模式来实现的。也就是说,mapper文件通常会放到java目录下,而并不是resource目录之下。
所以在pom文件中需要配置的主要有:
mysql的依赖项、mybatis的依赖项、属性文件的路径
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>
核心文件SqlMapConfig的配置:
<!--表头-->
<?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>
<!--读取属性文件
resource: 在resource下查找
url:通过绝对路径查找-->
<properties resource="jdbc.properties"></properties>
<!--配置数据库的环境变量,mybatis的核心配置-->
<!--default 使用下面environment 的 id属性值对应的配置-->
<environments default="local">
<!--id 自主命名,方面在不同情况下选择不同的环境变量配置-->
<environment id="local">
<!--事务管理控制器配置。
JDBC:事务的管理交给程序员处理
MANAGED: 由容器(Spring)来管理事务-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源 JNDI:服务器端进行数据库连接池的管理
POOLED:使用数据库连接池
UNPOOLED:不使用数据库连接池-->
<dataSource type="POOLED">
<!--配置数据库连接的基本参数-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--注册mapper,一般使用package的方式-->
<mappers>
<package name="com.zxf.mapper"/>
</mappers>
</configuration>
使用动态代理来实先MyBatis框架访问的几个规范:
- xxxMapper.xml和xxxMapper.java的接口必须在同一个目录下;
- xxxMapper.xml和xxxMapper.java文件名必须一致;
- xxxMapper.xml中标签的id值需要和xxxMapper接口中的方法名一致;
- parameterType的属性值和接口中方法的参数类型一致(除实体类型外可省略);
- resultType的属性值和接口中方法的返回值类型一致
- xxxMapper.xml中的namespace属性必须是接口的完全限定名称
- 在SqlMapConfig中注册mapper时,使用class或者package,需要是所在位置的完全限定名称。(class=具体到文件,package到文件所在包)
代码实现的一般步骤:
- 读取核心配置文件
- 创建SqlSessionFactory对象
- 获取SqlSession
- 执行mapper中对应的sql语句
- 关闭sqlSession
public void testSelectList() throws IOException {
//读取核心配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//创建SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//取出sqlSession, 默认手动提交,传入true的话自动提交
SqlSession session = factory.openSession();
//执行sql语句
List<Employee> list = session.selectList("zxf.getEMP");
//关闭session
session.close();
list.forEach(System.out::println);
}
测试可以使用junit中的@BeforeEach和@AfterEach将重复的代码提取,实现复用!