MyBatis简介

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 )

 

4.建立与表对象的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 }

 

 

 

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     
11 </mapper>

 

6.在核心配置文件当中引入Mapping

 

<!--加载映射文件-->
<mappers>
<mapper resource="com/lqg/domain/Customer.xml"></mapper>
</mappers>

7.创建工厂,执行sql语句

 

package com.lqg.test;

import com.lqg.domain.Customer;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {
    @Test
    public void test() throws IOException {
        //1.创建一个SqlSessionFactoryBulider的类
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //2.加载SqlMapConfig.xml的配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        //3.创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
       //4.创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //5.用sqlSession对象执行查询
        Customer customer = sqlSession.selectOne("queryCustomerById",1);
        System.out.println(customer);
     

    }
}

 

 

 

查询结果如下:

posted @ 2019-05-07 08:57  凌枫zoz  阅读(210)  评论(0编辑  收藏  举报