zoukankan      html  css  js  c++  java
  • java之 Mybatis(二)

    0x01、parameterType深入

    3.1传递简单类型

    ​ 基本的类型,字符串

    ​ 直接写#{任意字符串}或者'${value}'

    1535099951604

    3.2传递 pojo 对象 或者 Map

    ​ Mybatis 使用 ognl 表达式解析对象字段的值, #{}或者'${}'括号中的值为 pojo 属性名称或者Map的key。

    3.3传递 pojo 包装对象类型

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

    ​ 京东查询的例子:

    ​ 需求:根据用户id查询用户信息,查询条件放到 QueryVo 的 user 属性中。

    • QueryVo
    @Data
    public class QueryBean {
    
        private User user;
    }
    
    • UserDao接口
    public interface UserDao {
        /**
         * 复杂参数查询
         * @return
         */
        List<User> findByQueryBean(QueryBean queryBean);
    
    }
    
    • UserDao.xml文件
    <mapper namespace="com.itheima.dao.UserDao">
        <select id="findByQueryBean" resultType="com.itheima.pojo.User" parameterType="com.itheima.pojo.queryBean">
            SELECT * FROM t_user WHERE username > #{user.username}
        </select>
    </mapper>
    
    • 测试代码
    @Test
    public void test04(){
        //使用POJO的包装类作为参数
        SqlSession sqlSession = SqlSessionFactoryUtils.openSession();
        //获取LinkManDao的代理对象
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        User user = new user();
        linkMan.setUSername("李");
        List<User> userList = userDao.query(new QueryBean(user));
    
        for (User user : userList) {
            System.out.println(user);
        }
    
        //提交事务关闭资源
        SqlSessionFactoryUtils.commitAndClose(sqlSession);
    }
    

    0x02、resultType深入

    2.1输出简单类型

    ​ 直接写对应的Java类型. eg: 返回int

    <select id="findCount" parameterType="int" resultType="int">
         SELECT  COUNT(*) FROM t_user
    </select>
    

    2.2输出pojo对象(一个pojo对象就对应一行数据)或者一个Map

    ​ 直接写当前pojo类的全限定名 eg: 返回User

    <select id="findByUid" parameterType="int" resultType="com.itheima.bean.User">
            select * from t_user where uid = #{uid}
    </select>
    

    2.3输出pojo列表(一个pojo列表就对应多行数据)或者Map的列表

    ​ 直接写当前pojo类的全限定名 eg: 返回 List list;

    <select id="findAll" resultType="com.itheima.bean.User">
            select * from t_user
    </select>
    

    2.4resultMap结果类型

    resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。

    如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。

    resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。(下次课讲)

    ​ 那我们今天就来看返回的列名与实体类的属性不一致时的情况. 下次课再接着研究复杂的封装(多表查询)

    ​ 通过改别名的方式,现在返回结果集的列名已经与 User 类的属性名不相同了。

    select uid uid_,username username_ ,birthday birthday_ ,sex sex_ ,address address_  from t_user where uid = #{id}
    
    • UserDao.java
    public interface UserDao {
        /**
         * 根据uid查询
         * @param uid
         * @return
         */
        User findByUid(int uid);
    
    }
    
    • UserDao.xml
        <select id="findByUid" parameterType="int" resultMap="findByUidMap">
            select uid uid_,username username_ ,birthday birthday_ ,sex sex_ ,address address_  from t_user where uid = #{id}
        </select>
    
        <resultMap id="findByUidMap" type="com.itheima.bean.User">
            <id property="uid" column="uid_"></id>
            <result property="username" column="username_"></result>
            <result property="birthday" column="birthday_"></result>
            <result property="sex" column="sex_"></result>
            <result property="address" column="address_"></result>
        </resultMap>
    <!-- 
    id:此属性表示查询结果集的唯一标识,非常重要。如果是多个字段为复合唯一约束则定义多个id。
    type: 当前resultMap封装后返回的结果
    property:表示 User 类的属性。
    column:表示 sql 查询出来的字段名。(column 和 property 放在一块儿表示将 sql 查询出来的字段映射到指定的 pojo 类属性上。)
    -->
    

    4.小结

    1. 输出简单类型 直接写 java类型名 eg: int

    2. 输出pojo对象 直接写 pojo类型名 eg: User

    3. 输出pojo列表类型 写 列表里面的泛型的类型 eg: List 写User

    4. ResultMap

      • 解决查询出来的结果的列名和javaBean属性不一致的请求
  • 相关阅读:
    MongoDB Shell
    mongo 日记
    java 堆栈 静态
    面向对象(2)
    面向对象(1)
    mongo 学习笔记
    深入浅出学Spring Data JPA
    java记录
    mongodb 2.6 window 安装启动服务
    CF1012F Passports
  • 原文地址:https://www.cnblogs.com/0x7e/p/14332579.html
Copyright © 2011-2022 走看看