除了xml的映射方式,mybatis还提供了使用注解的方式来实现pojo对象和数据表之间的关联映射。
单表的CURD:
mybatis中提供了@Select、@Insert、@Update、@Delete等用于CURD和@Param传递参数的常用注解。相比在xml文件中使用各种mapper子标签,使用注解的方式会更加简单而且不会增加系统开销,注解开发方式一般将注解和sql语句直接写在接口中。
注意的地方:
1.返回insert自增的键值
@Option()和@Insert()的使用:
@Options(useGeneratedKeys = true,keyProperty ="id",keyColumn = "id"),用于获取数据库表中自增的主键值,并返回到pojo对象的对应属性
/*
useGeneratedkey:设置是否使用JDBC的getGeneratedKeys()方法获取主键并赋值到keyProperty设置的领域模型属性中
keyProperty:接收返回值的实体属性;
keyColumn:数据表中的列;
*/
2.做CUD时忘记提交事务session.commit();
进行需要更新数据库信息的操作需要提交事务,不然数据库中信息不更新
典型Error:
做增删改时,控制台打印的信息有更新,而数据库中信息无更新,就是忘了提交事务
解决:
1)在调用方法后加入代码session.commit();提交事务即可。
2)或者在创建session时将openssion();改为openssion(true),自动提交事务。
3.注解开发dao中的方法不支持重载
Error: Error parsing SQL Mapper Configuration. Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for person.cozar.dao.BookMapper.updateBook
如果dao中设置了方法重载,则编译时builder会报错,因为mapper子标签中的id具有唯一性(回想xml方式编写<select>等子标签时,他们的id是和dao中的方法名是唯一对应的)
接口的编写:
package person.cozar.dao;
import org.apache.ibatis.annotations.*;
import person.cozar.domain.Book;
import java.util.List;
/*
在接口中通过注解的方式开发,无需写接口的实现类,也无需再写mapper的xml文件,简化了开发也无需增加系统开销
*/
public interface BookMapper {