回顾一个点

之前不懂这句:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

 

现在理解了一点点,相当于实现了userMapper的接口。因为所有的UserMapper.xml都要在Mybatis-config.xml中注册,继续看源码过程中看到其中有部分的参数包括了T.Class和sqlsession,而sqlsession是读取Mybatis-config.xml创建的。所以不是特别难理解是怎么实现这个接口了。

UserMapper.class是通过类名.Class实现反射

具体的内容等课继续看应该会有涉及到。

 

 

增删改查的接口和xml

  • 每个xml都需要绑定接口名称为id
  • 如果参数或结果类型不为int或者void什么的,需要填resultType和parameterType,类型需要写完整包名
  • sql语句中的参数写成#{id}
  • 增删改需要提交事务,sqlsession.commit();
    <!--对应接口:User getUserById(int id);-->
    <select id="getUserById" resultType="com.ou.pojo.User">
        SELECT * FROM mybatis.user WHERE id=#{id}
    </select>

 

    <!--对应接口:int insertUser(User user);-->
    <insert id="insertUser" parameterType="com.ou.pojo.User">
        INSERT INTO mybatis.user (id, username, pwd) VALUE (#{id},#{username},#{pwd})
    </insert>

 

    <!--对应接口:int updateUser(User user);-->
    <update id="updateUser" parameterType="com.ou.pojo.User">
        UPDATE mybatis.user SET username=#{username},pwd=#{pwd} WHERE id=#{id}
    </update>

 

 

通过Map传参:

因为User这个pojo可能有100个字段,假如修改时只想修改10个,如果参数类型还是User,则参数还得new User(p1 p2…..)

 

    <!--对应接口:int updateUserByMap(Map<String,Object> map);-->
    <update id="updateUserByMap" parameterType="Map">
        UPDATE mybatis.user SET pwd=#{pwd} WHERE id=#{id}
    </update>

 

参数类型为Map,sql语句和原来一样就行

    @Test
    public void testUpdateByMap()
    {
        SqlSession sqlSession = MybatisUtilis.getsqlsession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String,Object> map=new HashMap<String, Object>();
        map.put("id",4);
        map.put("pwd","4321");
        mapper.updateUserByMap(map);
        sqlSession.commit();

        sqlSession.close();
    }

使用时略有不同,new一个Map<String,Object>对象,然后再put key-value就行

 

版权声明:本文为take-it-easy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/take-it-easy/p/12718810.html