什么是mybatis框架?

什么是mybatis框架?,第1张

什么是mybatis框架? 8.5.2Mybatis框架介绍
  • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了 google code,并且改名为MyBatis 。2013年11月迁移到Github。

  • iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框 架包括SQL Maps和Data Access Objects(DAO)

  • MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的

  • JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和 原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 Mybatis不是一个完全的orm框架,Mybatis需要程序员自己写sql,但是也存在映射(输入参数映射,输 出结果映射),学习门槛mybatis比hibernate低;同时灵活性高,特别适用于业务模型易变的项目,使用范围广。

  • 简单概括: 更加简化jdbc代码,简化持久层,sql语句从代码中分离,利用反射,将表中数据与java bean 属性一一 映射 即 ORM(Object Relational Mapping 对象关系映射) 使用范围:

  • 在日常的开发项目中,如中小型项目,例如ERP,需求与关系模型相对固定建议使用Hibernate,对于需求不固定的项目,比如:互联网项目,建议使用mybatis,因为需要经常灵活去编写sql语句。总之,mybatis成为当下必须学习掌握的一个持久层框架。

8.5.3Mybatis特点:

属于持久层ORM框架

  1. 持久层: 讲内存中对象数据,转移到数据库中的过程持久层 Mybatis Hibernate Spring-jpa

  2. ORM Object Relational Mapping 对象关系映射框架 类 表 属性 字段 对象 记录

  3. 半自化 自动化 Mybatis 半自动化 表需要手动进行设计 提供sql 依赖与数据库平台 优点:学习使用简单(基与原声jdbc封装),优化灵活,适合做互联网项目 Hibernate 自动化ORM框架 表可以通过框架自动创建 省略一些基本的sql 不依赖与数据库平台 缺点: 学生成本高,优化难度大,适合与传统框(OA|图书管理系统...),不适合做大型互联网项 目

8.5.4Mybatis环境搭建

官网: mybatis – MyBatis 3 | 简介

8.5.5导入jar包

4.2.1. mybatis核心jar包 4.2.2. mybatis依赖jar包 4.2.3. 数据库驱动jar包 4.2.4. Build Path 选中所有的jar包,右键build path->add to build path 管理外部的jar资源 4.3. Mybatis配置文件 mybatis提供两种配置文件, 核心配置文件 mybatis-config.xml|mybatis.xml 与 SQL映射文件 mapper.xml

环境搭建






    
    
        
        
            
            
            
            
                
                
                
                
            
        
    
    
    
        
    
核心配置文件




    
    
        select * from dept where deptno = #{deptno}
    
定义JavaBean类
package com.yjxxt.pojo;
​
import java.util.Objects;
​
public class Dept {
    private int deptno;
    private String dname;
    private String loc;
​
    public Dept() {
    }
​
    public Dept(int deptno, String dname, String loc) {
        this.deptno = deptno;
        this.dname = dname;
        this.loc = loc;
    }
​
    public int getDeptno() {
        return deptno;
    }
​
    public void setDeptno(int deptno) {
        this.deptno = deptno;
    }
​
    public String getDname() {
        return dname;
    }
​
    public void setDname(String dname) {
        this.dname = dname;
    }
​
    public String getLoc() {
        return loc;
    }
​
    public void setLoc(String loc) {
        this.loc = loc;
    }
​
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Dept dept = (Dept) o;
        return deptno == dept.deptno && Objects.equals(dname, dept.dname) && Objects.equals(loc, dept.loc);
    }
​
    @Override
    public int hashCode() {
        return Objects.hash(deptno, dname, loc);
    }
​
    @Override
    public String toString() {
        return "Dept{" +
                "deptno=" + deptno +
                ", dname='" + dname + ''' +
                ", loc='" + loc + ''' +
                '}';
    }
}
​
测试类
package com.yjxxt.pojo;
​
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
​
import java.io.IOException;
import java.util.Map;
​
public class Class002_SelectMethod {
    public static void main(String[] args) throws IOException {
        //1.获取会话
        SqlSession  session = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml")).openSession();
        //2.执行sql
        //T selectOne("namespace.id") 执行指定的sql,查到对应类型的结果,如果没有查询到返回null
        //T selectOne("namespace.id",入参) 执行指定的sql,同时为SQL语句传递入参,查到对应类型的结果,如果没有查询到返回null
        Dept dept = session.selectOne("com.yjxxt.mappers.DeptMapper.queryDeptByNo",40);
        System.out.println(dept);
​
        //selectMap("namespace.id","作为key的字段名") 执行指定的sql,返回Map集合,查询到的一条数据作为Map集合中的一个键值对,指定的字段值做key,resultType结果作为value,如果没有查到数据返回空的MapMap map = session.selectMap("com.yjxxt.mappers.DeptMapper.queryAll","dname");
        //System.out.println(map);
        //selectMap("namespace.id",入参,"作为key的字段名")
        Map map = session.selectMap("com.yjxxt.mappers.DeptMapper.queryDeptByNo",99,"deptno");
        System.out.println(map);
​
        //selectList("namespace.id") 执行sql,查询到的多个结果返回List,如果没有查到返回空的List
        //selectList("namespace.id",入参)
​
        //3.关闭回话
        session.close();
    }
}
​
配置详细步骤
package test;
​
import com.yjxxt.pojo.Dept;
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;
import java.util.Date;
import java.util.List;
​

public class Class01_Dept {
    public static void main(String[] args) throws IOException {
​
        //1.加载核心配置文件
        InputStream in = Resources.getResourceAsStream("mybatis.xml");
        //2.构建 SqlSessionFactory 会话工厂
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.根据工厂构建会话SqlSession
        SqlSession session = factory.openSession();
        //4.执行sql,得到结果
        List dates = session.selectList("mappers.DeptMapper.queryAll");
        //5.处理结果
        dates.forEach(System.out::println);
        //6.关闭会话
        session.close();
    }
}
​

8.5.6Mybatis配置文件

mybatis提供两种配置文件, 核心配置文件 mybatis-config.xml|mybatis.xml 与 SQL映射文件 mapper.xml 4.3.1. 核心配置文件添加 是一个xml文件,命名无要求,位置无要求,一般成为mybatis.xml,放在src路径下 4.3.1.1. dtd 4.3.1.2. mybatis.xml文件配置内容

 注意:不要忘记mybatis核心xml文件中的mapper配置 4.4. 测试 5. Mybatis配置文件详解 5.1. 核心配置文件 1.configuration 配置文件的根元素,所有其他的元素都要在这个标签下使用(dtd文件规定) 2.environments default="environment" 用于管理所有环境, 并可以指定默认使用那个环境,通过defualt属性来指定 3.environment 用来配置环境,id属性用于唯一标识当前环境 4.transactionManager type="JDBC" 用户配置事务管理器 type属性 用来指定Mybatis采用何种方式管理事务 JDBC : 表示采用与原生JDBC一致方式管理事务 MANAGED: 表示讲事务管理交给其他容器进行, Spring 5.dataSource type="POOLED" select * from t_user  public class TestUser { public static void main(String[] args) throws IOException { //1.加载mybatis全局核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis.xml"); //2.构建SqlSessionFactory对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //3.通过工厂获取会话SqlSession SqlSession session = factory.openSession(); //4.通过session调用方法执行查询 //selectList() 查到的数据返回一个list集合,没查到返回空的list //selectList 的第一个参数为statement: 命名空间+id List list = session.selectList("com.yjxxt.mappers.UserMapper.queryAll"); System.out.println(list); //5.关闭会话资源 session.close(); } }

8.5.7Mybatis配置文件详解

5.1. 核心配置文件 1.configuration 配置文件的根元素,所有其他的元素都要在这个标签下使用(dtd文件规定) 2.environments default="environment" 用于管理所有环境, 并可以指定默认使用那个环境,通过defualt属性来指定 3.environment 用来配置环境,id属性用于唯一标识当前环境 4.transactionManager type="JDBC" 用户配置事务管理器 type属性 用来指定Mybatis采用何种方式管理事务 JDBC : 表示采用与原生JDBC一致方式管理事务 MANAGED: 表示讲事务管理交给其他容器进行, Spring 5.dataSource type="POOLED" select * from t_user public class TestUser { public static void main(String[] args) throws IOException { //1.加载mybatis全局核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis.xml"); //2.构建SqlSessionFactory对象 SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //3.通过工厂获取会话SqlSession SqlSession session = factory.openSession(); //4.通过session调用方法执行查询 //selectList() 查到的数据返回一个list集合,没查到返回空的list //selectList 的第一个参数为statement: 命名空间+id List list = session.selectList("com.yjxxt.mappers.UserMapper.queryAll"); System.out.println(list); //5.关闭会话资源 session.close(); } } 用于配置数据源, 设置Myabtis是否使用连接池技术,并且配置数据库的四个连接参数 type属性: POOLED : 表示采用连接池技术 UNPOOLED: 表示每次都会开启和关闭连接, 不采用连接池技术 JNDI : 使用其他容器提供数据源 6.property 用于配置数据库连接参数 (driver,url,username,password) 7.Mappers 用于配置扫描sql映射文件 5.2. SQL映射文件(mapper) MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就 显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代 码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。 insert – 映射插入语句 update – 映射更新语句 delete – 映射删除语句 select – 映射查询语句 查询语句是 MyBatis 中最常用的元素之一(映射文件配置见代码) 1.mapper SQL映射文件的根元素 namespace 属性 用于指定命名空间, mydatis通过namespace+id的方式用来定位sql语句,所以必须要指定 namespace,通过被配置为权限定路径 包名+xml文件名(不带后缀名) 2.select 用来定义查询语句 update insert delete id 属性 用阿里唯一表示当前sql语句,在当前的命名空间中唯一,不能重复 , 类型方法名 resultType 属性 用于设定查询返回的结果的数据类型,要写类型的权限定名(包名+类名),如果返回值的是集合类型,要 定义集合的泛型类型

  1. 三个查询方法 selectList("命名空间.id") 用户查询多条数据情况,返回一个List集合, 没有查到数据返回空集合,不是 null selectOne("命名空间.id") 用于查询单条数据,返回一个数据, 如果没有查到返回null selectMap("命名空间.id",key的字段名) 用于查询多条记录情况, 返回Map集合, 需要指定那个属性 作为key, sql查询结果作为value,指定的字段值作为key, 如果查不到, 返回一个空map集合,不是null

package com.yjxxt.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
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 com.yjxxt.pojo.User;
public class UserTest {
public static void main(String[] args) throws IOException {
//1.加载核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//2.获取SqlSessionFactory对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.获取会话
SqlSession session = factory.openSession();
//4. *** 作
//1)selectList("namespace.id") 用于查询多条数据,返回一个list集合,如果没有查询到
任数据,返回空集合,不是null
List list =
session.selectList("com.yjxxt.mappers.UserMapper.queryAll");
System.out.println(list);
//2)selectOne("namespace.id")
User user = session.selectOne("com.yjxxt.mappers.UserMapper.queryById");
System.out.println(user);
//3)selectMap("namespace.id","执行作为key的属性")
Map map =
session.selectMap("com.yjxxt.mappers.UserMapper.queryAll", "id");
System.out.println(map);
//5.关闭session
session.close();
}
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5660264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存