码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mybatis 知识点大总结


    目录

    1、简介

    1.1、什么是Mybatis

    1.1.2如何获得Mybatis?

    1.2、持久层

    1.3、持久层

    1.4、为啥需要使用Mybatis?

    2.mabatis 配置问题

    2.1 xxxMapper.xml在核心文件中的配置,有两种方式,推荐包的形式(就是把xxxMapper.xml全都下载这个包下面)

    2.2、sqlsession 的创建​编辑

    2.3 一些注意问题

     2.4、使用Map

    3.实现增删改查 crud

    4.SqlMapConfig.xml核心配置文件

    4.1 configuration(配置)

    4.2 类型别名

    4.3 settings 配置

     4.4映射器(mappers)

    4.5生命周期和作用域

    5.解决属性名和字段名不一致的问题

    6.日志

      6.1 日志工厂(核心配置文件中配置)


    1、简介

    1.1、什么是Mybatis

    • MyBatis是一款优秀的持久层框架
    • 它支持定制化SQL、存储过程以及高级映射。
    • MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
    • MyBatis 可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO (Plain Old JavaObjects,普通老式Java对象)为数据库中的记录。
    • MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。
    •  2013年11月迁移到Github。

    1.1.2如何获得Mybatis?

      Github : https://github.com/mybatis/mybatis-3

        Mybatis入门必看文档:   mmybatis – MyBatis 3 | 入门

    1.2、持久层

    数据持久化

    • 持久化就是将程序的数据在持久状态和瞬时状态转化的过程
    • 内存:断电即失
    • 数据库(jdbc)io文件持久化
    • 生活中:冷藏(吃的时候去解冻)

    why? 持久化

    • 有一些对象不能让他丢掉
    • 内存太贵

    1.3、持久层

    Dao层,service层,Controller层

    • 完成持久化工作的代码块
    • 地层界线十分明显

    1.4、为啥需要使用Mybatis?

    • 帮助程序员将程序存入到数据库中
    • 简化传统JDBC,简化框架和自动化
    • 不用Mybais也可以,开发简单(Maven依赖+sql映射文件+xml配置文件)
    • sql和代码分离,提高可 维护性
    • 提供映射表前,支持对象数据库orm字段的关系映射
    • 支持对象关系组件映射
    • 提供xml标签,支持编写动态sql

    2.mabatis 配置问题

    2.1 xxxMapper.xml在核心文件中的配置,有两种方式,推荐包的形式(就是把xxxMapper.xml全都下载这个包下面)

    2.2、sqlsession 的创建

     综上所述:记得利用try catch 在 finally中 执行 sqlsession.close()

    2.3 一些注意问题

     2.4、使用Map

    如果我们操作的数据库字段多,比较容易混淆,可以使用map 来实现 操作如下

    //    万能的map  接口
        public int addUser2(Map<String,Object> map);
    //此时#{} 里面的内容就是 String 所代替的内容 赋值的时候设置好value值与其对应   value的类型与数据库中的 字段类型对应
    <insert id="addUser2" parameterType="map">
    insert into user(id,passwd)
    values(#{userId},#{password})
       </insert>
       @Test
        public void testMapAddUser(){
            SqlSession sqlSession = SqlSessionUtils.getSqlSession();
            UserDaoMapper mapper = sqlSession.getMapper(UserDaoMapper.class);
             Map<String,Object> map =new HashMap<>();
             map.put("userId",7);
            map.put("password",999999);
            int i = mapper.addUser2(map);
            System.out.println(i);
     sqlSession.commit();
    sqlSession.close();
        }

    3.实现增删改查 crud

    4.SqlMapConfig.xml核心配置文件

    4.1 configuration(配置)

    • properties(属性)
    • settings(设置)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • Eenvironments(环境配置)
      • environment(环境变量)
        • transactionManager(事务管理器)包含(JDBC 和 MANAGED)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)
    • mappers(映射器)

    注意:environments 标签内 可以配置多个环境 也就是数据库 需要哪一个只需要修改DEFAULT属性即可 。

    4.2 类型别名

    4.3 settings 配置

     11.Mybatis核心配置文件之<settings></settings>_羊肉串学爪哇的博客-CSDN博客

    常用的

     4.4映射器(mappers)

    MapperRegistry 注册绑定我们的Mapper文件:

    4.5生命周期和作用域

    生命周期和作用域, 是至关重要的 因为措施的使用会导致严重的后果

    SqlsessinFactoryBuilder

    • 一旦创建了SqlsessinFactory 就不在需要了
    • 局部便令

    SqlsessinFactory

    • 可以想象为数据库连接池
    • SqlsessinFactory一旦被创建就应该在运行期间一直存在,没有理由丢弃他或者穿件另一个实例
    • 因此SqlsessinFactory的最佳坐拥数是应用作用域
    • 最简单的就是使用单例模式或者静态单例模式

    Sqlsessin

    • 连接到一个连接池的请求
    • Sqlsessin的实力不是线程安全的,因此是不能被 共享的 最佳作用域是请求方法或作用域
    • 用完之后需要关闭,否则资源被占用!!! sqlsession.colse()  十分重要的

    5.解决属性名和字段名不一致的问题

    数据库:

    实体类:

     查询的password 为null  说明字段名不匹配

     解决办法:

    • 起别名(能解决问题 但没有意义)
    1. <select id="getUserById" resultType="com.qiku.pojo.User">
    2. select id,username,passwd as password
    3. from user where id=#{id}
    4. </select>
    • resultMap 映射( column 是数据库中的字段  而property 是实体类中的字段 一样的其实可以不用映射比如 id 和name) 
      1. <resultMap id="UserMap" type="user">
      2. <id column="id" property="id"></id>
      3. <result column="username" property="username"></result>
      4. <result column="passwd" property="password"></result>
      5. </resultMap>
      6. <select id="getUserById" resultMap="UserMap">
      7. select *
      8. from user where id=#{id}
      9. </select>

      6.日志

      6.1 日志工厂(核心配置文件中配置)

    如果一个数据库操作,出现了日常,日志就是最好的助手 以前用debug 现在就用日志工厂

    1. <settings>
    2. <!-- 日志工厂注意 大小写和 空格 任意出错都用不了-->
    3. <setting name="logImpl" value="STDOUT_LOGGING"/>
    4. </settings>

  • 相关阅读:
    研发团队数字化转型实践
    Linux安装Redis数据库,无需公网IP实现远程连接
    postgresql Window Functions
    【云原生】K8S--负载均衡详细介绍;什么是K8S的负载均衡?
    【AI核心能力】第2讲 机器学习初探
    读书笔记|指数型函数对算法的影响实际应用-day3
    ——二叉树
    【OpenCV】红绿灯检测C++Demo实现
    三步实现支付宝支付【go语言 支付宝沙箱】
    VCS自带的UPF低功耗仿真demo介绍
  • 原文地址:https://blog.csdn.net/weixin_45172902/article/details/125456420
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号