mybatis 01

本文围绕MyBatis展开,介绍了通过命名空间和id定位SQL语句的原理,涉及SqlSessionFactoryBuilder等关键类。还讲解了数据库字段与pojo映射、参数传递、主键获取、动态SQL元素等用法。此外,探讨了批量操作、代码生成器,以及一级和二级缓存的特点,不建议开启二级缓存。

1、为什么通过命名空间+id 这两个坐标就可以唯一的定位一条sql 语句  在mybatis中是怎么实现的?看源码

几个核心的类:

SqlSessionFactoryBuilder 通过建造者模式 实例化SqlSessionFactory   建造的过程是一个很复杂的过程  对外是透明的

 

SqlSessionFactory   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory

SqlSession sqlsession是线程不安全的 所以要保证线程独享  

Mapper

这四个关键类完成一次数据库的访问

 

resultType还是resultMap?

数据库查询出来的字段和pojo映射

resultMap元素是mybatis中最重要最强大的一个元素

<resultMap id ="" type="" autoMapping=""></resultMap>  有三个属性 id type autoMapping

 

怎么传递多个参数:1、使用map传递参数 2、使用注解传递参数 3、使用javaBean的方式传递参数

 

怎么样获取主键?

预编译 给传入参数加单引号 prepareStatement

动态sql元素:

<if></if>

<choose>   <when>  <otherwise>

<trim> <where> <set>

<foreach>

其中if和foreach是最主要的 其他的标签都是辅助作用

 

 

<where></where>  -------> 如果<where>标签内的<if>条件成立的话  去除里面的and 或者 or  如果不成立的话 不会加where 

<set></set> 标签作用:把set块中的逗号去掉  再update的时候常用

<insert>是最难的  需要两个代码块去填充  

<where><set>标签是<trim>标签的一种简写  <trim prefix= "where" prefixOverrides="and | or">

 

 

高频面试题:

通过mybatis怎么样进行批量的操作?

1、通过foreach动态拼装sql语句

2、使用BATCH类型的excutor

 

 

mybatis 代码生成器:

 

为什么超过三个表禁止join?

大部分数据库的性能都太弱了,尤其是涉及到大数据量的多表 join 的查询,需要的对比
与运算的量是会急速增长的,而数据库优化器在多表场景可能不是执行最优的计划,所以这
条规范限制了 join 表的个数,还提及了 join 字段类型必须一致并有索引;那有这种约束复杂
SQL 怎么实现?考虑如下三种方式减少 join 表的关联:

1、字段允许适当冗余,以提高查询性能

2、分两次 select,第一次 select 取得主表数据,第二次查从表数据

3、将热点数据存缓存,提高数据的读取效率

 

关联元素:

association 用于表示一对一关系

collection 用于一对多关系

association 标签 嵌套结果方式 常用属性:
property :对应实体类中的属性名,必填项
javaType :属性对应的 Java 类型
resultMap :可以直接使用现有的 resultMap ,而不需要在这里配置映射关系
columnPrefix :查询列的前缀,配置前缀后,在子标签配置 result column 时可以
省略前缀
 
association 标签 嵌套查询方式 常用属性
select :另 一个映射查询的 id, MyBatis 会额外执行这个查询获取嵌套对象的结果
column :列名(或别名),将主查询中列的结果作为嵌套查询的参数
fetchType :数据加载方式,可选值为 lazy eager,分别为延迟加载和积极加载 ,
这个配置会覆盖全局的 lazyLoadingEnabled 配置
 

 

mybatis中的缓存:

一级缓存:一级缓存默认是开启的 想要关闭一级缓存可以在select标签上配置 flushCache="true" ;一级缓存存在于sqlsession的生命周期中 在同一个sqlsession中查询时mybatis会把执行的方法和参数 通过算法生成缓存的键值 将键值和查询结果存入一个map对象中  如果同一个sqlsession中执行的方法和参数完全一致 那么通过算法会生成相同的键值  当map中已经存在该键值 就会返回缓存中的对象 ;任何的insert update delete操作都会清空一级缓存

二级缓存:二级缓存也叫应用缓存  二级缓存存在于sqlsessionfactory的生命周期中;可以理解为跨sqlsession  缓存是以namespace为单位  不同namespace下的操作 互不影响。

                    二级缓存会造成脏读 不建议开启 

 

 

<think>嗯,用户遇到了Maven项目中pom.xml里的artifactId和版本号显示红色报错的问题。首先,我需要回忆一下常见的Maven配置错误。通常,pom.xml中的红色标记表示依赖项或配置有问题,可能是语法错误、版本号不符合规范,或者插件配置不正确。 用户提到artifactId是“mybatis01”,版本号是“1.0-snapshot”,这里可能的问题在于版本号的格式。Maven的版本号通常遵循特定规范,比如使用大写字母的“SNAPSHOT”而不是小写的“snapshot”。用户可能误将“SNAPSHOT”写成了小写,导致Maven无法识别,从而报错。这时候,应该检查版本号是否正确,把“1.0-snapshot”改为“1.0-SNAPSHOT”。 接下来,检查artifactId是否有特殊字符或不符合命名规范。Maven的artifactId应该使用小写字母和数字,以及连字符,不能有空格或其他特殊字符。用户的artifactId是“mybatis01”,看起来没问题,但如果有其他隐藏的字符或者拼写错误,也可能导致问题。需要确认pom.xml中没有拼写错误,比如多余的符号或错别字。 另外,还要考虑Maven仓库的问题。有时候本地仓库中的依赖项损坏或未下载完成,也会导致红色报错。这时候可以尝试清理本地仓库并重新下载依赖,使用命令“mvn clean install -U”来强制更新依赖。 还有可能的是父项目或聚合项目的配置问题。如果当前项目是子模块,需要确认父pom中的groupId、artifactId和version是否正确,并且父项目已经正确安装到本地仓库中。如果父项目没有正确安装,子模块可能会因为找不到父pom而报错。 另外,检查Maven插件的配置是否正确。比如,引用的用户提到过MyBatis Generator插件的问题,可能插件版本不兼容或配置错误导致构建失败。需要确认插件的版本是否与当前项目兼容,并且配置参数如JDBC驱动是否正确。 还有可能的是项目的打包配置问题,比如没有正确配置spring-boot-maven-plugin,导致打包时找不到主类,但用户的问题集中在artifactId和版本号的红色标记,这可能与打包配置无关,但也不能完全排除。需要综合查看整个pom.xml文件,确认是否有其他配置错误。 总结一下,用户需要检查以下几点: 1. 版本号是否使用正确的“SNAPSHOT”格式。 2. artifactId是否符合命名规范,没有特殊字符。 3. 清理本地Maven仓库并重新下载依赖。 4. 检查父项目配置是否正确。 5. 确认插件配置无误。 此外,用户提供的引用中提到了MyBatis Generator插件的问题,可能与此相关,但当前问题更可能出在pom的基本配置上。建议用户先修正版本号,然后逐步排查其他可能的问题。</think>### 问题分析 Maven项目中`pom.xml`的`artifactId`或版本号(如`1.0-snapshot`)显示红色报错,通常由以下原因导致: 1. **版本号格式错误**:Maven要求快照版本号必须为大写`SNAPSHOT`,若写成小写(如`snapshot`)会导致语法错误[^2][^3]。 2. **依赖未下载或损坏**:本地仓库依赖未正确下载或缓存异常。 3. **父项目配置错误**:若当前模块是子模块,需确保父项目的`groupId`、`artifactId`、`version`配置正确且已安装到本地仓库。 --- ### 解决方案 #### 1. 修正版本号格式 将`1.0-snapshot`改为`1.0-SNAPSHOT`: ```xml <version>1.0-SNAPSHOT</version> ``` #### 2. 检查`artifactId`命名规范 - 使用小写字母、数字和连字符(如`mybatis01`符合规范)。 - 避免特殊字符或空格。 #### 3. 清理Maven本地仓库 执行以下命令强制更新依赖: ```bash mvn clean install -U ``` #### 4. 检查父项目配置 若为子模块,需在`pom.xml`中正确声明父项目: ```xml <parent> <groupId>父项目的groupId</groupId> <artifactId>父项目的artifactId</artifactId> <version>父项目的版本号</version> </parent> ``` #### 5. 验证插件配置 确保插件版本兼容性(如`spring-boot-maven-plugin`): ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> ``` --- ### 验证步骤 1. 修改`pom.xml`后,右键点击项目 → `Maven` → `Reload Project`。 2. 若仍报错,检查Maven控制台输出,定位具体错误原因[^1][^4]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值