zoukankan      html  css  js  c++  java
  • java框架---->mybatis的使用(一)

      这里我们记录一些mybatis的一些常用知识和项目中遇到的问题总结。快乐人生的三个必要元素是,有要做的事、热爱的事及盼望的事。

    mybatis的一些知识

    一、mybatis插入返回主键值

    • 插入的java代码:其中返回是当前插入的主键,insert方法返回的是影响的行数。
    public void insertUserInfo() {
        Map<String, Object> map1 = new HashMap<>();
        map1.put("userName", "huhx");
        map1.put("age", 35);
        int effectRow = this.sqlSession.insert("login.insertUserInfo", map1);
        System.out.println(map1.get("huhxId")); // 5
        System.out.println(effectRow); // 1
    }
    •  语句映射的sql语句:
    <insert id="insertUserInfo" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="huhxId">
        INSERT INTO
          puser(user_name, age)
        VALUES
          (#{userName}, #{age})
    </insert>

     关于mybatis的官方文档: http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

     二、mybatis的一个参数传递的异常

    •  java代码
    public Map<String, Object> getUserInfoById(Long userId) {
        return this.sqlSession.selectOne("user.queryUserInfoByUserId", userId);
    }
    • xml映射的代码
    <select id="queryUserInfoByUserId" parameterType="java.lang.Long" resultType="java.util.HashMap">
        SELECT
            userId, username, password, address, birthday, sex
        FROM
            puser
        WHERE
            1 = 1
        <if test="userId != null">
            AND userId = #{userId}
        </if>
        ORDER BY
          userId DESC
    </select>
    • 抛出异常
    org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'userId' in 'class java.lang.Long'

    对于这类单个入参然后用if判断的,mybatis有自己的内置对象。如果你在if判断里面写的是你的入参的对象名,那么就会抛出上述的异常。

    三、mybatis的查询数据包含上送的数据字段

      这里面注意几点:一、parameterType的类型可以为缩写的形式map;二、SELECT中可以有#{ActivityType} AS ActivityType的写法;三、LEFT JOIN前端的FROM里面的数据需要括号。

    <select id="getOtherActivity" parameterType="map" resultType="map">
        SELECT 
            a.ActivitySeq,
            a.ActivityName,
            a.ActivityDes,
            a.ActivityBeginDate,
            a.ActivityEndDate,
            a.ActivityStatus,
            b.ActivityChannel,
            c.ToolName,
            c.ToolType,
            c.ToolDesc,
            #{ActivityType} AS ActivityType
        FROM
            (A_ACTIVITY a, A_ACTIVITY_CHANNEL b, T_TOOL c)
        LEFT JOIN
            <choose>
                <when test="ActivityType != null and ActivityType == 2">
                    A_CONVERT d
                </when>
                <when test="ActivityType != null and ActivityType == 3">
                    A_DISTRIBUTION d
                </when>
                <when test="ActivityType != null and ActivityType == 6">
                    A_MISSION d
                </when>
            </choose>
        ON
            d.ActivitySeq = a.ActivitySeq AND
            d.ToolSeq = c.ToolSeq
        WHERE
            a.ActivitySeq = b.ActivitySeq  
            <if test="ActivityNo != null">
                AND a.ActivitySeq = #{ActivityNo}
            </if>
        ORDER BY
            a.ActivitySeq DESC
    </select>

    四、mybatis的批量插入传递额外的数据

    我们的需求是在批量插入的时候,有些数据是一定的,不需要在遍历的列表里面。

    public String batchInsertMap() {
        Map<String, Object> parmMap = new HashMap<>();
        parmMap.put("personId", "1");
        List<Map<String, String>> list = new ArrayList<>();
        for (int i = 0; i < 3; i ++) {
            Map<String, String> map = new HashMap<>();
            map.put("content", "comment " + i);
            list.add(map);
        }
        parmMap.put("list", list);
        // 批量插入数据
        int rowCounts = this.sqlSession.insert("user.insertBatchComments", parmMap);
        return rowCounts + "";
    }

    mybatis的sql语句如下:

    <insert id="insertBatchComments" parameterType="map">
        INSERT INTO comment
            (person_id, content)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
        (
            #{personId},
            #{item.content}
        )
      </foreach>
    </insert>

    友情链接

  • 相关阅读:
    React元素渲染
    初识JSX
    微信小程序复制文本到剪切板
    微信小程序报错request:fail url not in domain list
    小程序,通过自定义编译条件,模拟推荐人功能
    积分抵扣逻辑
    微信小程序 switch 样式
    tomcat 配置开启 APR 模式
    tomcat8 传输json 报错 Invalid character found in the request target. The valid characters are defined in RFC 3986
    c++数组初始化误区
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusejavamybatis1.html
Copyright © 2011-2022 走看看