美文网首页mybatis
【mybatis】之一:快速入门案例

【mybatis】之一:快速入门案例

作者: 蛋花汤汤 | 来源:发表于2019-01-25 15:05 被阅读0次

一、开发环境

Idea + maven + mybtis3.4.1

二、简单示例

此示例没有使用spring集成,后续会有spring集成的Demo。mybatis官方文档中,quit start部分非常详细,按照介绍即可快速上手mybatis。

  • 首先,看一下项目结构。本示例是再idea下编写,使用默认的maven模板创建。


    图片.png

talk is cheap, show me code. OK,下面是此demo的代码部分。

  • 第一步:再pom文件中,引入需要的依赖。

没有很特殊的地方,主要引入了mybatis、mysql的驱动,以及用于测试的JUnit。

    <dependencies>
        <!-- 用到的mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>

        <!-- 用户测试使用的依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>RELEASE</version>
        </dependency>

        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>

    </dependencies>
  • 第二步:编写mybatis-config.xml 全局配置文件。

mybatis应用中,有两类关键的配置文件,一个是本部分要介绍的全局配置文件:mybatis-config.xml,一个是sql mapper 映射文件。这个全局文件中包含了mybatis运行时的一些核心设置项,比如事务管理器、数据源配置等等。

<?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="mysql">
        <environment id="mysql">
            <!-- 此处的JDBC、POOL等都是被框架设置别名的 -->
            <!-- 之后会交给spring framework管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 之后会交给spring framework管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123456"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.hly.dao.EmployeeMapper"></mapper>
    </mappers>
</configuration>
  • 第三步:定义一个简单的POJO,并在mysql中创建对应的table。
package com.hly.entity;

public class Employee {
    private int id;
    private String name;
    private String gender;
    private String email;
    // 省略setter、getter、toString等方法
}

在mariadb中创建一张对应此实体的表:tbl_employee.

 CREATE TABLE `tbl_employee` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL,
  `gender` varchar(1) NOT NULL,
  `email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1
  • 第四步:编写接口及sql mapper配置文件。

这一步的接口和配置文件是一一对应的。应用层面向接口编程,由框架根据接口和配置文件的对应关系生成代理对象,完成sql封装和执行过程。

package com.hly.dao;

import com.hly.entity.Employee;

public interface EmployeeMapper {
    public Employee getEmpById(int id);
}

对应的sql 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">
<mapper namespace="com.hly.dao.EmployeeMapper">
    <select id="getEmpById" resultType="com.hly.entity.Employee">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

这里只演示了一个查询方法。注意一下几点:
1、xml中,mapper标签的namespace属性,要指定成对应java接口的全限定名称,以此完成绑定。
2、xml中,增删改查操作,均有对应的标签,标签的id对应java接口中的方法名。
3、resultTpye虽然可以指定别名,但建议还是使用类的全限定名称,这样可以提升可读性,使阅读代码的人可以快速知晓返回类型,也可以在ide中快速追踪到此类的内容。

  • 第五步: 这一步中,主要展示业务逻辑层面如何使用mybatis。

前几步中已经把mybatis的使用步骤进行了简单的展示,在应用逻辑层使用的时候,只需要根据全局配置文件(mybatis-config)的内容创建SqlSessionFactory,从SqlSessionFactory中拿到SqlSession,再指定要使用的SqlMapper类,即可进行数据库操作。

package com.hly;

import com.hly.dao.EmployeeMapper;
import com.hly.entity.Employee;
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.jupiter.api.Test;

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

public class MainTest {

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

    @Test
    public void testQuery(){
        SqlSession sqlSession = null;
        try {
            sqlSession = getSession();
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            Employee e = employeeMapper.getEmpById(1);
            System.out.println(e);
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            sqlSession.close();
        }
    }
}

代码逻辑较为简单,基本流程就是:加载全局配置文件(mybatis-config)-->创建SQLSessionFactory-->拿到SqlSessionn-->拿到接口实现-->执行数据库操作。

三、结果验证

在数据库中插入一条记录:


图片.png

执行test方法,console打印如下内容,执行成功。


图片.png

四、问题留根

别看是是个小Demo,在编写执行过程中,还是遇到了几个小问题,下面记录一下。

  • java接口类和sql mapper XML绑定不成功的问题。
    在本例中,EmployeeMapper.java和EmployeeMapp.xml同放在com.hly.dao中,理论上,在全局配置文件中加入
    <mappers>
        <mapper class="com.hly.dao.EmployeeMapper"></mapper>
    </mappers>

应该可以执行成功。但是作者执行测试方法后,抛出了一个方法绑定异常,百度之后发现这时Idea一个特性导致:Idea在进行编译打包时,src下的xml文件不会被编译到类路径中(Eclipse不存在此问题)。解决方式是在pom中增加以下代码段:

<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
 </build>
  • MySQL远程访问密码问题。
    平时都是直接用已经部署好的mysql环境,mysql -h -P -u -p等等,作者在阿里云的centos7上安装了mariadb后,发现不用用户名和密码就可以登录。百度后发现,需要在mysql库中的user表中,将user=''的用户删掉,并且设置root的密码,即可在本地要求使用用户名密码登录,此时,注意仅仅是在本地成功。
    执行本例的代码时,提示登录被远程服务器拒绝,阿里云的端口策略是开放了的,此时又百度,发现需要给mysql库user表中的root用户的host字段设置空值(此步骤可能会报错,可忽略),之后刷一下权限表flush privileges,这样,远程即可登录访问。

相关文章

  • 【mybatis】之一:快速入门案例

    一、开发环境 Idea + maven + mybtis3.4.1 二、简单示例 此示例没有使用spring集成,...

  • MyBatis

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

  • MyBatis之快速入门

    title: MyBatis之快速入门tags: MyBatiscategories: MyBatis 若图片无法...

  • 1.Mybatis - 搭建

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

  • 17.Mybites

    一、快速入门官网MyBatis[https://mybatis.net.cn/getting-started.ht...

  • MyBatis学习笔记(2)

    Mybatis入门案例中设计模式分析 自定义Mybatis分析-执行查询所有分析 mybatis在使用代理dao的...

  • mybatis学习

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

  • 07-MyBatis基础

    ???? 如何处理connect是同一个链接 一、MyBatis入门 1.1 入门案例 User: UserMap...

  • Mybatis学习集(二)

    Mybatis入门案例 第一步: 读取配置文件 InputStreamin=Resources.getResou...

  • Java框架--Mybaits(一)

    为什么要使用Mybatis? 快速入门 高级映射 动态SQL 1. 为什么要使用Mybatis? 通过简单配置就可...

网友评论

    本文标题:【mybatis】之一:快速入门案例

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