3.增删改查实现CRUD
3.1 namespace
namespace中的包名要和 Dao/mapper 接口的包名一致!
3.2 select
选择,查询语句
- id:就是对应的namespace中的方法名;
- resultType:Sql语句执行的返回值!
- parameterType:参数类型!
- 编写接口
//根据id查询用户
User getUserById(int id);
- 编写对应的mapper中的sql语句
<select id="getUserList" resultType="com.zmh.pojo.User" >
select * from mybatis.user
</select>
- 测试
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
3.3 insert
<!--对象中的属性可以直接取出来-->
<insert id="addUser" parameterType="com.zmh.pojo.User">
insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
3.4 update
<update id="updateUser" parameterType="com.zmh.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id};
</update>
3.5 delete
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id=#{id};
</delete>
3.6 注意点:
- 增删改需要提交事务!
//提交事务
sqlSession.commit();
3.7 分析错误
- 标签不要匹配错
- resource绑定mapper ,需要使用路径!
<mappers>
<mapper resource="com/zmh/dao/UserMapper.xml"/>
</mappers>`
- 程序配置文件必须符合规范
- NullPointerException,没有注册到资源
- 输出的xml文件中存在中文乱码问题
3.8 万能Map
假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!
//万能的Map
int addUser2(Map<String,Object> map);
<insert id="addUser2" parameterType="map">
insert into mybatis.user (id,name,pwd) values (#{userid},#{userName},#{password});
</insert>
- Map传递参数,直接在sql中取出key即可 【parameterType=“map”】
- 而对象传递参数,直接在sql中取对象的属性即可【parameterType=“Object”】
- 只有一个基本类型参数的情况下,可以直接在sql中取到!
- 多个参数用Map,或者注解