MyBatis简介
MyBatis的简介
MyBatis的作用:
- MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
- MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
- MyBatis可以使用简单的XML用于配置和原始映射,将接口和Java的POJO类映射成数据库中的记录使开发者只需要关注 SQL 本身,而不需要花费精力去处理
- 例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
MyBatis的历史:
MyBatis原是apache的一个开源项目iBatis,2010年6月这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
为什么要使用MyBatis?
JDBC的缺点:
- SQL夹在Java代码块里,耦合度高导致硬编码内伤
- 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
- 要自已创建connection、创建statement、手动设置参数、结果集检索等
Hibernate的缺点:
- 长难复杂SQL,对于Hibernate而言处理也不容易
- 内部自动生产的SQL,不容易做特殊优化。
基于全映射的全自动框架,javaBean存在大量字段时无法只映射部分字段。导致数据库性能下降。
MyBatis的好处:
- 对开发人员而言,核心sql还是需要自己优化
- MyBatis是一个半自动化的持久化层框架。
- MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis的入门程序:
1. 下载Mybatis核心包
http://www.mybatis.org/mybatis-3/getting-started.html
https://github.com/mybatis/mybatis-3/releases
2.创建工程,引入MyBatis核心包及依赖包
3.创建customer表
创建customer表的sql语句
1 CREATE TABLE customer( 2 cust_id int PRIMARY KEY, 3 cust_name varchar(50), 4 cust_profession VARCHAR(50), 5 cust_phone VARCHAR(50), 6 cust_email VARCHAR(50) 7 )
建立与表对象的domain,创建Customer实体类我在IDEA中用了lombok jar包
1 package com.lqg.domain; 2 3 import lombok.Getter; 4 import lombok.Setter; 5 6 @Setter@Getter 7 public class Customer { 8 9 private Integer cust_id; 10 private String cust_name; 11 private String cust_profession; 12 private String cust_phone; 13 private String cust_email; 14 15 @Override 16 public String toString() { 17 return "Customer{" + 18 "cust_id=" + cust_id + 19 ", cust_name='" + cust_name + '\'' + 20 ", cust_profession='" + cust_profession + '\'' + 21 ", cust_phone='" + cust_phone + '\'' + 22 ", cust_email='" + cust_email + '\'' + 23 '}'; 24 } 25 }
4.创建MyBatis核心配置文件SqlMappingConfig.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 和spring整合后 environments配置将废除 --> 7 <environments default="development"> 8 <environment id="development"> 9 <!-- 使用jdbc事务管理 --> 10 <transactionManager type="JDBC" /> 11 <!-- 数据库连接池 --> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver" /> 14 <property name="url" 15 value="jdbc:mysql://localhost:3306/mybatis" /> 16 <property name="username" value="root" /> 17 <property name="password" value="123456" /> 18 </dataSource> 19 </environment> 20 </environments> 21 </configuration>
5.创建与表对象的关系映射Mapping文件编写sql语句
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="Mytest"> 6 <!--根据id查询用户--> 7 <select id="queryCustomerById" parameterType="Int" resultType="com.lqg.domain.Customer"> 8 select * from `customer` where cust_id = #{cust_id} 9 </select> 10 </mapper>
6.在核心配置文件当中引入Mapping
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 <!-- 和spring整合后 environments配置将废除 --> 7 <environments default="development"> 8 <environment id="development"> 9 <!-- 使用jdbc事务管理 --> 10 <transactionManager type="JDBC" /> 11 <!-- 数据库连接池 --> 12 <dataSource type="POOLED"> 13 <property name="driver" value="com.mysql.jdbc.Driver" /> 14 <property name="url" 15 value="jdbc:mysql://localhost:3306/mybatis" /> 16 <property name="username" value="root" /> 17 <property name="password" value="123456" /> 18 </dataSource> 19 </environment> 20 </environments> 21 <mappers> 22 <mapper resource="com/lqg/domain/Customer.xml"/> 23 </mappers> 24 </configuration>
<!--加载映射文件-->
<mappers>
<mapper resource="com/lqg/domain/Customer.xml"></mapper>
</mappers>
7.创建工厂,执行sql语句
1 package com.lqg.test; 2 3 import com.lqg.domain.Customer; 4 import org.apache.ibatis.io.Resources; 5 import org.apache.ibatis.session.SqlSession; 6 import org.apache.ibatis.session.SqlSessionFactory; 7 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8 import org.junit.Test; 9 10 import java.io.IOException; 11 import java.io.InputStream; 12 13 public class MyBatisTest { 14 @Test 15 public void test() throws IOException { 16 //1.创建一个SqlSessionFactoryBulider的类 17 SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); 18 //2.加载SqlMapConfig.xml的配置文件 19 InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml"); 20 //3.创建SqlSessionFactory对象 21 SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream); 22 //4.创建SqlSession对象 23 SqlSession sqlSession = sqlSessionFactory.openSession(); 24 //5.用sqlSession对象执行查询 25 Customer customer = sqlSession.selectOne("queryCustomerById",1); 26 System.out.println(customer); 27 28 } 29 }
查询结果如下: