IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> MyBatis框架① -> 正文阅读

[Java知识库]MyBatis框架①

🍤MyBatis框架①


  1. 简介
  2. Mybatis的基本使用
    ①. 环境配置
    ②.定义SQL映射文件
    ③.基本使用
    ④.封装会话
    ⑤.接口绑定

一、🍜简介

1、 🍜什么是Mybatis:
  • Mybatis是一个半自动的ORM持久层框架,内部封装了JDBC
2、 🍜Mybatis的优点:
  • 简单易学,容易上手
  • JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接
  • MyBatis相当灵活,便于统一管理和优化,并可重用。
  • 总的是,学习简单,灵活,适合做互联网开发
3、🍜 Mybatis的缺点:
  • ① SQL语句的编写工作量较大
  • ② SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

二、🍜Mybatis的基本使用

  • 环境配置
  • 定义核心配置文件
  • 定义SQL映射文件
  • 基础使用
    • selectList(“命名空间.id”) 用户查询多条数据情况,返回一个List集合, 没有查到数据返回空集合,不是null
    • selectOne(“命名空间.id”) 用于查询单条数据,返回一个数据, 如果没有查到返回null
    • selectMap(“命名空间.id”,key的字段名) 用于查询多条记录情况, 返回Map集合, 需要指定那个属性作为key, sql查询结果作为value,指定的字段值作为key, 如果查不到, 返回一个空map集合,不是null。

1、🍜环境配置

(1)、 在项目下建lib包导入jar包
在这里插入图片描述


(2)、分别在src下建包和mybatis配置文件
在这里插入图片描述


(3)、配置文件的内容

  • db.properties文件
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:XE
username=SCOTT
password=TIGER
  • mybatis.xml文件(核心配置文件)
<?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 : 当前选择使用哪一个环境 ,定义要使用的环境的id属性值
    -->

    <!-- 加载外部的properties文件 -->
    <properties resource="db.properties" />

    <!--类的别名配置-->
    <!--设置别名-->
    <typeAliases>
        <typeAlias type="com.mybatis.pojo.Dept" alias="dept"/>
        <!--        别名不区分大小写-->
        <!--<typeAlias type="com.yjxxt.pojo.Dept"/>--> <!--默认别名为类名,别名不区分大小写-->
        <!--      <package name="com.yjxxt.pojo"/>-->
        <!--        &lt;!&ndash; 包下所有的类默认类名 &ndash;&gt;-->
    </typeAliases>

    <environments default="dev">
        <!--环境的配置  id :  环境的唯一标识-->
        <environment id="dev">
            <!--事务管理机制: 默认JDBC事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--数据源配置|连接池配置:
                    type="POOLED" 选择连接池技术管理连接
            -->
            <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>
    <!--SQL映射文件扫描-->
    <mappers>
        <!--        <mapper resource="com/mybatis/mappers/DeptMapper.xml"/>-->
        <package name="com/mybatis/mappers"/>
    </mappers>
</configuration>

2、🍜定义SQL映射文件
<?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 : 命名空间
        sql映射文件的唯一标识
        设置:
            任意设置
            在一个项目下 namespace是唯一不能重复的
            建议 定位当前文件的包名.文件名,不加后缀
-->
<mapper namespace="com.mybatis.mappers.DeptMapper">
    <!--
        select 定义查询语句
            相当于一个处理块
            id sql语句的唯一标识
                在一个命名空间下sql的id不能重复
            parameterType : 入参类型
                常见类型: 基本数据类型|包装类  String Date  Javabean  数组  List  Map
            resultType : 结果类型
                常见类型: 基本数据类型|包装类  String Date  Javabean  List  Map
    -->
</mapper>

3、🍜基本使用

(1)sql.selectList(“命名空间.id”);
测试类:

 //获取会话
        SqlSession sql=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis_config.xml")).openSession();

       //获取dept表中的部门名
        List<String> result01=sql.selectList("com.mybatis.mappers.DeptMapper.queryNames");
        result01.forEach(System.out::println);

sql映射文件DeptMapper.xml文件内容

  <select id="queryNames" resultType="String">
        select dname from dept
    </select>

在这里插入图片描述

在这里插入图片描述


(2)sql.selectOne(“命名空间.id”);

测试类:

//根据部门号获取部门信息
        Dept result02=sql.selectOne("com.mybatis.mappers.DeptMapper.queryDeptno",20);
        System.out.println(result02);

sql映射文件DeptMapper.xml文件内容

  <select id="queryDeptno" resultType="dept" parameterType="int">
        select * from dept where deptno=${deptno}
    </select>

在这里插入图片描述


(3)selectMap(“命名空间.id”,key的字段名)

测试类:

 //session.selectMap("",Object,"") 返回结果为Map  第一个参数为命名空间.id,第二个参数为sql语句的实参,第三个参数返回的Map集合中key的字段名
        //注意.键值对的value类型为javabean类型
        Map<String,Dept> map = session.selectMap("com.yjxxt.mappers.DeptMapper.queryAll","dname");
        System.out.println(map);

sql映射文件DeptMapper.xml文件内容

  <select id="queryAll" resultType="com.yjxxt.pojo.Dept">
        select * from dept
  </select>

在这里插入图片描述


4、🍜封装会话功能和<typeAliases>别名和<Package>

(1)typeAliases别名

  • 定义后的别名,不区分大小写
  • alias="别名"
  • 为了方便sql映射文件内编写sql文件

在Mybatis_config.xml文件中的<configuration>标签下:》》

<typeAliases>
        <typeAlias type="com.mybatis.pojo.Dept" alias="dept"/>
<!--        别名不区分大小写-->
       
        <package name="com.yjxxt.pojo"/>-->
<!--        &lt;!&ndash; 包下所有的类默认类名 &ndash;&gt;-->
    </typeAliases>

(2)Package包路径

  • 默认在Package包下寻找sql映射文件
  • 在Mybatis_config.xml文件内配置
<!--SQL映射文件扫描-->
    <mappers>
<!--        <mapper resource="com/mybatis/mappers/DeptMapper.xml"/>-->
        <package name="com/mybatis/mappers"/>
    </mappers>

(3)封装会话工具包

  • 方便后期的使用
public class SessionTool {
    private static SqlSessionFactory sqlfactory=null;
    //静态初始块
    static {
        try {
            sqlfactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("Mybatis_config.xml"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //静态方法获取会话对象并设置自动提交事务
    public static SqlSession getSession(){
        SqlSession sion=null;
        if(sqlfactory!=null){
            sion= sqlfactory.openSession(true);
        }
        return sion;
    }
}


5、🍜接口绑定方案

1. 接口名在SQL映射文件同名,同一个包下
2. 命名空间=全包名+类名
3. sql的id=对应的抽象方法
4. sql的入参,返回值与方法的一致
5. 注解:@param()给入参起别名,方便使用


(1)简单使用方式

  • 在sql文件同级建同名接口,并在内写方法
  • sql映射文件内编写id要求与方法同名,返回类型相同,入参类型相同

测试类:》》

//接口绑定
        //获取对象
        DeptMapper dept01=sql.getMapper(DeptMapper.class);
        System.out.println(dept01.queryDept());

sql映射文件》》

<!--    接口绑定-->
    <select id="queryDept" resultType="Dept">
        select * from dept
    </select>

接口》》》

public interface DeptMapper {
    //查询所有部门信息
    List<Dept> queryDept();
    //查询指定编号部门
    Dept queryDeptno(int deptno);
    //查询部门名
    List<String> queryNames();
}

在这里插入图片描述
在这里插入图片描述


(2)通过接口绑定解决多参数传递问题

  • 测试文件》》
 //多个入参
DeptMapper dept01 = sql.getMapper(DeptMapper.class);
 System.out.println (dept01.queryDeptnoAndDname (20, "RESEARCH"));
  • sql映射》》
    <select id="queryDeptnoAndDname" resultType="Dept">
        select * from dept where deptno=#{deptno} and dname=#{dname}
    </select>
  • 接口》》
public interface DeptMapper {
    //查询所有部门信息
    List<Dept> queryDept();
    //两个参数
    Dept queryDeptnoAndDname(@Param("deptno") int deptno,@Param("dname")  String dename);
}

在这里插入图片描述


3、接口代理开发(CRUD)

  • 简单说就是 删 查 改

增加数据(接口)》》》

public interface UserMapper { 
//新增用户
	public int addUser(String name,int pwd);
}

增加数据(sql映射)》》》

<!-- 新增用户 -->
 <insert id="addUser"> 
 INSERT INTO T_USER VALUES(seq_user_id.nextval,#{param1},#{param2}) 
 </insert>

修改数据(接口)》》》

public interface UserMapper { 
//修改用户信息 
	public int updateUser(User user);
}

修改数据(sql映射)》》》

<!-- 修改用户 -->
 <update id="updateUser" parameterType="User">
  update t_user set username=#{username},userpwd=#{userpwd} where id=#{id} 
  </update>

删除数据(接口)》》》

public interface UserMapper { 
//删除用户
	 public int deleteUser(int id);
}

删除数据(sql映射)》》》

<!-- 删除用户 --> 
<delete id="deleteUser" parameterType="int"> 
delete from t_user where id=#{id} 
</delete>

查询数据(接口)》》》

public interface UserMapper { 
//查询所有信息 
public List<User> queryUserByNamePwd(@Param("name") String name,@Param("pwd") int pwd);

查询数据(sql映射)》》》

<select id="queryUserByNamePwd" resultType="User"> 
select * from t_user where username=#{name} or userpwd = #{pwd} 
</select>

-----未完待续……

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:51:35  更:2021-09-19 07:52:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:33:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码