MyBatis简介
1、MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架2、MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集3、MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录4、Mybatis 是一个 半自动的ORM(Object Relation Mapping)框架
下载网址
https://github.com/mybatis/mybatis-3/
为什么要使用MyBatis
1、JDBC
①SQL夹在Java代码块里,耦合度高导致硬编码内伤②维护不易且实际开发需求中sql有变化,频繁修改的情况多见
2、Hibernate和JPA
①长难复杂SQL,对于Hibernate而言处理也不容易②内部自动生产的SQL,不容易做特殊优化③基于全映射的全自动框架,大量字段的POJO进行部分映射时比较困难。导致数据库性能下降
3、MyBatis
①对开发人员而言,核心sql还是需要自己优化②sql和java编码分开,功能边界清晰,一个专注业务、一个专注数据
开发环境的准备
myBatis-3.4.1.jar mysql-connector-java-5.1.37-bin.jar log4j.jar
配置文件
log4j
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
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>
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis-mapper.xml" />
</mappers>
</configuration>
mybatis-mapper.xml
开发中我们通常将该文件的名称与对应的dao层保持一致,如:EmployeeMapper.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">
<mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
<select id="queryById" resultType="com.atguigu.mybatis.bean.Employee">
select * from employee where id = #{id}
</select>
</mapper>
Dao层接口(这里不需要实现类,具体的操作由mybatis-mapper.xml决定)
public interface EmployeeMapper {
Employee
queryById(int id
);
}
测试类
@Test
public void t2() {
InputStream inputStream
= Resources
.getResourceAsStream("mybatis_config.xml");
SqlSessionFactory factory
= new SqlSessionFactoryBuilder().build(inputStream
);
SqlSession session
= factory
.openSession();
EmployeeMapper employeeMapper
= session
.getMapper(EmployeeMapper
.class);
Employee employee
= employeeMapper
.queryById(1);
System
.out
.println(employee
);
}
MyBatis全局配置文件
上面的例子是基础使用,下面在详细说一下其他的mybatis_config.xml配置 properties
<properties>
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test_mybatis" />
<property name="username" value="root" />
<property name="password" value="1234" />
</properties>
还可以引入外部文件
resource: 从类路径下引入属性文件url: 引入网络路径或者是磁盘路径下的属性文件
<properties resource="db.properties" ></properties>
setting
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
typeAliases
<typeAliases>
<typeAlias alias="emp" type="com.atguigu.mybatis.bean.Employee"/>
<package name="com.atguigu.mybatis.beans"/>
</typeAliases>
typeHandlers 类型处理器 plugins 插件机制(略)
插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行
environments 环境配置(略) databaseIdProvider数据库厂商标识(略) mappers 映射器
resource : 引入类路径下的文件url : 引入网络路径或者是磁盘路径下的文件class : 引入Mapper接口. 有SQL映射文件 , 要求Mapper接口与 SQL映射文件同名同位置. 没有SQL映射文件 , 使用注解在接口的方法上写SQL语句.
<mappers>
<mapper resource="EmployeeMapper.xml" />
<mapper class="com.atguigu.mybatis.dao.EmployeeMapper"/>
<package name="com.atguigu.mybatis.dao"/>
</mappers>