day03 MyBatis 核心

这篇具有很好参考价值的文章主要介绍了day03 MyBatis 核心。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

mapper接口和原理

之前的持久层组成部分:UserMapper.xml+IUserDAO+UserDAOimpl

使用mapper接口:UserMapper.xml+UserMaper接口

mapper接口的好处;

避免持久层里面传入参数错误:以前里面写错了不会报错,只有等到运行代码才能看到错误,第二个参数的类型是Objiect

MAPPer使用注意

1.mapper接口的命名为xxxMapper,包的路径和对应的xml文件的路径相同,编译后的路径相同

day03 MyBatis 核心

day03 MyBatis 核心

2.xml命名空间使用对应xxxmapper接口的权限定名

day03 MyBatis 核心

3.mapper 接口方法名和mapper.xml文件中的(select | update | delete | insert)id值一样

xml文件

day03 MyBatis 核心

mapper文件

day03 MyBatis 核心

4.方法返回的类型对应xml中 resultType / resultMap 类型

5.方法的参数类型对应 SQL 元素中定义的 paramterType 类型(一般不写)。

在测试中使用mapper接口
@Test
public void get() {
    SqlSession session = MybatisUtil.getSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    System.out.println(mapper.get(1L));
    session.close();
}

注意:mapper.get是中的get是mapper接口中的方法名,里面的传的值的类型由接口进行规定

mapper接口原理

底层就是mybatis使用动态代理来创建mapper的实现类对象

底层的操作方式和以前一样

使用mapper进行多条件查询

使用多条件的时候,mybatis会将多个条件进行封装成map集合(arg0,arg1,param1,param2),

此时在xml中的select语句直接使用username=#{username} and password=#{password}就会出错

解决办法:在xxxMapper中加上@param注解,

day03 MyBatis 核心

day03 MyBatis 核心

Mybatis中的#和$的区别

1.相同点

都可以获取map或者javabean中的对象信息

2.不同点

(1)**#会将所有传过来的任何类型的参数加上单引号,$**不会自动加上,只能手动在传参数那里加单引号,否则将传过来的参数作为SQL语句的一部分

(2)#可以防止sql注入问题(preparaStatement),安全,$不安全

(3)#支持将简单类型(string int)作为参数值,$不行

Mybatis中的动态sql:if和where

**使用地方:**进行多条件判断的时候

xml中的if作用

test里面的是一个boolean表达式

xml中的where作用

满足条件就将where加进去,不满足条件的就不将where进行拼接

where和if联合使用,使用CDATA进行包裹运算符,或者使用转义符

day03 MyBatis 核心

Mybatis中的动态sql:set

使用set可以防止修改数据的时候丢失数据,当某个属性传入的值为null的时候,会丢失数据

set和if配合进行使用,在if的外层加上set

**注意事项:**修改的时候mapper接口不能返回任何类型,否则报错,弄一个测试类进行测试

xml

day03 MyBatis 核心

mapper接口

day03 MyBatis 核心

测试类

 @Test
    public  void update(){
    SqlSession session = MybatisUtil.getSession();
    EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
    Employee employee = new Employee();
    employee.setSalary(new BigDecimal(1300));
    employee.setId(1L);
    mapper.update(employee);
    session.commit();
    session.close();
}
Mybatis中的动态sql:foreach

使用地方:批量删除的时候,使用的数组或者集合进行删除就使用foreach遍历进行删除

注意事项:编写mapper接口的时候需要增加一个注解,否则一个数组xml问津不能进行识别

xml文件

<delete id="delete" >
    delete from employee
    where id in
        <!--
        collection:需要遍历的数组或者集合
        open:开始拼接的字符串
        item:遍历后元素的别名
        separatotor:遍历元素后使用的分隔符
        close:遍历结束拼接的字符串
        -->
        <foreach collection="ids" open="(" item="id" separator="," close=")">
            #{id}
        </foreach>
</delete>

mapper接口

day03 MyBatis 核心

测试类

day03 MyBatis 核心

id}

文章来源地址https://www.toymoban.com/news/detail-466113.html


mapper接口

[外链图片转存中...(img-t06bZELT-1684997920744)]

测试类

[外链图片转存中...(img-BbYOftJk-1684997920745)]























到了这里,关于day03 MyBatis 核心的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis - DAO 接口(Mapper.xml)支持方法重载吗?

    方法重载(Method Overloading)是指在同一个类中定义多个方法,它们具有相同的方法名但参数列表不同。 在 MyBatis 的 DAO 层接口中, 是允许方法重载的。 在 DAO 层接口中,可以根据不同的需求和条件定义多个方法,提供不同的查询或操作方式。 在 MyBatis 的 XML 映射文件中, 是

    2024年01月17日
    浏览(43)
  • Mybatis源码分析_Mapper接口是如何实例化的 (2)

    我们在使用Spring+mybatis的时候,经常都是直接写一个接口和一个对应的 ***Mapper.xml文件,然后业务代码就可以直接注入这个接口了。它是如何做到的呢? 接口: xml    想搞清楚这个问题,那还是要从Mybatis底层源码进行分析的。Mybatis是一个非常优先的框架,它大量的将所谓的

    2024年02月10日
    浏览(40)
  • 答疑解惑:解释在Mybatis-Spring下@Mapper与@MapperScan为何不能同时生效以及实现动态条件注册Mapper接口

    若项目中使用了@MapperScan注解后,则@Mapper注解不再生效 , 原因是:@MapperScan注解 会执行@Import(MapperScannerRegistrar.class),而MapperScannerRegistrar又会注册MapperScannerConfigurer BEAN,在MapperScannerConfigurer BEAN中会完成基于配置的包目录扫描注册所有mapper interface代理BEAN,而@Mapper注解的生效

    2024年02月11日
    浏览(39)
  • MyBatis原理分析手写持久层框架

    JDBC API 允许应用程序访问任何形式的表格数据,特别是存储在关系数据库中的数据 代码示例: 剖开代码,逐个分析: (1)加载驱动,获取链接: 存在问题1:数据库配置信息存在 硬编码 问题。 优化思路:使用配置文件! 存在问题2:频繁创建、释放 数据库连接 问题。 优

    2024年02月09日
    浏览(45)
  • Spark核心RDD详解(设计与运行原理,分区,创建,转换,行动与持久化)

    在实际应用中,存在许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的

    2024年02月04日
    浏览(46)
  • Springboot 多模块(A依赖B)集成mybatis , mybatis.mapper-locations 配置多个mapper路径配置

    最近在用SpringBoot 多模块 集成mybatis,模块A 依赖于模块B, 模块A 和模块B 各自有各自的业务逻辑和mapper 文件,模块A 的mapper xml 文件存放在resource 下的 mybatisMapper 文件夹,模块B 的mapper xm 文件存放在 B 模块的resource 下的 mapper 文件夹, 打包时以A 模块为主,B 以jar 包方式被A 依赖

    2024年02月03日
    浏览(51)
  • Mybatis|mapper配置文件xml位置

    在核心配置文件mybatis-config.xml中设置映射文件位置 application.yml文件中添加配置: mybatis案例中和springboot中都是一样的,只要目录名和包名相同 需要在pom.xml中添加如下内容 越努力,越幸运! codefishyyf与你一起努力!

    2024年02月06日
    浏览(69)
  • Mybatis mapper.xml 判断条件写法注意

    1.判断String是否为空 if test=\\\"stringParam != null and stringParam != \\\'\\\'\\\"/if 2.判断Integer是否大于0 判断等于  when test=\\\"item.mark == 1\\\"\\\" 3.判断List是否不为空 5.判断字符串是否等于特定字符(比如此处的user)

    2024年02月16日
    浏览(62)
  • MyBatis源码剖析之Mapper代理方式细节

    MyBatis是一个流行的Java持久层框架,它提供了多种方式来执行数据库操作,其中之一就是通过Mapper代理方式。通过Mapper代理方式,开发者可以编写接口,然后MyBatis会动态地生成接口的实现类,从而避免了繁琐的SQL映射配置。 具体代码如下: 思考⼀个问题,通常的Mapper接⼝我

    2024年02月14日
    浏览(37)
  • (MVC)SpringBoot+Mybatis+Mapper.xml

    前言:本篇博客主要对MVC架构、Mybatis工程加深下理解,前面写过一篇博客:SprintBoot+html/css/js+mybatis的demo,里面涉及到了Mybatis的应用,此篇博客主要介绍一种将sql语句写到了配置文件里的方法,即Mybatis里Mapper.xml文件配置,其主要用于定义sql语句和映射关系 目录 MVC架构流程图

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包