一、简介
MyBatis是一个轻量级的持久层框架,它可以帮我们省去繁杂的JDBC操作,包括获取数据库连接、设置参数、处理结果集、事务管理等等。通过XML配置或注解,即可实现简单的完成原本复杂的操作。
二、准备工作
1. 下载 jar 包,可以在 Maven Repository (在页面中间有个Artifact,旁边点击 Download JAR 即可)下载最新版本(mybatis-3.3.0)的 jar 包,然后添加到 classpath 中。
2. 如果使用的是 Maven 创建的项目,那么可以简单复制 Maven Repository 中的依赖配置即可,具体配置如下:
<!-- Maven中pom.xml的MyBatis依赖配置 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency>
3. 创建数据库以及数据表并插入示例数据,这里假设创建的是mybatis库和students表,我使用的是MySql数据库
-- 创建mybatis数据库 create database mybatis -- 切换到mybatis数据库 use mybatis -- 创建students表 create table students(id int auto_increment primary key, name varchar(50)); -- 插入示例数据 insert into students(name) values(‘kolbe‘);
三、MyBatis的入门实例
1. 新建MyBatis的核心配置文件(包括数据源信息、事务管理器、映射配置等),建议将该文件放置类源文件根目录下,我直接把它取名为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> <environments default="development"> <environment id="development"> <!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 --> <transactionManager type="JDBC" /> <!-- 数据库连接池POOLED表示使用数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <!-- SQL代码和映射信息配置文件 --> <mapper resource="cn/kolbe/mybatis/StudentMapper.xml" /> </mappers> </configuration>
2. 新建一个名为Student的Java Bean类
package cn.kolbe.mybatis; public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } }
3. 新建SQL语句映射文件StudentMapper.xml
<?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"> <!-- namespace必须是唯一的,建议用该文件所在的包路径全类名 --> <mapper namespace="cn.kolbe.mybatis.StudentMapper"> <!-- select:表示这是一个查询操作 --> <!-- id:用来配合namespace来定位这个操作,也就是在调用时,将采用cn.kolbe.mybatis.StudentMapper.getStudent --> <!-- resultType:表示返回值类型,必须是全类名,MyBatis将自动为我们将查询结果封装成Student对象 --> <!-- parameterType:表示传进来的参数的类型,因为传的是id主键,所以是int型 --> <select id="getStudent" parameterType="int" resultType="cn.kolbe.mybatis.Student"> <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ --> select * from students where id = #{id} </select> </mapper>
4. 新建一个测试类StudentDao,来测试配置的效果
package cn.kolbe.mybatis; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; public class StudentDao { @Test public void testGetStudent() throws Exception { // 1. 加载MyBatis的配置文件:mybatis.xml(它也加载关联的映射文件,也就是mappers结点下的映射文件) InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis.xml"); // 2. SqlSessionFactoryBuidler实例将通过输入流调用build方法来构建 SqlSession 工厂 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); // 3. 通过工厂获取 SqlSession 实例,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。 SqlSession session = sqlSessionFactory.openSession(); // 4. 准备基本信息 // 4.1) statement: 用来定位映射文件(StudentMapper.xml)中的语句(通过namespace id + select id) String statement = "cn.kolbe.mybatis.StudentMapper.getStudent"; // 4.2) paramter: 传进去的参数,也就是需要获取students表中主键值为1的记录 int parameter = 1; // 5. SqlSession 实例来直接执行已映射的 SQL 语句,selectOne表示获取的是一条记录 Student student = session.selectOne(statement, parameter); System.out.println(student); // 6. 关闭输入流和SqlSession实例 in.close(); session.close(); } }
5. 运行后可以看到控制台输出,表示配置成功了
Student [id=1, name=kolbe]
6. 该项目的包结构
7. 注:
SqlSessionFactoryBuilder:可以被创建销毁,一旦创建了SqlSessionFactory实例,该对象就不在需要了。
SqlSessionFactory:应该是一个应用共享一个工厂实例,而不是随意清除创建,建议在具体应用中采用单例模式来创建和获取该实例,保证该工厂实例的唯一性。
SqlSession:不是线程安全的,多个线程共享将有可能出错,另外用完该实例后要及时调用close()方法将其关闭。
SqlSessionFactory的建议获取方式:
package cn.kolbe.mybatis; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class Factory { private static SqlSessionFactory factory; static { factory = new SqlSessionFactoryBuilder().build( Factory.class.getClassLoader().getResourceAsStream("mybatis.xml")); } public static SqlSessionFactory getFactory() { return factory; } }
四、实用链接:
MyBatis官方文档 :http://mybatis.github.io/mybatis-3/zh/index.html 官方的入门文档,难得有中文版本
Maven仓库:http://mvnrepository.com/ 可以下载各种开源软件的各种版本的jar文件以及添加Maven中的包依赖
MyBatis API : http://mybatis.github.io/mybatis-3/apidocs/reference/packages.html