MyBatis使用

 

目录

1、文件结构

2、mybatis配置

3、使用mybatis

4、建立对应sql结果需要的类

5、建立相对应的studentMapper和teacherMapper接口

6、定义sql语句

7、执行sql

8、画个流程图


1、文件结构


使用maven构建的项目结构:
源代码存放与main文件夹下的java内,resouces一般存放配置文件。
在项目编译执行后,resouces与java两个文件夹内,结构相同的文件会被放置在一起。
如:java/com/dao下的文件与resouces/com/dao下的文件会在编译后存放在一起。

上图resouces下的com.dao是我这个版本的idea显示问题,没找到解决办法,其实是分层的:com/dao。

2、mybatis配置

首先mybatis是用来简化代码对数据库操作的,当然要先与数据库连接

由文件结构图可以看到resources下有一个“mybatis-config.xml”
 


这个配置文件的名字是可以随便取的,惯用mybatis-config.xml。
configuration:
这个标签就表示配置
properties:
表示引入的properties文件,也是一个配置文件,想了解的可以百度一下。
其中resource就代表引入的文件路径,因为resource和java属于项目根路径,编译后会存放在一起,所以直接使用文件名就能引入。
environments:
环境的意思,其实就是多种你想用的配置方式。
environments内的 default 表示程序运行时默认使用哪一套配置。
environment:
同上,属于你个性化的一套配置,id就是这套环境的标识,比如你可以再使用一个environment id="test"构建你的第二套配置。
transactionManager:
事务管理,这里使用的JDBC的事务管理。
dataSource:
数据源模式,type=POOLED,这里可以理解为连接池或者会话池。
大概意思是,一个会话或者连接执行完sql后,会回收再利用。具体我不懂,想了解深入的小伙伴就需要自行百度了。
property:
这里其实就是设置数据库的连接属性,后面value取的值就是第一个标签引入的propertie文件。

介绍完配置文件后,我学习时第一个念头就是,mybatis是如何找到这个配置文件的,接下来请看。

3、使用mybatis

官方文档我大概理解是这样的:
mybatis里面,有一个SqlSessionFactoryBuild(sql会话工厂创建)的类,用里面的build方法,创建一个SqlSessionFactory(sql会话工厂)。
再使用这个工厂SqlSessionFactory,读取mybatis-config.xml里面的配置打开一个sqlSession。
 


此时这个类就作为一个工具类,我在想使用一个sqlSession执行sql语句的时候调用即可。

4、建立对应sql结果需要的类

目前我也仅仅是学会了使用,所以无法介绍的更详细,请谅解。
下面的繁琐代码我不放图片,可以自己复制使用,还是各位希望手动一动。


一开始学我也不知道这是干什么的,其实就是mybatis将查询的结果用来(new)这个类。
当然这也是我自己的理解。

先来看pojo包内的Student类:

package com.pojo;
import lombok.Data;

@Data
public class Student {
    private String name;
    private int id;
    private Teacher teacher;
    public Student(String name, int id, Teacher teacher) {
        this.name = name;
        this.id = id;
        this.teacher = teacher;
    }
}
这里我使用了lombok来自动构建get,set等方法,具体百度,就是个偷懒工具,我目前公司有使用,但仅仅使用@Data去构建get、set等方法。希望是不要用这个工具。

这个Student类中,有个teacher的字段,是Teacher类型,因为一个学生会对应一个老师,而这个老师是一个Teacher类。
Teacher类:

package com.pojo;
import lombok.Data;

import java.util.List;
@Data
public class Teacher {
    private String tName;
    private int tId;
    private List<Student> students;

    public Teacher(String tName, int tId, List<Student> students) {
        this.tName = tName;
        this.tId = tId;
        this.students = students;
    }
}

重点:student类和teacher类的字段要和数据库的字段一一对应,数据类型一定要相同。
当然,我思考过可否字段不一一对应,我认为是可行的,不过我还没有去实验。

5、建立相对应的studentMapper和teacherMapper接口

这里建立的接口,只用来定义方法,而这里的接口不需要哪个类去实现它。
我们以studentMapper为例:

package com.dao;

import com.pojo.Student;

import java.util.List;

public interface StudentMapper {
    //接口定义方法即可,返回值为什么是List<Student>?
    //因为sql执行后,比如查询2个学生,每个学生都是一个Student对象
    //所以使用List来存放
    List<Student> getStudent(int id);
}

接下来是sql执行的重点内容。

6、定义sql语句

sql语句是写在一个xml文件内的,而且一般来说这个xml文件名要和接口一致,便于查找与维护。
 


还记得上面说的,这个xml文件放在resources里面吧?而且结构要和接口目录一致。
到这里,就已经完成了一个基本的执行条件了。

7、执行sql

执行前还需要做一个事情,就是在mybatis-config.xml中,将上面的StudentMapper.xml注册进去。

这里我们在,test内使用junit试试吧

import com.dao.StudentMapper;
import com.pojo.Student;
import com.util.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class test {

    @Test
    public void test1(){
        //工具类创建一个sqlsession
        SqlSession sqlSession = SqlSessionUtil.getSqlsession();
        //构建映射关系,将StudentMapper这个接口映射到mapper类
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        //有了映射,那就用mapper执行接口中的方法
        List<Student> students = mapper.getStudent();

        for (Student student : students) {
            System.out.println(student);
        }
        sqlSession.close();
    }
}

结果,我没有放,因为我并没有在我自己电脑上创建sql表,哈哈哈哈哈

8、画个流程图

对照这个流程图,再回看上面的各步骤,理解一下。
如果这个文章你们没看懂,那我没办法,我的文字描述功底不够高。
但是对于学过的人又忘了,是个快速复习的好办法。

其实这种框架学习还是视频更好,这篇文章就当做复习使用吧。
没有研究过源码,其实具体如何运作我也只是从表面去猜测的,希望能帮助你理解mybatis使用。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Upaaui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值