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>

    友情链接

  • 相关阅读:
    ORACLE数据库逐步解决ORA-12541、ORA-01034和ORA-27101、ORA-00119和ORA00132的过程
    Windows下MySQL主从复制的配置
    Windows下Git的使用
    spring boot 2 集成JWT实现api接口认证
    spring boot 2 全局统一返回RESTful风格数据、统一异常处理
    spring boot 2 + shiro 实现权限管理
    Java 密码加盐
    Java中往zip压缩包追加文件
    IntelliJ IDEA 安装、配置和使用Lombok插件
    大规模微服务单元化与高可用设计
  • 原文地址:https://www.cnblogs.com/huhx/p/baseusejavamybatis1.html
Copyright © 2011-2022 走看看