快乐学习
前程无忧、中华英才非你莫属!

Day0-Mybatis入门到精通-HelloWorld

一、简介

什么是 MyBatis ?

本人回答:它是前台数据到后台数据库的搬运工,更直白一点:操作数据库的一段代码而已!

官方回答:

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis的基本构成

  • SqlSessionFactoryBuilder:构造器,他根据配置信息和代码生成SqlSessionFactory。
  • SqlSessionFactory:工厂接口,依靠工厂来生成SqlSession。
  • SqlSession:会话,是一个既可以发送SQL去执行结果,也可以获取Mapper的接口。
  • SQL Mapper:由Java接口和XML文件构成的,需要给出对应的SQL和映射规则,它把SQL发送去执行,返回结果。

SqlSessionFactory是MyBatis的核心,它的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFactory的任务是创建SqlSession。

有两种方式去创建SqlSessionFactory:1.通过xml文件去配置。2.通过注解的方式。

关系图:

架构图:

二、HelloWorld

Maven配置方式

 <dependency>

       <groupId>org.mybatis</groupId>

       <artifactId>mybatis</artifactId>

       <version>3.4.4</version>

</dependency>

<dependency>

       <groupId>mysql</groupId>

       <artifactId>mysql-connector-java</artifactId>

       <version>5.1.42</version>

</dependency>

DataBase

CREATE TABLE `tbl_employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `tbl_employee` VALUES ('1', 'alice', '女', '12@qq.com');
INSERT INTO `tbl_employee` VALUES ('2', 'jim', '男', '13@qq.com');

JavaBean

public class Employee {

    private Integer id;
    private String lastName;
    private String email;
    private String gender;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    @Override
    public String toString() {
        return "Employee [id=" + id + ", lastName=" + lastName + ", email="
                + email + ", gender=" + gender + "]";
    }

}

Mapper接口

package com.ztloo.dao;

import com.ztloo.bean.Employee;

public interface EmployeeMapper {

       public Employee getEmpById(Integer id);

}

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">


<!-- 自定义的命名空间,只与xml配置文件发生关系,是为了标识 -->

<!--   <mapper namespace="com.ztloo.EmployeeMapper"> -->


<!-- 如果javabean中的字段和数据库中的字段不对应,查出来对应数据为空,在sql语句定义别名,跟javabean中的属性名一致就可以了! -->
<!--   <select id="selectEmployee" resultType="com.ztloo.bean.Employee">
                    select id,last_name lastName,email,gender from tbl_employee where id = #{id}
           </select>
-->

 <!-- 1、让配置文件与接口动态绑定,这里相当于配置文件实现了(com.ztloo.dao.EmployeeMapper)此接口 -->
<mapper namespace="com.ztloo.dao.EmployeeMapper">

<!--select id 也要跟com.ztloo.dao.EmployeeMapper接口里面的方法一致 -->
 <select id="getEmpById" resultType="com.ztloo.bean.Employee">
                    select id,last_name lastName,email,gender from tbl_employee where id = #{id}
</select>



</mapper>

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/mybatis" />
                           <property name="username" value="root" />
                           <property name="password" value="root" />
                    </dataSource>
             </environment>
       </environments>
       <!-- 将我们写好的sql映射文件(EmployeeMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 -->
       <mappers>
             <mapper resource="EmployeeMapper.xml" />
       </mappers>
</configuration>

测试类

package testmybaits.test;

import java.io.IOException;
import java.io.InputStream;

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 com.ztloo.bean.Employee;
import com.ztloo.dao.EmployeeMapper;

public class TestConn {

    public SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
     * 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
     * 3、将sql映射文件注册在全局配置文件中
     * 4、写代码:
     *         1)、根据全局配置文件得到SqlSessionFactory;
     *         2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
     *             一个sqlSession就是代表和数据库的一次会话,用完关闭
     *         3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。
     *
     * @throws IOException
     */

//    @Test
//    public void testXml() throws IOException {
//        String resource = "mybatis-config.xml";
//        InputStream inputStream = Resources.getResourceAsStream(resource);
//        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//        SqlSession sqlSession =  sqlSessionFactory.openSession();
//        try {
//            Employee employee = sqlSession.selectOne(
//                    "com.ztloo.dao.EmployeeMapper.selectEmployee", 1);
//            System.out.println(employee);
//        }
//        finally {
//            sqlSession.close();
//        }
//    }

    //接口式编程*(实战中推荐这种,更灵活,更安全,更规范,更容易控制):
    @Test
    public void testInterFace() throws IOException {
        // 1、获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
        // 2、获取sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
        // 3、获取接口的实现类对象
        //会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
            EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
            Employee employee = mapper.getEmpById(1);
            System.out.println(mapper.getClass());
            System.out.println(employee);
            } finally {
                    sqlSession.close();
            }
    }

}

下载源码链接:https://github.com/mybatis/mybatis-3/releases

MyBatis中文API:

http://www.mybatis.org/mybatis-3/zh/index.html

深入理解MyBatis

http://blog.csdn.net/u010349169/article/category/2309433

     

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Day0-Mybatis入门到精通-HelloWorld

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!