美文网首页
mybatis 笔记(一) 入门

mybatis 笔记(一) 入门

作者: _换个昵称试试 | 来源:发表于2017-09-29 17:33 被阅读0次

1.数据库脚本

本文采用mysql数据库,数据脚本如下

DROP DATABASE
IF EXISTS mybatis;

CREATE DATABASE mybatis;

USE mybatis;

DROP TABLE
IF EXISTS dept;

CREATE TABLE dept(
    dept_id INT AUTO_INCREMENT PRIMARY KEY ,
    dept_name NVARCHAR(50) NOT NULL
);

DROP TABLE
IF EXISTS employee;

CREATE TABLE employee(
    id INT AUTO_INCREMENT PRIMARY KEY ,
    `name` NVARCHAR(50) NOT NULL ,
    age INT ,
    birthday DATETIME ,
    dept_id INT ,
    CONSTRAINT fk_dept_id FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
);

INSERT INTO dept(dept_name)
VALUES
    ('信息技术部') ,
    ('人事部') ,
    ('PCB事业部') ,
    ('无线终端部') ,
    ('测试部');

INSERT INTO employee(`name` , age , birthday , dept_id)
VALUES
    ('小花5760 ' , 0 , NOW() , 1) ,
    ('小花7238 ' , 1 , NOW() , 2) ,
    ('小花7985 ' , 11 , NOW() , 3) ,
    ('小花2438 ' , 24 , NOW() , 1) ,
    ('小花7386 ' , 8 , NOW() , 4) ,
    ('小花9787 ' , 8 , NOW() , 1) ,
    ('小花9711 ' , 4 , NOW() , 4) ,
    ('小花2119 ' , 21 , NOW() , 5);

2. 开发环境准备

开发工具为idea,使用maven构建项目,需要一定的maven基础,可以查看笔者之前关于maven的介绍配置http://www.jianshu.com/p/2eceee248836
先来一张项目结构图

项目结构图

mapper 包主要放置mapper接口以及mapper映射文件
model 包主要放置和数据库表对应的实体对象
util 包放置了一个关于 SQLSession 管理的类和io操作类
resources 目录下面防止了数据库配置文件以及mybatis核心配置文件,接下来笔者带大家一一分析

3. pom 文件主要是mybatis和jdbc驱动的配置

<dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

        <!-- mybatis  -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

    </dependencies>


    <build>
        <!--在maven中设置打包时将xml文件一起打包-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

4. 配置文件

jdbc.properties 文件主要存放和数据库连接相关的信息

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=

mybatis.xml 主要是mybatis核心配置文件,

<!-- 加载属性文件 -->
    <properties resource="jdbc.properties"/>

    <!-- 设置实体对象所在的包设置实体对象的别名,
        默认是将该类的名称首字母小写,也可以使用@Alias 注解自定义 
        也可以使用 typeAlias 单一指定
     -->
    <typeAliases>
        <package name="com.zzz.mybatis.model"/>
    </typeAliases>
    
    <!-- 开发配置信息 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- mapper 接口所在的包,mybatis会自动扫描查找
        也可以使用 mapper 单独指定
     -->
    <mappers>
        <package name="com.zzz.mybatis.mapper"/>
    </mappers>

5. 先来看util包中的内容

首先看 SqlSessionFactoryUtil,这里面笔者都做了注释,后面在专门详细介绍,以及后面即将说到的 mapper。
IoUtils 主要负责IO对象的关闭,可自行查看源码,这里不做分析

package com.zzz.mybatis.util;

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 java.io.IOException;
import java.io.InputStream;

/**
 * Created by tao.zeng on 2017/9/28.
 */
public class SqlSessionFactoryUtil {

    private SqlSessionFactoryUtil() {
    }

    /**
     * 主要用来创建 SqlSession 相当于一次会话,类似于jdbc中的Connection对象
     * 当程序访问数据库时,就需要使用该对象构建 SqlSession,所以他应该位于整个生命周期
     * 并且不希望有多个实例对象,所以做成单例模式
     */
    private volatile static SqlSessionFactory mSqlSessionFactory;


    /**
     * 返回 SqlSession 对象 该对象主要用来执行 sql 语句
     * 它应该位于一个应用的请求和操作中,注意使用时需要及时关闭回收资源
     *
     * @return
     */
    public static SqlSession openSqlSession(){
        initSqlSessionFactory();
        return mSqlSessionFactory.openSession();
    }

    private static void initSqlSessionFactory() {
        InputStream in = null;
        try {
            // 加载 resources 目录下面的 mybatis.xml 文件
            in = Resources.getResourceAsStream("mybatis.xml");
            if (mSqlSessionFactory == null) {
                synchronized (SqlSessionFactoryUtil.class) {
                    if (mSqlSessionFactory == null) {

                        // SqlSessionFactoryBuilder 主要用来生成 SqlSessionFactory 对象
                        // 一旦 SqlSessionFactory 构建完成,就应该将它回收,所以他在方法内部维护就好
                        mSqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IoUtils.close(in);
        }
    }
}

6.编写 mapper 接口和 mapper映射文件

笔者在这里抽象出了一个 BaseMapper 接口,里面涉及基本的增删改查操作,在这里用到了泛型 T 表示当前操作实体对象的类型,E 表示实体对象id的类型。

package com.zzz.mybatis.mapper;

import java.util.List;

/**
 * Created by tao.zeng on 2017/9/28.
 */
public interface BaseMapper<T, E> {

    /**
     * 查询所有数据
     *
     * @return
     */
    List<T> findAll();

    /**
     * 根据 id 查询数据
     *
     * @param id
     * @return
     */
    T findById(E id);

    /**
     * 保存数据
     *
     * @param t
     * @return
     */
    int save(T t);

    /**
     * 修改数据
     *
     * @param t
     * @return
     */
    int update(T t);

    /**
     * 删除数据
     *
     * @param id
     * @return
     */
    int delete(E id);
}

如果没有特殊的要求,单纯的操作依赖于该类可以完成单表的基本操作。
这里贴一下操作部门的mapper,纳尼?空的?对,目前这里面什么都可以不用做,只需要通过泛型知道操作的是 Dept 对象已经Dept 对象中id的类型

package com.zzz.mybatis.mapper;

import com.zzz.mybatis.model.Dept;

/**
 * Created by tao.zeng on 2017/9/29.
 */
public interface DeptMapper extends BaseMapper<Dept, Long> {

}

贴出mapper映射文件

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

<!-- namespace 指定当前 mapper 和 Mapper对象的映射关系 -->
<mapper namespace="com.zzz.mybatis.mapper.DeptMapper">
    
    <!-- 因为实体对象中的属性名称和数据库字段名称不一样,通过resultMap来进行映射 -->
    <resultMap id="deptMapper" type="com.zzz.mybatis.model.Dept">
        <!-- property 实体对象中的属性名称  column 数据库中字段的名称-->
        <id property="deptId" column="dept_id"/>
        <result property="deptName" column="dept_name"/>
    </resultMap>
    
    <!-- 通过 select 标签进行查询操作,这里查询的是所有信息 -->
    <select id="findAll" resultMap="deptMapper">
        select * from dept
    </select>
    
</mapper>

7. 测试运行

@org.junit.Test
    public void test() {

        SqlSession session = SqlSessionFactoryUtil.openSqlSession();

        DeptMapper mapper = session.getMapper(DeptMapper.class);

        List<Dept> depts = mapper.findAll();

        for (Dept dept : depts) {
            System.out.println(dept);
        }
        // 一定记得及时关闭 SqlSession 释放资源
        session.close();
    }
运行结果

以上记录了mybatis最基本的操作,完整代码见
https://github.com/zzz-tao/mybatis

相关文章

  • mybatis学习

    Mybatis:ORM框架 一、一些资料: 一个小实例供快速入门:MyBatis学习笔记(一)入门 - NAYNE...

  • mybatis学习笔记

    mybatis学习笔记 简介 入门 XML配置 XML 项目相关笔记 在使用myb...

  • MyBatis学习笔记-02映射配置文件

    续上一篇MyBatis学习笔记-01MyBatis入门[https://www.jianshu.com/p/5e7...

  • MyBatis

    MyBatis学习总结(一)——MyBatis快速入门 超详细MyBatis入门讲解

  • 阅读Mybatis文档笔记(一)

    笔记是在我使用过mybatis后再读文档的记录,不是入门教程。 一、基本原理 官方解释: 每个基于 MyBatis...

  • mybatis 笔记(一) 入门

    1.数据库脚本 本文采用mysql数据库,数据脚本如下 2. 开发环境准备 开发工具为idea,使用maven构建...

  • Mybatis的入门

    一.Mybatis介绍 二.Mybatis的架构 三.Mybatis入门程序开发 下载mybatis 导包核心+依...

  • Spring系列 | 小荷才露尖尖角

    MyBatis学习笔记 MyBatis操练 MyBatis源码 SpringMVC学习笔记 SpringMVC...

  • 深入浅出Mybatis-Mybatis-Generator

    目录 入门 Mybatis Generator 是什么 Mybatis Generator是Mybatis的代码生...

  • 1.Mybatis - 搭建

    参考 Mybatis 官方 MyBatis学习总结(一)——MyBatis快速入门 安装 说明基于Maven 步骤...

网友评论

      本文标题:mybatis 笔记(一) 入门

      本文链接:https://www.haomeiwen.com/subject/pwgiextx.html