MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2.1、准备开发环境
1、创建测试项目,普通java项目或者是JavaWeb项目均可,并导入mybatis包
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
2、建立测试数据库表及对应的POJO
3、resources建立mybatis配置文件mybatis_config.xml
Mybatis的配置文件默认命名为mybatis-config.xml,程序运行前需要加载这个文件;
第一行是XML声明,指定字符集;
<configuration>:Mybatis配置文件的根元素为
<environment>:用来配置Mybatis的环境,即连接的数据库。
<transationManager>:配置Mybatis的事务管理
<dataSource>:数据源,Mybatis推荐使用数据源(维持着一个连接池,而不用每次连接都开启一个连接)来管理数据库连接
4、定义操作表的sql映射文件
<mapper namespace="com.test.springtest.User"
为这个mapper指定一个唯一的namespace,它习惯上设置为:“包名+sql映射文件名”,这样可以保值名的唯一。namespace只要求唯一,不是指向某个具体文件
5、测试
说明:
程序先读取配置文件,然后通过SqlSession对象来操作持久化对象。
为了使用Mybatis进行持久化操作,可以把上述程序总结如下操作步骤:
1)编写持久化类(e.g. User)和其持久化操作的Mapper.xml(e.g. User.xml),并在mapper.xml中定义SQL语句
2)获取SqlSessionFactory
3)获取SqlSession
4)用面向对象的方式操作数据库(session.insert()、session.update()、session.select()。。。。)
5)提交事务,关闭SqlSession
在使用idea运行时,遇到一个奇怪的问题,控制台报
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/founderit/mapper/Object.xml
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at com.founderit.main.TestMain.main(TestMain.java:20)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/founderit/mapper/Object.xml
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78)
... 2 more
Caused by: java.io.IOException: Could not find resource com/founderit/mapper/Object.xml
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:371)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)
... 4 more
Object.xml文件命名存在,后来通过万能的baidu查到原因
原因: idea不会编译src的java目录的xml文件
解决方法:将IDEA maven项目中src源代码下的xml等资源文件编译进classes文件夹
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>