在MyBatis中,写查的sql使用的是select标签,select标签的属性用来详细配置每一条sql,如:
id:唯一标识符,与接口中的方法一一对应;
parameterType:传入sql语句的参数类型,当参数是基本类型并且只有一个时该属性可以不写;
resultType:sql语句返回值的类型(完整的类名或者别名);

  1. <select id="listUsers" resultType="com.wjh.po.User">
  2. select *
  3. from user
  4. </select>
  5. <select id="getUserById" resultType="com.wjh.po.User" parameterType="int">
  6. select *
  7. from user
  8. where id = #{id}
  9. </select>

增、删、改

  1. <insert id="addUser" parameterType="com.wjh.po.User">
  2. insert into user(id, name, pwd)
  3. values (#{id}, #{name }, #{pwd})
  4. </insert>
  5. <update id="updateUserById" parameterType="com.wjh.po.User">
  6. update user
  7. set name=#{name},
  8. pwd=#{pwd}
  9. where id = #{id}
  10. </update>
  11. <delete id="deleteUserById" parameterType="int">
  12. delete
  13. from user
  14. where id = #{id}
  15. </delete>

增删改的标签属性和查的差不多,但需要注意的是增删改都需要提交事务才能改变数据库中的数据,如:

@Test
    public void deleteUserTest() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        userMapper.deleteUserById(5);
        sqlSession.commit(); //提交事务
        sqlSession.close();
    }

使用map传值

在接口方法中的参数只使用map这一个参数,如:

User selectUserById2(Map<String,Object> map);

编写sql语句的时候,标签的parameterType使用map,如:

<select id="selectUserById2" parameterType="map" resultType="com.kuang.pojo.User">
  select * from user where name = #{username} and pwd = #{password} 
</select>

在使用方法的时候,Map的 key 为 sql中取的值即可,且没有顺序要求,如:

Map<String, Object> map = new HashMap<String, Object>();
map.put("username","小明"); 
map.put("password","123456"); 
User user = mapper.selectUserById2(map);

map的使用场景:如果参数过多,可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可