tantela-2021-07-19-01

本文详细介绍了MyBatis的使用,包括AMQP实现的RabbitMQ、分布式数据库MongoDB、Java安全框架Shiro、FastDFS分布式文件系统、Memcached缓存系统以及Swagger的RESTful服务规范。进一步探讨了CRUD操作、EL表达式及其内置对象、MyBatis的事务管理、日志实现和分页策略。重点讲解了MyBatis的注解开发、一对多和多对一关系映射以及动态SQL的运用,同时还涵盖了MyBatis的一级和二级缓存机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ 实现了高级消息队列协议(AMQP)的开源消息代理软件
MongoDB 一个基于分布式文件存储的数据库。介于关系型和非关系型之间
Shiro Java安全框架
FastDFS 分布式文件系统
Memcached 分布式高速缓存系统
Swagger 一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务
CRUD 增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)
EhCache java分布式缓存

JSP 标准标签库(JSTL)
EL表达式详解
EL的11个内置对象,除了pageContext以外,其他10个内置对象的类型都是java.util.Map类型
未使用El内置对象,查找数据顺序是依次按照由小到大范围 pageContext < request < session < application
EL的内置对象,属性相关 pageScope、requestScope、sessionScope、appliactionScope
EL的其他重要的内置对象:

  • pageContext
  • param(底层调用request.getParameter()获取请求中的指定参数)
  • paramValues(底层调用request.getParameterValues()获取请求中的指定参数的所以值)
  • initParm(底层调用ServletContext.getInitParameter()获取初始化参数)

EL访问Bean属性:$ {key.属性}
EL访问数组中的数据:$ {name[5]}、$ {stus[1].sname}
EL获取list中的数据:$ {names[1]} //List底层是数组
EL访问Map:$ {mapObject.name}

狂神说 SSM+SpringBoot
mybatis 3技术文档
MyBatis01

1.创建数据库
2.导mybatis、mysql包
3.编写Mybatis核心配置文件(查看官方帮助文档)
4.编写Mybatis工具类(查看官方帮助文档)
5.创建实体类
6.编写Mapper接口类
7.编写Mapper.xml配置文件
8.编写测试类

MyBatis02

parameterType="map"
<select id="selectUserByNP" parameterType="map" resultType="User">
	select * from user where name = #{username} and pwd = #{pwd}
</select>
如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可
除了参数类型为map这种方式,在model类bean对象上添加@Param("代称"),同样可以在sql语句中获取

增、删、改操作需要提交事务

模糊查询
1.在Java代码中添加sql通配符 string wildcardname = “%smi%”;
2.sql语句中拼接通配符(会引起sql注入)select * from foo where bar like "%"#{value}"%"

从MyBatis 3开始,支持接口映射器,允许以Java代码的方式注解定义SQL语句,非常简洁

Mybatis的执行过程
在这里插入图片描述
SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此** SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域**(也就是局部方法变量)。

SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。生命周期存在于整个 MyBatis 的应用之中,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。

SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try…catch…finally… 语句来保证其正确关闭。所以 SqlSession 的最佳的作用域是请求或方法作用域。
在这里插入图片描述

MyBatis03:ResultMap及分页

ResultMap
使用结果集映射->ResultMap

<resultMap id="UserMap" type="User">
   <!-- id为主键 -->
   <id column="id" property="id"/>
   <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
   <result column="name" property="name"/>
   <result column="pwd" property="password"/>
</resultMap>

<select id="selectUserById" resultMap="UserMap">
  select id , name , pwd from user where id = #{id}
</select>

标准日志实现

1. 导入log4j的包
2. 配置文件的编写
3. setting设置日志实现
4. 在程序中使用log4j进行输出
5. 测试,看控制太输出

分页

使用Limit实现分页
RowBounds分页(不推荐)
分页插件:pagehelper [github官网](https://pagehelper.github.io/)

MyBatis04 使用注解开发

#与$的区别:
#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符? 【推荐使用】
${} 的作用是直接进行字符串替换

在这里插入图片描述

MyBatis05 一对多和多对一处理

按照查询进行嵌套处理就像SQL中的子查询
	<select id="getTeacher" resultType="teacher">
 		 select * from teacher where id = #{id}
  </select>

<resultMap id="StudentTeacher" type="Student">
   <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
   <association property="teacher"  column="{id=tid,name=tid}" javaType="Teacher" select="getTeacher"/>
</resultMap>

按照结果进行嵌套处理就像SQL中的联表查询
<select id="getStudents2" resultMap="StudentTeacher2" >
  select s.id sid, s.name sname , t.name tname
  from student s,teacher t
  where s.tid = t.id
</select>

<resultMap id="StudentTeacher2" type="Student">
   <id property="id" column="sid"/>
   <result property="name" column="sname"/>
   <!--关联对象property 关联对象在Student实体类中的属性-->
   <association property="teacher" javaType="Teacher">
     	<result property="name" column="tname"/>
   </association>
</resultMap>

MyBatis06 动态sql
环境搭建、if语句、where、Set、choose、sql片段、foreach。。。

MyBatis07 缓存

MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存
默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)
二级缓存需要手动开启和配置,他是基于namespace级别的缓存。

每个sqlSession中的缓存相互独立或者sqlSession相同,查询条件不同,两条SQL语句
只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据
查出的数据都会被默认先放在一级缓存中,只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值