MyBatis概述
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
Mybatis的功能:
- 注册数据库的驱动,例如 Class.forName(“com.mysql.jdbc.Driver”))
- 创建 JDBC 中必须使用的 Connection , Statement, ResultSet 对象
- 从 xml 中获取 sql,并执行 sql 语句,把 ResultSet 结果转换 java 对象
- 关闭资源
总结:
MyBatis是一个优秀的持久层框架。它对jdbc几乎所有的数据库操作进行了封装(包括加载驱动、创建connection、创建statement、手动设置参数、结果集检索等繁琐操作),使开发者只需要关注 SQL本身。
MyBatis快速入门
下载MyBatis,直接在github上搜索即可。
MyBatis中文文档:https://mybatis.org/mybatis-3/zh/getting-started.html
解压mybatis压缩包后:
MyBatis框架搭建
在普通web项目中的搭建
直接在lib目录下导入:mybatis相关jar包、mysql驱动包、log4j相关jar包。
例如:mybatis-3.4.5.jar、mysql-connector-java-5.1.23-bin.jar、log4j-1.2.17.jar
在maven项目中的搭建
-
创建maven项目
-
在pom.xml文件中加入依赖
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--MyBatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--mysql驱动依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency> </dependencies>
-
提前创建一个数据库
例如:test1数据库中有account表,包含字段有id int 、name varchar(20)、money double。
-
编写一个domain/entity实体类:Account实体类
package com.maj.domain; public class Account { private Integer id; private String name; private Double money; // 后面省略 }
-
编写创建一个持久层的Dao接口 AccountDao
package com.maj.dao; import com.maj.domain.Account; import java.util.List; // 接口操作account表 public interface AccountDao { // 查询account表中所有数据 public abstract List<Account> showAccount(); }
-
创建一个sql映射文件,xml文件
sql映射文件:是用来写sql语句的,一般一个表对应一个sql映射文件
创建的位置:应该与dao接口所在位置一致,且其名称也应该一样
<?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"> <!-- mapper是当前文件的根标签 namespace:命名空间,唯一值的, 可以使用自定义的,但是要求用dao接口的全限定名称 --> <mapper namespace="com.maj.dao.AccountDao"> <!-- select标签:表示查询操作 id属性:sql语句的唯一标识,可以自定义,但是要求使用接口中的方法名称 resultType:设置返回值类型 --> <select id="showAccount" resultType="com.maj.domain.Account"> select id,name,money from account order by id; </select> </mapper>
-
创建一个mybatis主配置文件,xml文件
用处:主要用于定义数据库配置信息(类似于连接数据库),sql映射文件的位置
位置:放在maven工程中resources目录下
命名:可以自定义,一般是mybatis.xml
<?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> <!-- 根标签 --> <!-- 环境配置:数据库连接信息 --> <!-- default属性:表示现在要使用数据库,指向数据库id --> <environments default="mydev"> <!-- environment标签:一个数据库信息的配置 id属性:唯一标识,自定义 --> <environment id="mydev"> <!-- transactionManager:mybatis事务类型 type="JDBC"表示使用jdbc中Connection对象的commit,rollback做事务处理 --> <transactionManager type="JDBC"/> <!-- dataSource标签:表示数据源,连接数据库 type属性:表示数据源类型,POOLED是使用连接池 --> <dataSource type="POOLED"> <!-- 数据库驱动类名 --> <!-- driver,url,username,password是固定的,不能自定义 --> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test1"/> <property name="username" value="root"/> <property name="password" value="maj6226543"/> </dataSource> </environment> </environments> <!-- 配置sql mapper文件置 --> <mappers> <!-- 一个mapper标签对应一个文件位置 --> <!-- 从类路径开始的路基信息 从classes/目录开始后面的路径 --> <mapper resource="com/maj/dao/AccountDao.xml"/> </mappers> </configuration>
-
测试用例
package com.maj; import com.maj.domain.Account; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MyBatisTest { @Test public void test1() throws IOException { // 1.定义mybatis主配置文件名称,从类路径的根开始(classes/后面) String config = "mybatis.xml"; // 2.读取配置文件 InputStream in = Resources.getResourceAsStream(config); // 3.创建SqlSessionFactory对象,目的是获取SqlSession SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 4.获取SqlSession(因为SqlSession能够执行SQL语句)*** SqlSession session = factory.openSession(); // 5.执行SqlSession的selectList() *** // 参数是 映射文件的namespace值 + "." + ql语句的id List<Account> accountList = session.selectList("com.maj.dao.AccountDao.showAccount"); // 6.输出结果 accountList.forEach(System.out::println); // 7.释放资源 session.close(); } }
补充:可以配置日志功能
-
mybatis.xml 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数
-
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
-