如何一文快速了解Mybatis的参数获取
文章目录
3、传递 pojo 包装对象 4、配置实体类别名,替换全限定类名
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> * <p>Company: http://www.itheima.com/ </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> * <p>Company: http://www.itheima.com/ </p> */ public interface IUserDao { /** * 根据 QueryVo 中的条件查询用户 * @param vo * @return */ List<User> findByVo(QueryVo vo); }
3.3、持久层接口的映射文件
<!-- 根据用户名称模糊查询,参数变成一个 QueryVo 对象了 --> <select id="findByVo" resultType="com.itheima.domain.User" parameterType="com.itheima.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、配置实体类别名,替换全限定类名
- 点赞 1
- 收藏
- 分享
- 文章举报
- 如何一文快速了解 Mybatis 的缓存机制
- 如何一文快速了解 Mybatis 的延迟加载策略
- 如何一文快速了解 Mybatis 的动态 SQL 语句编写
- 如何一文快速了解 Mybatis 的多表查询
- 如何一文快速了解Mybatis的主配置文件的类别名指定(不再写全限定类名)
- 如何一文快速了解Mybatis各返回值类型的封装
- 如何一文快速了解 Mybatis 的注解开发
- 如何一文快速了解Mybatis连接池和事务
- 一文带你快速了解,python是如何解析XML文件
- 一文带你快速了解,python是如何解析XML文件
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- 如何获取iphone基带芯片工作时候获取到的一些参数呢,如信号强度,小区,周围小区以及一些更深入的参数,有人了解吗
- struts2--前台数据通过参数传给后台,后台如何获取参数
- 学习SpringMVC——如何获取请求参数
- 总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
- 如何快速获取可用分?
- tab页签中子页面如何获取主页面的参数和数据
- 对于restful如何获取前台的参数
- 如何快速利用s02-45漏洞获取服务器权限 推荐
- 如何快速了解一个接手的旧项目