Mybatis总结(持续补充),kafka和mq的区别面试

配置环境:需要引入Mybatis的一个jar包

然后写一个mybatis-config.xml的配置文件里面写着mybatis的核心配置文件,例如:连接的哪个数据库,资源文件的注册(Mapper.xml等)

书写一个MybatsiUtils工具类封装一个方法返回sqlsession,底层的SqlSessionBuider读取配置文件mybatis-config.xm拿到sqlsessionFactory相当于一个工厂生产sqlsession(封装着对数据库的所有操作的方法)

正常的书写Dao层的接口,

Dao层当中的每一个Mapper都注册与之对应的Mapper.xml文件,每一个xml中都绑定着每个Dao层的Mapper中方法,以及绑定对应的sql语句

调用的时候是先拿到sqlsession对象,然后调用其的getMapper(对应的Mapper接口)方法拿到接口,接下来接口调用接口中的方法就会执行其绑定的xml文件中的sql语句,然后可以对sql语句执行后拿到数据进行处理。

最后关闭sqlsession

3.代码样例

1,核心配置文件Mybatis-config.xml

2.MybatisUtils

public class MybatisUtils {

//开始执行一次读取配置文件信息

private static SqlSessionFactory sqlSessionFactory;

static {

try {

//获取SqlSessionFactory对象(相当于一个工厂产出SqlSession(产品))

String resource = “mybatis-config.xml”;

InputStream inputStream= Resources.getResourceAsStream(resource);

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

} catch (IOException e) {

e.printStackTrace();

}

}

//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。

// SqlSession 提供了在数据库执行 SQL 命令所需的所有方法

public static SqlSession getSqlSession(){

return sqlSessionFactory.openSession();

}

}

3.UserMapper

public interface UserDao {

List getListUser();

}

4.UserMapper.xml

select * from mybatis.user

5.Test

@Test

public void test(){

//第一步获取sqlSession对象

SqlSession sqlSession = MybatisUtils.getSqlSession();

//方式一:getMapper

UserDao userDao = sqlSession.getMapper(UserDao.class);

List userList =userDao.getListUser();

for (User user : userList) {

System.out.println(user);

}

//关闭sqlSession

sqlSession.close();

}

4.配置解析

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:

configuration(配置)

properties(属性)

settings(设置)

typeAliases(类型别名)

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境配置)

environment(环境变量)

transactionManager(事务管理器)

dataSource(数据源)

databaseIdProvider(数据库厂商标识)

mappers(映射器)

4.1环境配置(environments)

Mybatis可以配置多套环境

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。(学会使用配置多套环境)

事务管理器(transactionManager)

在 MyBatis 中有两种类型的事务管理器(也就是 type=“[JDBC|MANAGED]”):默认为JDBC

数据源(dataSource)

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

大多数 MyBatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。

有三种内建的数据源类型(也就是 type=“[UNPOOLED|POOLED|JNDI]”):默认为POOLED

4.2xml文件当中所有配置都具有一定的顺序

4.3properties(属性)

外部引入

第一步:编写配置文件

使得这些属性可以在外部进行配置,并可以进行动态替换。

db.properties

driver=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true;characterEncoding=UTF-8

username:root

password:333

然后再在mybatis-config.xml当中连接配置文件

可以直接引入配置文件

可以在其中添加一些属性

如果2个文件(db.properties和mybatis-config.xml)当中都存在共同的字段,优先采用外部的

4.4类型别名(typeAliases)

存在的意义为了减少类名存在的冗余

为每一个类名直接DIY一个别名

2.扫描某个包,Mybatis会在这个包下搜索需要的javaBean所有的实体类名字首字母小写就是别名

3.对实体类使用注解,注解名就是别名

//user实体类import org.apache.ibatis.type.Alias;注解的包

@Alias(“hello”)

public class User {}

4.5设置(setting)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。 下表描述了设置中各项设置的含义、默认值等。

4.6其他配置

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

4.7注册Mapper文件的三种方式

推荐使用第一种

第一种:

第二种:

第三种:

使用后两种需要注意的的点

接口和它的Mapper.xml文件必须同名

接口和它的Mapper.xml文件必须在同一个包下

作用域和生命周期

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

问题:数据库当中的字段与返回的实体类的属性不一致

1.可以在sql语句当中起一个别名(最简单的,无脑的方法)

2.使用通过结果集映射

将sql语句的字段映射到一个实体类的属性

ResultMap(结果集映射)

//字段与属性相同的可以不映射(省略不写)

使用结果集映射

select * from mybatis.user where id=#{id}

6.日志工厂

6.1标准模式

在Mybatis-config.xml核心配置文件当中setting日志模式(不设置没有默认值)

标准的是STDOUT_LOGGING

logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置

结果展示

6.2Log4j日志(掌握)

什么是Log4j

1.先导入jar包

log4j log4j 1.2.17

2.核心配置文件中写入setting

3.写一个配置文件Log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码

log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置

log4j.appender.console = org.apache.log4j.ConsoleAppender

log4j.appender.console.Target = System.out

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.layout = org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置

log4j.appender.file = org.apache.log4j.RollingFileAppender

log4j.appender.file.File=./log/kuang.log

log4j.appender.file.MaxFileSize=10mb

log4j.appender.file.Threshold=DEBUG

log4j.appender.file.layout=org.apache.log4j.PatternLayout

log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别

log4j.logger.org.mybatis=DEBUG

log4j.logger.java.sql=DEBUG

log4j.logger.java.sql.Statement=DEBUG

log4j.logger.java.sql.ResultSet=DEBUG

log4j.logger.java.sql.PreparedStatement=DEBUG

4.调用Log4j

public class UserMapperTest {

//注意导包:org.apache.log4j.Logger

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-k4fIQtCU-1711076321435)]

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

[外链图片转存中…(img-vkb9e5yD-1711076321435)]

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

[外链图片转存中…(img-FCPpxF3Q-1711076321436)]

[外链图片转存中…(img-skXQS177-1711076321437)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/478090.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Monoxer Programming Contest 2024(AtCoder Beginner Contest 345)(A,B,C,D,E,F)

比赛链接 这场。。。好像已经是一周之前的比赛来着,终于补完了。 C是个披着字符串外衣的数学容斥题。D是个超级超级暴力的爆搜,写起来超级麻烦,感觉。。。真是一次酣畅淋漓的赤石。E是个DP,朴素想法其实比较直观,不过…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好,我是淘小白~ 首先,感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新,此次版本更新修改增加了一些内容: 1、自定义多条指令,软件自动判断指令条数,进行输入 2、增加谷歌浏览多账号轮询&#xf…

了解Kafka位移自动提交的秘密:避免常见陷阱的方法

欢迎来到我的博客,代码的世界里,每一行都是一个故事 了解Kafka位移自动提交的秘密:避免常见陷阱的方法 前言位移自动提交简介自动提交的优缺点自动提交位移的优点:自动提交位移的缺点:自动提交与手动提交的对比分析&am…

vuex - 21年的笔记 - 后续更新

vuex是什么 Vuex是实现组件全局状态(数据)管理的一种机制,方便的实现组件之间的数据的共享 使用vuex统一管理状态的好处 能够在vuex中集中管理共享的数据,易于开发和后期维护能够高效地实现组件之间的数据共享,提高…

如何系统的入门大模型?

GPT图解,从0到1构建大模型。 本书将以生动活泼的笔触,将枯燥的技术细节化作轻松幽默的故事和缤纷多彩的图画,引领读者穿梭于不同技术的时空,见证自然语言处理技术的传承、演进与蜕变。在这场不断攀登技术新峰的奇妙之旅中&#xf…

数据安全运营:难点突破与构建策略全解析

小型企业关注基础安全运营,重点把安全产品“管好”和“用好”。大型企业通过SOC平台(安全运营中心)把所有安全产品串联起来,对大量的日志进行关联分析,发现事件和告警。通过SOAR平台把运营工作中能“自动化”内容进行预…

修改Linux系统时间与网络同步

文章目录 1、安装ntpdate2、修改时区3、设置系统时间与网络时间同步4、将系统时间写入硬件时间 1、安装ntpdate # Red Hat和Cent OS系统 sudo yum install ntpdate # 乌班图 sudo apt-get install ntpdate2、修改时区 1)运行tzselect tzselect2)选择A…

H4012耐压30V降压恒压芯片 30V降12V降5V 支持电流3A

耐压30V降压恒压芯片的工作原理如下: 该芯片内部集成了开关管和同步整流管,通过它们进行电压的转换,将输入的30V电压降至所需的输出电压(如12V或5V)。在工作过程中,该芯片通过PWM(脉冲宽度调制…

一套键盘鼠标控制两台电脑 Mouse Without Borders

有两台电脑,一台笔记本一台台式机,拥有各自拥有鼠标和键盘,但总是需要切换,感觉太麻烦,想找个简单的方式,不需要额外操作就能同时操作这两台电脑。无意间发现了一个微软软件Mouse Without Borders&#xff…

项目起冲突,掌握这个模型的人,赢麻了!

在项目管理中,冲突是项目经理们无法避免的一环。在职场中,大家都是如何解决矛盾冲突的呢? 一、项目起冲突的原因及解决方法 项目管理过程中,冲突的产生,往往源自于多个方面,但无论是出于何种原因的项目冲…

#Linux(连接档概念)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)硬链接(inode,建立硬链接的文件inode号相同) (2)创建硬链接:ln 文件名1 文件名…

项目中如何进行限流(限流的算法、实现方法详解)

❤ 作者主页:李奕赫揍小邰的博客 ❀ 个人介绍:大家好,我是李奕赫!( ̄▽ ̄)~* 🍊 记得点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习!!!🎉🎉 文章目录 限流的算法漏…

quartz整合前端vue加后端springboot

因工作需求&#xff0c;需要能修改定时的任务&#xff0c;前端vue3&#xff0c;后端是springboot 看看页面效果&#xff1a; 首先maven加上引入 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><versi…

日常 ------------ (一)

使用xdd 生成 firmware.cc 文件 &#xff0c;然后程序根据需要自己解压缩,也可以完成软件升级状态的监控 objcopy 此等神奇也可以&#xff0c;但是威力太大&#xff0c;容易玩崩&#xff0c;没敢尝试

Solo 开发者周刊 (第8期):Claude公司再度上新产品,成交额将超73亿美元

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 好文推荐 Claude是否超过Chatgpt,成为生成…

Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证

昨日&#xff0c;Redis 官方宣布了一项重要变更&#xff1a;他们将修改开源协议&#xff0c;未来所有版本将采用 “源代码可用” 的许可证。 具体来说&#xff0c;Redis 不再使用 BSD 3-Clause 开源协议进行分发。从 Redis 7.4 版本开始&#xff0c;Redis 将采用 SSPLv1 和 RSA…

【C语言】自定义类型:联合体和枚举

1. 联合体 1.1 联合体类型的声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以是不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫&#xff1a;共用体。 给联合…

Binance labs孵化的Swan Chain明牌空投测试网零撸教程

简介&#xff1a;Swan Chain 是一个 Layer2云计算网络&#xff0c;可以将数据、计算、带宽和支付集成到一个套件&#xff0c;为Web3项目提供全面的解决方案。 相关概念&#xff1a;云计算、layer2、infrastructure 融资信息&#xff1a;项目在去年获得bi’an领投的300万美元融…

【pip安装时出现一大片红色报错】 raise ReadTimeoutError(self._pool, None, “Read timed out.“)

【pip安装时出现一大片红色报错】 raise ReadTimeoutError(self._pool, None, “Read timed out.”) 问题描述&#xff1a;pip 安装包时出现一大片莫名其妙的报错 raise ReadTimeoutError(self._pool, None, “Read timed out.”) pip._vendor.urllib3.exceptions.ReadTimeout…

onConfigurationChanged与 Save-Restore InstanceState机制与RetainNonConfiguration机制

android横竖屏切换的生命周期 没设置configChanges&#xff0c;销毁后重建&#xff1a; onCreate--onStart--onResume--onPause--onStop--onSaveInstanceState--onDestroy--onCreate--onStart--onRestoreInstanceState--onResume--onPause--onStop--onDestroy 设置configCha…