MyBatis框架入门---映射关系实现过程及原理(Mysql+Idea版)

1.数据持久化
要用MyBatis框架,首先要了解数据持久化技术,程序在内存中是瞬时存在的,数据库里的信息是持久存在的,通过ORM(Object/Relational Mapping)映射,让对象的属性信息通过一种规范与数据库里的信息实现一一对应。一般将类名与表名一致,类属性与表字段(列)一致,类属性的数据类型要和字段类型一致,这样,对象的信息就可以持久存在数据库中了
ORM的理解:
O:object,对象,指java类里的对象
R:relation,关系,指数据库里的关系表
M:Mapper,映射,o—>r的映射
2.Mybatis介绍
知道数据持久化概念和ORM之后,就应该会想这种映射模式已经提出来了,但是如何实现呢?MyBatis就是用来实现ORM的一种框架,MyBatis是一种半自动化框架,它能将xml文件里的sql语句的结果自动的转化为对象,我们要做的就是在xml文件里定义好该sql语句的id,参数,返回值类型。我们以后要用的sql语句(增删改查)就在该xml文件里写好,以后在java类(Mapper)中直接解析该xml文件即可使用sql语句,省去程序员重复编写sql语句的过程,让程序员专心专注于自己面向对象的世界里~~便捷的实现增删改查

MyBatis的使用步骤

1.导入MyBatis要用到的jar包
a.新建一个项目,我这里就叫mybatis01
在这里插入图片描述
b.到网上下载这三个jar包
在这里插入图片描述
MyBatis的前身是ibatis,ibatis更新的2版本时开始的MyBatis,Mybatis是从3版本直接命名的
c.将下载的jar包复制到src目录下
在这里插入图片描述
d.右键选择构建模块
在这里插入图片描述
在这里插入图片描述
第一步完成
2.编写MyBatis的主配置xml文件,我这里叫mybatis-config.xml
在这里插入图片描述
这个是主配置文件,代码不需要死记,MaBtis提供的有模板,网上找到copy即可。
主要是需要理解那几个标签的含义
是最大父标签,里面写的是配置信息


这里的environments的default是要和你要用的environment的id对应的,事实上我们现在只用到一个environment,这里写的是环境信息

jdbc事务管理
以链接池的方式链接




第二步完成
3.创建实体类
首先在数据库建表
我以这个users表为例
在这里插入图片描述
编写实体类
为了清晰的和后面的dao层映射对应,先创建一个包,以com包为例,在com包下创建bean包以后专门存放实体类在这里插入图片描述
在该包中创建实体类

package com.bean;

import java.util.Date;

public class Users {
    private int id;
    private  String realname;
    private  String nickname;
    private  String pwd;
    private  String phone;
    private  String email;
    private  String address;
    private  Date createTime;
    private  int type;
    private  String realid;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getRealid() {
        return realid;
    }

    public void setRealid(String realid) {
        this.realid = realid;
    }
}

第三步完成
4.实现dao层映射(以查找为例)
在该com包下在新建一个dao包,用来专门存放Mapper
创建接口UsersMapper,定义查找方法

package com.dao;

import com.bean.Users;
import java.util.List;

public interface UsersMapper {
    Users findById(int id);
}

编写映射文件UsersMapper.xml
在这里插入图片描述
注意:
这里就是o—>r的映射
是查询语句的标签,java

<select id=“findById”.为了方便以后解析找到该sql语句,这里的namespace一般以包名.类名命名,id以方法名命名
千万不要忽略这个parameterType,这个参数的值是要给sql语句里的#{}占位符的,它就是sql语句里要用到的参数
resultType,刚刚说MyBatis是一种半自动化的框架,类属性名和表字段名是我们手工创建对应的,而这个 resultType指定的返回值类型,MyBatis会帮我们把这个select语句的返回值自动装成该类型对应的对象比如说这个语句,通过id查找的一行结果,MyBatis会自动的装成Users对象,并将对应的属性赋值

到这里,我们的映射工作就已经完成啦
5.创建测试类
a.将UsersMapper.xml配置到主配置文件mybatis-config里
在这里插入图片描述

创建测试类UsersMapperTest

package com.dao;

import com.bean.Users;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Assert;
import org.junit.Test;
import org.apache.ibatis.session.SqlSessionFactory;


import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class UsersMapperTest {
    static final String CONF_FILE="mybatis-config.xml";
    static SqlSessionFactory factory=null;
    //静态代码块实例化静态成员
    static {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        try {
            InputStream resourceAsStream= Resources.getResourceAsStream(CONF_FILE);
            factory=builder.build(resourceAsStream);
        } catch (IOException e) {
         e.printStackTrace();
        }
    }
    @Test
    public void findById(){
        SqlSession session=factory.openSession();
        Users user= session.selectOne("com.dao.UsersMapper.findById",1);
        session.close();
        //断言
        //assert (user!null);
        Assert.assertNotNull(user);
        Assert.assertEquals("管理员",user.getNickname());
        Assert.assertEquals("123",user.getPwd());
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        String dateStr=df.format(user.getCreateTime());
        Assert.assertEquals("2019-10-09",dateStr);
    }

SqlsessionFactoryBuilder—>SqlsessionFactory—>Sqlsession
Sqlsession实现对数据库的一次会话

顺便提一下,有兴趣的可以到网上找xml的解析过程。有助于理解

发布了2 篇原创文章 · 获赞 5 · 访问量 93

猜你喜欢

转载自blog.csdn.net/wdw66666/article/details/104719261