mybatis学习小结(四)

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>

      如果在实际开发中追求执行效率,那毫无疑问用起别名,如果追求开发效率,就用配置的方式

posted @ 2019-11-13 15:54  小帅学java  阅读(8)  评论(0)    收藏  举报