mybatis

mybatis 和 mybatis-plus 配置文件: 用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性、映射文件的位置。mapper接口和mapper.xml之间需要遵循一定规则,才能成功的让mybatis将mapper接口和mapper.xml绑定起来。创建IUserMapper接口: 用于操作数据库CURD的方法。文件:用于mybatis配置文件读取数据库信息。resources 目录下 创建。resources 目录下 创建。resources 目录下 的。类:用于跟数据库字段做映射。 阅读详情

mybatis

仅个人笔记

mybatis是一个优秀的基于Java的持久层框架,内部封装了jdbc,使开发者只需要关注SQL语句本身,而无需关注注册驱动,创建连接等繁琐过程

一、入门

  1. 三层架构

    1. 表现层

      • 展示数据
    2. 业务层

      • 业务处理
    3. 持久层

      • 与数据库交互

在这里插入图片描述

  1. 持久层技术解决方案

    1. jdbc
    2. Spring的JdbcTemplate
      • Spring中对jdbc的简单封装
    3. apache的DbUtils:
      • 对jdbc的简单封装
    4. (以上都不是框架)
      • jdbc是规范
      • JdbcTemplate与DbUtils都只是工具类
  2. mybatis概述

    使用了ORM思想实现了结果集的封装

    ORM(Object Relational Mapping 对象关系映射):

    • 把数据库表及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表
  3. mybatis的入门

    1. 环境搭建

      1. 创建maven工程并导入坐标
      2. 创建实体类和dao接口
      3. 创建mybatis的主配置文件
      4. 创建映射配置文件
    2. 环境搭建的注意事项

      1. 在mybatis中持久层的操作接口名称和映射文件也叫做:Mapper
      2. mybatis的映射文件位置必须与dao接口的包结构相同
      3. 映射配置文件的mapper标记namespace属性的取值必须是dao接口的全限定类名
      4. 映射配置文件的操作配置(select等等),id属性的取值必须是dao接口的方法名
      5. (遵循2,3,4点后,开发中就无需再写dao实现类)
    3. 简单案例

      1. 主配置文件
      <?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">
      
      <!--mybatis的主配置文件-->
      <configuration>
      
          <properties resource="jdbc.properties" />
      
          <!--配置环境-->
          <environments default="mysql">
              <!--配置mysql环境-->
              <environment id="mysql">
                  <!--配置事务类型-->
                  <!--<transactionManager type="JDBC"  /> 这里type="JDBC"表示按照原始jdbc模式进行,所以回滚或提交需要手写 -->
                  <transactionManager type="JDBC"  />
                  <!--配置数据源(连接池)-->
                  <dataSource type="POOLED">
                      <!--配置数据库的4个信息-->
                      <property name="driver" value="${driver}"/>
                      <property name="url" value="${url}"/>
                      <property name="username" value="${username}"/>
                      <property name="password" value="${password}"/>
      
                  </dataSource>
              </environment>
          </environments>
      
      
          <!--指定映射配置文件的位置,映射配置文件是指每一个dao独立的配置文件-->
          <mappers>
              <mapper resource="com/by/dao/UserMapper.xml" />
          </mappers>
      </configuration>
      1. 映射文件
      <?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">
      
      <mapper namespace="com.by.dao.UserMapper">
      
          <!--配置查询所有-->
          <select id="findAll" resultType="com.by.domain.User">
              select * from user
          </select>
      </mapper>
      1. 资源文件
      driver=com.mysql.cj.jdbc.Driver
      url=jdbc:mysql://localhost:3306/数据库名?serverTimezone=UTC
      username=用户名
      password=密码
      
      1. 实体类
      public class User implements Serializable {
          private Integer id;
          private String username;
          private Date birthday;
          private String sex;
          private String address;
      
          public User() {
          }
      
          public User(Integer id, String username, Date birthday, String sex, String address) {
              this.id = id;
              this.username = username;
              this.birthday = birthday;
              this.sex = sex;
              this.address = address;
          }
      
          public Integer getId() {
              return id;      
          }
      
          public void setId(Integer id) {
              this.id = id;
          }
      
          public String getUsername() {
              return username;
          }
      
          public void setUsername(String username) {
              this.username = username;
          }
      
          public Date getBirthday() {
              return birthday;
          }
      
          public void setBirthday(Date birthday) {
              this.birthday = birthday;
          }
      
          public String getSex() {
              return sex;
          }
      
          public void setSex(String sex) {
              this.sex = sex;
          }
      
          public String getAddress() {
              return address;
          }
      
          public void setAddress(String address) {
              this.address = address;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", username='" + username + '\'' +
                      ", birthday=" + birthday +
                      ", sex='" + sex + '\'' +
                      ", address='" + address + '\'' +
                      '}';
          }
      }
      1. 持久层接口
      public interface UserMapper {
          public List<User> findAll();
      }
      1. 测试类
      public class MyBatisTest {
          /**
           * MyBatis入门案例
           * @param args
           */
          public static void main(String[] args) throws IOException {
              //1.读取配置文件
              InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
              //2.创建SqlSessionFactory工厂
              SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
              SqlSessionFactory factory = builder.build(is);
              //3.使用工厂生产SqlSession对象
              //SqlSession session = factory.openSession(true);//设置为true表示自动提交,默认为false
              SqlSession session = factory.openSession();
              //4.使用SqlSession创建Dao接口的代理对象
              UserMapper userDao = session.getMapper(UserMapper.class);
              //5.使用代理对象执行方法
              List<User> userList = userDao.findAll();
      
              for (User user : userList) {
                  System.out.println(user);
              }
              //6.释放资源
              session.close();
              in.close();
          }
      }

二、基础

  1. 通过package管理映射文件的引入
<!--修改在主配置文件里的信息-->
<mappers>
        <!--此种写法可以直接引入包下的所有映射文件,但是必须要求mapper接口与映射文件在同一个包下-->
        <package name="com.by.dao"/>
</mappers>
  1. 对于有参数的方法,可以设置parameterType(不写也可以,mybatis会自动识别,但是为了规范,代码可读性,还是写上好)
<update id="方法名" parameterType="参数类型">
    update xxx set xxx =xxx where xx=xx;
</update>
  1. mybatis获取值的两种方式
${}
使用Statement,使用字符串拼接的方法,有SQL注入风险
一般在模糊查询与批量删除时使用

#{}
使用PrepareStatement,可以防止SQL注入
  1. 获取自动生成的主键
1. 在原生的jdbc中有conn.prepareStatement(sql语句,1)方法//第二个参数设置为1就可以获得自动返回的信息
调用
Resultset rs = ps.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);//获取自动生成的主键
2. mybatis中的设置(useGeneratedKeys默认就是true)
<insert id="方法名" useGeneratedKeys="true" keyProperty="对象的属性名" >
    insert into xxx values(xxx,xxx,#{xxx})
</insert>
  1. 获取不同参数值的方式
1. 传入单个String或基本数据类型及其包装类的参数
${value}或者${_parameter}
//必须为value或_parameter,不管入参叫什么

#{xxx}
//参数名任意,但尽量与入参保持一致



2. 传入一个Javabean
#{}与${}都能通过属性名直接获取属性值,但是要注意${}的字符类型的单引号问题



3. 当传输多个参数时,mybatis会默认将参数放入map集合中
两种方式:
	(1)以0,1,2,... ,N-1为键,以参数为值
	(2)以param1,param2,... ,paramN为键,以参数为值
#{0}或#{param1}表示第一个参数
#{1}或#{param2}表示第二个参数,以此类推

${param1}表示第一个参数
${param2}表示第二个参数,以此类推



4. 当传输map参数时
#{}与${}都能通过键的名字直接获取值,但是要注意${}的字符类型的单引号问题



5. 对3的另一种写法,就是在接口中加上@Param("key")注解来指定map集合中的键
Object getUserByIdAndNameByParam(@Param("id")String id,@Param("name")String name);



6. 当参数为List或Array,mybatis会默认放入map集合中
List以list为键
Array以array为键

  1. 多对一自定义映射
<!--写法一-->
<!--
    当处理复杂的表关系的查询结果不能满足属性名直接映射时,需要进行自定义映射配置,
    假设User对象中还有一个Dept对象
-->
<!--自定义映射配置-->
<resultMap id="User" type="userDept">
    
    <!--id专门设置主键的映射,column是列名,property是属性名 -->
    <id column="id" property="id" />
    <!-- result设置非主键的映射 -->
    <result column="name" property="name" />
    <result column="did" property="dept.did" />
    <result column="dname" property="dept.dname" />

</resultMap>

<select id="findAllUser" resultMap="userDept">
    select u.id, u.name, u.did, d.dname from t_user u left join t_dapt d on u.did=d.did
</select>


<!--或者---------------------------------------------->
<!--写法二-->
<!--自定义映射配置-->
<resultMap id="User" type="userDept">
    <id column="id" property="id" />
    <result column="name" property="name" />
    
    <!--property为属性名,javaType为对象类型(全限定类名)-->
    <association property="dept" javaType="Dept">
        <id column="did" property="did" />
        <result column="dname" property="dname" />
    </association>
    
</resultMap>
<select id="findAllUser" resultMap="userDept">
    select u.id, u.name, u.did, d.dname from t_user u left join t_dapt d on u.did=d.did
</select>

(后续再补充)

Mybatis三剑客(mybatis-generator、mybatis-plugin、mybatis-pagehelper)介绍、配置及破解 本文用的是maven,idea15Mabatis三剑客分别是:mybatis-generator、mybatis-plugin、mybatis-pagehelper一、mybatis-generator根据我们的数据库自动生成pojo、dao和xml文件 pojo里面放的是跟数据库字段一一对应的对象、dao层是接口,供service使用,xml是这个dao层接口的实现,sql语句都写在xml里1. 阅读详情

相关推荐

深度解析 MyBatis 生态三大主流框架:MyBatis-Flex、MyBatis-Plus 与 Fluent-MyBatis

本文对比分析了MyBatis三大增强框架:MyBatis-Flex、MyBatis-Plus和Fluent-MyBatis。MyBatis-Flex采用轻量级架构,无SQL解析设计使其性能最佳;MyBatis-Plus功能全面,企业级特性丰富;Fluent-MyBatis提供流式API,代码可读性强。三者各具特色,开发者可根据性能需求、功能要求和开发体验选择合适的框架。

awei0916的专栏 1944

Mybatis save、saveOrUpdate、update的区别

save方法只适用于插入操作,如果数据库中已经存在相同的记录,会抛出异常。saveOrUpdate方法既可以用于插入操作,也可以用于更新操作,当数据库中不存在相同的记录时,会执行插入操作;如果已经存在相同的记录,则会执行更新操作。update方法只适用于更新操作,如果数据库中不存在相同的记录,则不会执行任何操作。通过以上介绍,可以看到save、saveOrUpdate和update方法在Mybatis中的不同作用。在实际开发中,需要根据业务需求选择合适的方法来执行相应的操作。

木头大左的博客 2594

AF3​​​​​​​ Msa、TemplateHit、HitMetadata类解读

Msa:处理 多序列比对 (MSA) 结果,为 AlphaFold3 提供 序列进化信息。 TemplateHit:存储 查询序列与模板结构的比对信息,用于 筛选模板。 HitMetadata:提供 比对模板的 PDB 结构信息,帮助 解析和使用模板数据。

qq_27390023的博客 819

记录mybatis-plus的save()操作

简述问题: 前端传过来一个dto(id为null),然后使用mybatis-plus的save()将这条数据插入数据库,后续有使用到这个dto的id进行逻辑处理,但是!在这个场景下前端传过来的id永远为null,为什么在save()之后进行dto.getId()的时候获取到了id。在debug别人的代码的时候产生了一个疑问在这里记录一下。

weixin_61045428的博客 1879

深入了解神经网络:构建人工智能的基石

这篇博客将为您解释神经网络的构造,让您能够理解这个令人着迷的领域的基本工作原理。神经网络是人工智能领域的关键技术,它们的构造基于神经元的灵感,并结合了数学、统计和机器学习的原理。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。:这是神经网络的核心部分,包含多个层次的神经元。、神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;

AI_dataloads的博客 2万+

S型速度曲线进阶:基于Sin²(x)的PLC平滑运动控制实践(以伺服/步进系统为例)

本文深入探讨了基于Sin²(x)的S型速度曲线在PLC平滑运动控制中的实践应用,特别针对伺服/步进系统。通过对比传统梯形曲线和七段S曲线,详细展示了Sin²(x)曲线在加速度连续性、计算效率和参数自适应性方面的优势,并结合博图平台的具体实现技巧和实战案例,为精密运动控制提供了优化方案。

weixin_28718793的博客 242

MybatisPlus的save方法

在上述配置中,useGeneratedKeys="true"用于开启自动生成主键的功能,keyProperty="id"指定了自动生成主键值后填充到UserDto对象的哪个属性中。当我前端传递的是一个整合的数据模型Dto,需要同时插入俩张表,并且其中一张表的属性需要得到另一张表的id,如何实现呢?通过上述步骤,你可以实现在使用Mybatis进行数据插入时,自动获取到自增主键的值,并将其填充到对应的对象中。使用Mybatis进行插入操作时,可以通过配置来获取插入后的自增主键值,并将其填充到对应的对象中。

qq_55272229的博客 4936

《Halcon 100项目-9》Halcon彩色线序检查

Halcon彩色线序检查

doubleintfloat的博客 1044

mybatis实现saveOrUpdate

mybatis实现saveOrUpdate最近在做项目过程中遇到需要更新或者插入的问题,就想起hibernate有个saveOrUpdate的方法,想着mybatis是不是也有这个方法。于是上网查找资料。该问题有两种解决方案。方法1:使用mybatis的标签<insert id="saveOrUpdate" > <selectKey keyProperty="count" resultType=

Howard的博客 1万+

RT-DETR目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 3361

分享Charles抓包 显示<unknown> 解决方案 !

首先电脑上需要安装charles,然后需要设置手机上的WiFi设置,修改配置中的代理设置,把服务器的主机名设置成你电脑当前的ip地址(需要注意的是,你的代理服务器主机名的ip地址要和你当前连的ip地址的网段需要一致)。像 Charles 这样的工具,虽然功能强大,但仍然需要用户具备一定的配置和排障能力,以应对各种复杂的网络环境。通过将 Charles 的 SSL 证书正确安装到移动设备中,并在设置中启用“允许不安全的内容”选项,最终成功解决了这一问题,并准确抓取到所有请求数据。Charles 显示。

朱雀随云记的博客 8105

mybatis或者mybatis-plus中save方法返回主键值

1.mapper.xml中: 方式:useGeneratedKeys=“true” keyProperty=“id” keyColumn=“id” 解释:在xml中定义useGeneratedKeys为true,返回主键id的值,keyColumn和keyProperty分别代表数据库记录主键字段和java对象成员属性名 <insert id="saveBill" parameterType="com.jd.fp.mrp.domain.model.biz.AdjustBillInfo"

m0_61083409的博客 3000

自动驾驶算法-滤波器系列(三)——不同运动模型(CV、CA、CTRV、CTRA)的建模和推导

CV & CA & CTRV & CTRA1. CV模型2. CA模型3. CTRV模型4. CTRA模型 1. CV模型 2. CA模型 3. CTRV模型 4. CTRA模型

weixin_41480034的博客 2万+

Mybatis-Plus和Mybatis区别

核心关系:MyBatis-Plus 是 MyBatis 的增强版,完全兼容 MyBatis,不改变原有使用方式,仅做功能补充。核心差异:MP 提供了「通用 CRUD、条件构造器、分页插件、代码生成器」等开箱即用的功能,大幅减少重复代码;而原生 MyBatis 更侧重 SQL 的手动控制。选型建议:优先选 MyBatis-Plus(开发效率更高),遇到复杂 SQL 时,仍可像原生 MyBatis 一样手动编写,兼顾效率与灵活性。

weixin_53050448的博客 1241

基于STM32XX的LCD液晶显示屏(HS280S010B、驱动芯片:ST7789V)驱动C程序设计

/ 16位/pixel (RGB565)#define LCD_WIDTH 240 // 屏幕宽度。#define LCD_HEIGHT 280 // 屏幕高度。LCD_ROTATION_180, // 180度旋转。LCD_ROTATION_270 // 270度旋转。LCD_ROTATION_90, // 90度旋转。LCD_ROTATION_0 = 0, // 0度旋转。

myron6688的博客 370

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MYBATIS缓存

MYBATIS的第一缓存是SQLSession 并且这种缓存是即使在仅仅只有一个框架的情况下都是存在的, 因为第一缓存是默认开启的(default), 因为第一缓存级别使用的是SqlSession, 所以在调用同一个SqlSession, 并且在这同一个SqlSession当中多次查询同一个数据, 那么仅仅只会执行一次相应的SQL语句, 之后会直接从SQL缓存当中进行获取以我的测试类为例@Test结果如图所示, 跟我们预想的一样, 在第一级别的缓存下, 仅仅调用了一次相应的查询语句。

2303_79546217的博客 1432

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MyBatis

mybatis、mybatis-spring、mybatis-springboot源码学习

parkerJ 645

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Mybatis

MyBatis 是一款优秀的持久层框架MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 实体类 【Plain Old Java Objects,普通的 Java对象】映射成数据库中的记录。MyBatis 本是apache的一个开源项目ibatis, 2010年这个项目由apache 迁移到了google code,并且改名为MyBatis。2013年11月迁移到。

2301_76556912的博客 1611

Mybatis的批量操作

每种方法都有其适用场景和限制。例如,使用 标签生成的批量 SQL 在某些数据库中可能因为 max_allowed_packet 大小限制而失败。因此,在选择批量处理方案时,需要根据具体的业务需求和数据库特性进行综合考虑。愿你我都能在各自的领域里不断成长,勇敢追求梦想,同时也保持对世界的好奇与善意!

weixin_45809780的博客 2602

MyBatis02-mybatis-config.xml配置文件讲解

mybatis-config.xml核心配置文件,内容的讲解

qq_31532983的博客 1405

Spring Boot整合MyBatis实现简单的CRUD

这篇文章主要针对java初学者,详细介绍如何创建一个基本的springboot项目来对数据库进行crud操作。

沐雨橙风ιε的博客 4489

MyBatis缓存机制学习

MyBatis缓存机制解析:本文详细介绍了MyBatis的一级缓存和二级缓存机制。一级缓存默认开启,作用域为SqlSession,基于HashMap存储;二级缓存需手动配置,作用域为Mapper级别,支持第三方缓存框架如EhCache。文章通过代码示例演示了缓存特性,测试了缓存生效条件,并详细解析了缓存标签属性(回收策略、刷新间隔等)。同时介绍了MyBatis与EhCache的整合步骤,包括依赖配置、参数调整等。最后分析了二级缓存的适用场景(读多写少、非敏感数据)和局限性(分布式环境不一致、缓存粒度粗等问题

ywl470812087的博客 12万+

MyBatis是什么?MyBatis-Plus是什么?

MyBatis就是负责实现数据持久化的一套半成品程序,MyBatis-Plus是基于MyBatis的一个增强框架。

m0_58137791的博客 508

springboot整合mybatis(一)入门

mybatis

xiatianit的博客 3026

Mybatis动态查询条件构建的历史演进:MyBatis,MyBatis-Generator-Example,MyBatis-Plus,MyBatis-Flex

Mybatis动态查询条件构建的历史演进:MyBatis,MyBatis-Generator-Example,MyBatis-Plus,MyBatis-Flex。 MyBatis-Generator动态查询条件构建。 updateByExampleSelective的含义。

宋冠巡的博客 1843
上一篇: Mysql进阶知识
下一篇: Spring5
Save_By
博客等级 码龄7年 1粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值