学习MyBatis必知必会(4)~ OGNL 表达式和EL 表达式

简介: 学习MyBatis必知必会(4)~ OGNL 表达式和EL 表达式

一、OGNL 表达式(Object-Graph Navigation Language 对象-图形导航语言)

1、语法:#{ }

2、OGNL 表达式的作用:可以存取对象的属性和调用对象的方法,通过OGNL 表达式可以迭代获取对象的结构图

3、#{ }: 是指上下文(环境)对象

4、 OGNL 表达式获取属性举例:

对象person:{id:10,age:18,name:小明};   若上下文(环境)的对象是person,通过#{ } 可以直接获取到对象的属性值  
#{id} 相当于 perosn.getId()
#{age} 相当于 person.getAge()
#{name} 相当于 person.getName()

■ OGNL 在mybatis框架中的应用:

/* User 类*/
@Data
public class User {
  private Long id;
  private String name;
  private BigDecimal salary;
}
/* 测试类 */
User user = new User();
user.setId(2L);
SqlSession session = factory.openSession();
//4、进行数据库操作(CRUD)
User user = session.selectOne("com.shan.hello.UserMapper.get", user);//将user作为上下文对象(javaBean类型)传入
/* 映射文件 */
<select id="get" parameterType="java.lang.Long" resultType="com.shan.hello.User">
    select * from t_user where id = #{id}   //上下文是javaBean类型,OGNL 表达式格式必须为 #{属性名} 
</select>


✿ 关于OGNL 的上下文对象类型【获取属性值】:

(1)javaBean对象,例如上面的User,则 OGNL 表达式格式必须为 #{属性名}

(2)map 对象,OGNL 表达式格式为 #{key}

(3)简单类型对象(基本类型、String类型),OGNL 表达式格式为 #{随便写,不过一般写得见名知意,增加代码的阅读性}

  • 简单类型举例子:
/* 测试类 */
SqlSession session = factory.openSession();
//4、进行数据库操作(CRUD)
User user = session.selectOne("com.shan.hello.UserMapper.get", 2L);//将2L作为上下文对象(简单类型)传入
/* 映射文件 */
<select id="get" parameterType="java.lang.Long" resultType="com.shan.hello.User">
    select * from t_user where id = #{id}//上下文是javaBean类型,OGNL 表达式格式可以写成#{aa},不过增强代码阅读性也会写成#{id}
</select>


二、EL 表达式 ${ }

1、语法:${属性名}

2、OGNL 表达式的作用:通过 ${属性名} 直接获取属性值,属性的内容。


三、在MyBatis中,OGNL 表达式 #{} 和 EL 表达式 ${} 的异同

1、sql语句分别使用#{} 和 ${}的实际情况:

(1)使用 #{}:

<!-- 映射文件 ---> 
<select id="login" resultType="Client">
  select id, username, password from client where username = #{username} and password = #{password} ;
 </select>
 <!-- #{} 的实际作用:现在转成?的占位符,然后再把值设置进去【假设外界传入的值username="小明",password="1"】 -->
select id, username, password from client where username = ? and password = ?;
PreparedStatement.setString(1, "小明");
PreparedStatement.setString(2,"1");

(2)使用 ${}:

<!-- 映射文件 --->
<select id="login" resultType="Client">
  select id, username, password from client where username = ${username} and password = ${password} ;
 </select>
 <!-- ${} 的实际作用:直接把值设置进去【假设外界传入的值username="小明",password="1"】 -->
select id, username, password from client where username = "小明" and password = "1";


★ 2、# 和 $ 的异同:

  • 相同:都可以获取对象的信息。
  • 不同:
    使用# 传递的参数,会先转成占位符?,再通过设置占位符参数的方式设置值【会给值用单引号引起来】,不会导致sql注入问题,比较安全。
    使用$ 传递的参数,直接把解析出来的数据作为sql语句的一部分。可能会出现sql注入安全问题,比较不安全。
目录
相关文章
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
66 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 数据库连接
mybatis-plus学习
MyBatis-Plus ,MyBatis 最佳搭档,只做增强不做改变,为简化开发、提高效率而生。
46 5
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
|
3月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(5、分页)
这篇文章介绍了如何在MyBatis框架中实现分页功能,包括使用SQL的`limit`语句进行分页和利用MyBatis的`RowBounds`对象进行分页的方法。
|
3月前
|
SQL Java 数据库连接
后端框架的学习----mybatis框架(7、使用注解开发)
这篇文章讲述了如何使用MyBatis框架的注解方式进行开发,包括在接口上使用注解定义SQL语句,并通过动态代理实现对数据库的增删改查操作,同时强调了接口需要在核心配置文件中注册绑定。
|
6月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
5月前
|
Java 数据库连接 Maven
Mybatis学习
Mybatis学习
27 0