1.OGNL表达式:
Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了。
比如:我们获取用户的名称
类中的写法:user.getUsername();
OGNL表达式写法:user.username
mybatis中为什么能直接写username,而不用user.呢:
因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名
2. Mybatis中参数的深入:
//根据queryVo中的条件查询用户
List<User> findUserByVo(QueryVo vo);
package com.itheima.domain;
/**
* ClassName:QueryVo
* Package:com.itheima.domain
* Description:
*
* @Date:2019/11/13 14:36
* @Author:liangshuai@shuaige.com
*/
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
<!--根据queryVo的条件查询用户-->
<select id="findUserByVo" parameterType="com.itheima.domain.QueryVo" resultType="com.itheima.domain.User">
select *from user where username like #{user.username}
</select>
/**
* 测试使用QueryVo作为查询条件
* @throws Exception
*/
@Test
public void testFindByVo(){
QueryVo vo=new QueryVo();
User user=new User();
vo.setUser(user);
user.setUsername("%王%");
List<User> users = userDao.findUserByVo(vo);
for(User u:users){
System.out.println(u);
}
}
3.Mybatis中返回值深入:
解决实体类属性和数据库列名不对应的两种方式:
1)起别名 例如select id as userId,username as userName from user
2)配置:id随便取,让select标签中的resultMap去引用, type表示要和表字段对应的实体类
<resultMap id="userMap" type="com.itheima.domain.User">
<!--主键字段的对应-->
<id property="userId" column="id"></id>
<!--非主键字段的对应-->
<result property="userName" column="username"></result>
<result property="userSex" column="sex"></result>
</resultMap>
<!--查询所有-->
<select id="findAll" resultMap="userMap">
select *FROM user ;
</select>
如果在实际开发中追求执行效率,那毫无疑问用起别名,如果追求开发效率,就用配置的方式