一、hello world
1、下载mybatis项目
2、创建java项目(不是Java web),添加lib目录,将mybatis.jar 、mysql-connect-java.jar、log4j.jar复制到lib文件夹下(log4j需要一个名为log4j.xml的配置文件),build-path。
3、在数据库中准备一个测试用的表,往里面放置几条简单数据。
4、在项目中创建对应的java bean类,添加getter、setter方法。
5、创建名为config的source目录,用于存放xml配置文件,第一步中的log4j.xml也放置到此目录中。
6、在config中创建名为mybatis-config.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">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/jumpandjump" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- sql映射文件注册到全局配置文件中 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers>
</configuration>
【注】需要修改的第一个是数据源信息,第二个就是sql映射文件的位置。
7、创建名为EmployeeMapper.xml的sql映射文件,编写内容如下
<?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="org.mybatis.example.EmployeeMapper">
<select id="selectEmp" resultType="com.qut.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
</mapper>
【注】 namespace:名称随意,用于区分不同namespace下的id,防止冲突。
id:映射sql的唯一标识
#{id}:从传递过来的参数取出id
8、创建JUnit test case,编写代码如下:
class MyBatisTest {
/*
* 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象
**/
@Test
void test() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取sqlSession实例,能执行已经映射的sql语句
//
SqlSession session = sqlSessionFactory.openSession();
try {
Employee employ = session.selectOne("org.mybatis.example.EmployeeMapper.selectEmp", 1);
} finally {
session.close();
}
}
}
【注】mybatis根据全局配置文件即mybatis-config.xml文件创建sqlSessionFactory对象 (也可以不通过全局配置文件),sqlSessionFactory对象可以获取sqlSession实例,sqlSession实例可以执行已经映射的sql语句,也就是在全局配置文件里注册的sql配置文件里面的sql语句。selectOne方法可以查询一条记录,参数分别是映射sql的id以及参数。
完成以上步骤,我们就使用mybatis从数据库中查询出了一条数据。
二、接口式编程
1、创建接口,声明一个获取数据的方法
import com.qut.mybatis.bean.Employee;
public interface EmployeeMapper {
public Employee getEmpId(Integer id);
}
2、将EmployeeMapper.xml的sql映射文件绑定给这个接口
修改namespace对应这个接口的全类名,而id可以为接口中的方法名
<?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="com.qut.mybatis.dao.EmployeeMapper">
<select id="getEmpId" resultType="com.qut.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
</mapper>
3、测试。注意这个代码中第三步获取了接口的实现类,而我们在代码中声明的接口并没有实现类,这是mybatis通过代理生成的对象。
@Test
public void test01() throws IOException {
//1、获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2、获取sqlSession实例
SqlSession session = sqlSessionFactory.openSession();
//3、获取接口的实现类对象
try {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee employ = mapper.getEmpId(1);
} finally {
session.close();
}
}
三、全局配置文件
1、引入全局配置的DTD约束文件(eclipse环境下)本地方法:
1)获取dtd文件,将mybatis.jar解压,在org ▸ apache ▸ ibatis ▸ builder ▸ xml 路径下可以找到mybatis-3-config.dtd文件,将其拷贝出来
2)eclipse - Preferences - XML - XML_Catalog - Add...
3)key属性填写dtd文件顶部的http地址 - http://mybatis.org/dtd/mybatis-3-config.dtd,Location填写 dtd文件目录,重新打开xml文件
2、<properties>
该标签用于引用外部的properties配置文件,一般数据源使用这个,可选参数有resource、url
resource:用于引用类路径下的配置文件(使用 . 符号)
url:用于引用磁盘路径或者网络路径下的配置文件(使用 / 符号)
<properties resource = "dbconfig.properties"></properties>
3、<settings>
setting用来设置每一个设置项,后续会做详细学习
4、<typeAliases>
别名处理器,可以为java类型起别名,别名不区分大小写。
typeAlias,属性type 全类名,默认的别名是类名小写,可以通过alias指定新的名字
<typeAliases>
<typeAlias type="com.qut.mybatis.bean.Employee"/>
</typeAliases>
使用package批量为类型起别名
<typeAliases><package name ="com.qut.mybatis.bean"/></typeAliases>
可以使用注解@Alies起别名
5、<typeHandlers>
类型处理器,架起java类型以及数据库类型一一对应,后续会深入学习
6、<plugins>
拦截sql执行的关键步骤 动态代理
Executor执行器、ParameterHandler参数处理器、ResultSetHandler结果集处理器、StatementHandler SQl语句处理器,后续会深入学习
7、<environments>
environments能配置多种环境
单独的environment必须配置transactionManager和dataSource属性;id代表当前环境唯一标识,可以使用environments的default指定切换环境。
transactionManager事务管理器,属性type 事务管理器的类型,参数有 JDBC | MANAGED(别名)
dataSource-数据源,属性type,可选参数有UNPOOLED | POOLED | JNDI
8、<databaseIdProvider>
支持多数据库厂商 type="DB_VENDOR"别名 VendorDatabaseIdProvider,得到数据库厂商标识(驱动)
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同数据库厂商起别名 -->
<property name="MySQL" value="mysql"/>
</databaseIdProvider>
9、<mappers>
mappers标签: 将sql映射注册到全局配置中
resource:类路径下的sql文件
url:网络路径或者磁盘路经下的sql文件
class:引用(注册)接口,接口全类名
1)sql映射文件 名与接口同名,并且放在与接口同一目录下
2)没有sql映射文件,sql都是利用注解写在接口上
推荐比较重要的dao接口写在xml配置文件里