Mybatis总结(持续补充)

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

static Logger logger = Logger.getLogger(UserMapperTest.class);//此处是类名.class

@Test

public void test01(){

logger.info(“info:进入selectUser方法”);

logger.debug(“debug:进入selectUser方法”);

logger.error(“error: 进入selectUser方法”);

SqlSession sqlSession =MybatisUtils.getSqlSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

User user = mapper.getUserById(1);

System.out.println(user);

sqlSession.close();

}

}

5.完成

7.分页

为什么要使用分页?

减少数据的处理量

使用Limit分页

语法:SELECT * from user limit startIndex,pageSize;

SELECT * from user limit 3; #[0,n]

使用Mybatis实现分页查询

7.1通过sql来实现分页(掌握)

1.编写Dao层的Mapper接口

//实现分页查询

List queryByLimit(Map<String,Integer> map);

2.对应的Mapper.xml文件当中绑定,书写对应的sql

select * from mybatis.user limit #{startIndex},#{pageSize}

3.直接调用即可

@Test

public void queryByLimitTest(){

SqlSession sqlSession = MybatisUtils.getSqlSession();

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

Map<String,Integer> map =new HashMap<String, Integer>();

map.put(“startIndex”,1);

map.put(“pageSize”,2);

List userList = mapper.queryByLimit(map);

for (User user : userList) {

System.out.println(user);

}

sqlSession.close();

}

7.2使用RowBounds进行分页(了解)

1.第一步同样是在Dao层写一个接口方法

//通过来实RowBounds现分页

List queryByRowBounds();

2.绑定接口的Mapper文件

直接查询全部,分页由java代码来操作

select * from mybatis.user

3.执行分页操作

@Test

public void queryByRowBounds(){

SqlSession sqlSession = MybatisUtils.getSqlSession();

RowBounds rowBounds = new RowBounds(0, 2);

List list = sqlSession.selectList(“com.sqx.dao.UserMapper.queryByRowBounds”, null, rowBounds);

for (User user : list) {

System.out.println(user);

}

sqlSession.close();

}

7.3分页插件(了解即可)

8.使用注解开发

8.1、面向接口编程

  • 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程

  • 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好

  • 在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对系统设计人员来讲就不那么重要了;

  • 而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。

关于接口的理解

  • 接口从更深层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。

  • 接口的本身反映了系统设计人员对系统的抽象理解。

  • 接口应有两类:

  • 第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);

  • 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);

  • 一个体有可能有多个抽象面。抽象体与抽象面是有区别的。

三个面向区别

  • 面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法 .

  • 面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现 .

  • 接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题.更多的体现就是对系统整体的架构

8.2使用注解开发

1.注解在接口上实现

@Select(“select * from user”)

List getUsers();

2.再在核心配置文件当中注册接口

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

大厂面试真题:

层次的理解,应是定义(规范,约束)与实现(名实分离的原则)的分离。

  • 接口的本身反映了系统设计人员对系统的抽象理解。

  • 接口应有两类:

  • 第一类是对一个个体的抽象,它可对应为一个抽象体(abstract class);

  • 第二类是对一个个体某一方面的抽象,即形成一个抽象面(interface);

  • 一个体有可能有多个抽象面。抽象体与抽象面是有区别的。

三个面向区别

  • 面向对象是指,我们考虑问题时,以对象为单位,考虑它的属性及方法 .

  • 面向过程是指,我们考虑问题时,以一个具体的流程(事务过程)为单位,考虑它的实现 .

  • 接口设计与非接口设计是针对复用技术而言的,与面向对象(过程)不是一个问题.更多的体现就是对系统整体的架构

8.2使用注解开发

1.注解在接口上实现

@Select(“select * from user”)

List getUsers();

2.再在核心配置文件当中注册接口

最后

金三银四马上就到了,希望大家能好好学习一下这些技术点

学习视频:

[外链图片转存中…(img-UERtAuk3-1714420765289)]

大厂面试真题:

[外链图片转存中…(img-d7Hja4yv-1714420765289)]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值