Maybatis的一些总结(三:增删改查)
回顾一个点
之前不懂这句:
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就行