如何一文快速了解Mybatis的参数获取

1、OGNL表达式介绍

mybatis框架在获取参数时使用的是OGNL表达式获取。
 OGNL全拼为: Object Graphic Navigation Language
          对象     图     导航     语言
 OGNL是通过对象的取值方法来获取数据,并且在写法上把get给省略了。
比如:我们想要获取用户的名称:
   在java类中的写法为:user.getUsername();
   OGNL表达式写法为:user.username();

那么为什么 mybatis 中可以直接写 username 来获取值,而不用 user.username 呢?
因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名。

1、#{}与${}的区别

  #{}拿到值之后,拼装sql,会自动对值添加单引号” 。类似JDBC规范的Preprestatement。
  ${}则把拿到的值直接拼装进sql,如果需要加单引号”,必须手动添加,一般用于动态传入表名或字段名使用,同时需要添加属性statementType=”STATEMENT”,使用非预编译模式。类似JDBC规范的Statement。

2、parameterType 配置参数

2.1、 使用说明

      SQL 语句传参,使用标签的 parameterType 属性来设定参数类型。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,那么如何使用实体类的包装类作为参数传递呢?

2.2、注意事项

      基本类 型和 String 我们可以直接写类型名称,也可以使用包名.类名的方式 ,例如 :java.lang.String。
      实体类类型,目前我们只能使用全限定类名。
      究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名,
      而我们的是实体类并没有注册别名,所以必须写全限定类名。后续也将介绍如何注册实体类的别名。
      在 mybatis 的官方文档的说明(第 19 页)
在这里插入图片描述
  这些都是支持的默认别名。我们也可以从源码角度来看它们分别都是如何定义出来的,
可以参考 TypeAliasRegistery.class 的源码。
在这里插入图片描述

3、传递 pojo 包装对象

  开发中通过 pojo 传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
  Pojo 类中包含 pojo。
  需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中。

3.1、编写 QueryVo

/**
*
* <p>Title: QueryVo</p>
* <p>Description: 查询条件对象</p>
*/
public class QueryVo implements Serializable {
	private User user;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	} 
}

3.2、编写持久层接口

/**
*
* <p>Title: IUserDao</p>
* <p>Description: 用户的业务层接口</p>
*/
public interface IUserDao {
	/**
	* 根据 QueryVo 中的条件查询用户
	* @param vo
	* @return
	*/
	List<User> findByVo(QueryVo vo);
}

3.3、持久层接口的映射文件

<!-- 根据用户名称模糊查询,参数变成一个 QueryVo 对象了 -->
<select id="findByVo" resultType="per.cjh.domain.User" parameterType="per.cjh.domain.QueryVo">
	select * from user where username like #{user.username};
</select>

2.4、测试包装类作为参数的方法

@Test
public void testFindByQueryVo() {
	QueryVo vo = new QueryVo();
	User user = new User();
	user.setUserName("%王%");
	vo.setUser(user);
	List<User> users = userDao.findByVo(vo);
	for(User u : users) {
		System.out.println(u);
	}
}

4、配置实体类别名,替换全限定类名

如何实现Mybatis配置类别名

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值