Create(增加)、Retrieve(检索)、Update(更新)、Delete(删除)
1.编写接口(在dao/mapper.java接口文件下)
- //根据id查询用户
- User getUserById(int id);
2.编写接口对应的mapper中的语句(在dao/mapper.xml文件下)
- <select id="getUserById" parameterType="int" resultType="com.yuan.pojo.User">
- select * from mybatis.user where id = #{id}
- select>
3.测试
- @Test
- public void getUserById(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
-
- User user = mapper.getUserById(1);
- System.out.println(user);
-
- sqlSession.close();
- }

Select 元素的属性
| 属性 | 描述 |
id | 在命名空间中唯一的标识符,可以被用来引用这条语句。 |
parameterType | 将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。 |
resultType | 期望从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能同时使用一个。 |
resultMap | 对外部 resultMap 的命名引用。结果映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂的映射问题都能迎刃而解。 resultType 和 resultMap 之间只能同时使用一个。 |
flushCache | 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:false。 |
useCache | 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。 |
timeout | 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)。 |
fetchSize | 这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)。 |
statementType | 可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 |
resultSetType | FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。 |
databaseId | 如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。 |
resultOrdered | 这个设置仅针对嵌套结果 select 语句:如果为 true,则假设结果集以正确顺序(排序后)执行映射,当返回新的主结果行时,将不再发生对以前结果行的引用。 这样可以减少内存消耗。默认值:false。 |
resultSets | 这个设置仅适用于多结果集的情况。它将列出语句执行后返回的结果集并赋予每个结果集一个名称,多个名称之间以逗号分隔。 |
1.编写接口(在dao/mapper.java接口文件下)
- //插入一个用户
- int addUser(User user);
2.编写接口对应的mapper中的语句(在dao/mapper.xml文件下)
-
- <insert id="addUser" parameterType="com.yuan.pojo.User">
- insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd});
- insert>
3.测试
- @Test
- public void addUser(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
-
- int num = userMapper.addUser(new User(4,"牛六","123321"));
- if (num > 0) {
- System.out.println("插入成功");
- }
- sqlSession.commit();
- sqlSession.close();
- }

1.编写接口(在dao/mapper.java接口文件下)
- //修改一个用户
- int updateUser(User user);
2.编写接口对应的mapper中的语句(在dao/mapper.xml文件下)
- <update id="updateUser" parameterType="com.yuan.pojo.User">
- update mybatis.user
- set name = #{name} , pwd = #{pwd}
- where id = #{id};
- update>
3.测试
- @Test
- public void updateUser(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- int num = mapper.updateUser(new User(4,"小明","123123"));
- if (num > 0){
- System.out.println("修改成功");
- }
- sqlSession.commit();
- sqlSession.close();
- }


1.编写接口(在dao/mapper.java接口文件下)
- //删除一个用户
- int deleteUser(int id);
2.编写接口对应的mapper中的语句(在dao/mapper.xml文件下)
- <delete id="deleteUser" parameterType="int">
- delete from mybatis.user
- where id = #{id};
- delete>
3.测试
- @Test
- public void deleteUser(){
- SqlSession sqlSession = MybatisUtils.getSqlSession();
- UserMapper mapper = sqlSession.getMapper(UserMapper.class);
- int num = mapper.deleteUser(4);
- if (num > 0){
- System.out.println("删除成功");
- }
-
- sqlSession.commit();
- sqlSession.close();
- }


在编写中遇到的错误:
在mybatis中出现java.lang.IllegalArgumentException: Parameter Maps collection does not contain value for com.yuan.dao.UserMapper.int 报错,是因为parameterMap属性而这个属性已经早废弃了且应该使用parameterType


1.在mapper.xml文件中namespace中的包名要和dao/mapper接口的包名一致
2.id :就是对应的namespace中的方法;resultType:sql语句执行的返回值;parameterType:参数类型
3.增删改需要提交事务才会生效(即sqlSession.commit();)