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的缺点:

  1. SQL夹在Java代码块里,耦合度高导致硬编码内伤
  2. 维护不易且实际开发需求中sql是有变化,频繁修改的情况多见
  3. 要自已创建connection、创建statement、手动设置参数、结果集检索等

Hibernate的缺点:

  1. 长难复杂SQL,对于Hibernate而言处理也不容易
  2. 内部自动生产的SQL,不容易做特殊优化。

基于全映射的全自动框架,javaBean存在大量字段时无法只映射部分字段。导致数据库性能下降。

MyBatis的好处:

  1. 对开发人员而言,核心sql还是需要自己优化
  2. MyBatis是一个半自动化的持久化层框架。
  3. 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 }

查询结果如下:

 

posted @ 2019-05-07 02:36  凌枫zoz  阅读(139)  评论(0编辑  收藏  举报