1、简介html
MyBatis是一个轻量级的持久层框架,它能够帮咱们省去繁杂的JDBC操做,包括获取数据库链接、设置参数、处理结果集、事务管理等等。经过XML配置或注解,便可实现简单的完成本来复杂的操做。
java
2、准备工做
mysql
1. 下载 jar 包,能够在 Maven Repository (在页面中间有个Artifact,旁边点击 Download JAR 便可)下载最新版本(mybatis-3.3.0)的 jar 包,而后添加到 classpath 中。git
2. 若是使用的是 Maven 建立的项目,那么能够简单复制 Maven Repository 中的依赖配置便可,具体配置以下:github
<!-- Maven中pom.xml的MyBatis依赖配置 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency>
3. 建立数据库以及数据表并插入示例数据,这里假设建立的是mybatis库和students表,我使用的是MySql数据库sql
-- 建立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');
3、MyBatis的入门实例数据库
1. 新建MyBatis的核心配置文件(包括数据源信息、事务管理器、映射配置等),建议将该文件放置类源文件根目录下,我直接把它取名为mybatis.xml,具体配置以下:apache
<?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类api
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; } }
4、实用连接:
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