Mybatis---简单配置设计
1.按项目里的架构(用maven构建的,四个包):
2.MyBatis和数据库的交互配置(以insertCard方法为例)
3.MyBatis的主要的核心部件:https://zhuanlan.zhihu.com/p/66237585
注:目前的MyBatis 只是对注解配置SQL 语句提供有限支持,某些高级功能还是要依赖XML文件配置SQL
1.按项目里的架构(用maven构建的,四个包):
(其他项目采用mapper+service=dao层,然后+controller层)
dao持久层:数据访问,一个接口cardMapper.java
service服务层:一个接口cardManager,一个实现类CardManagerImpl,它依赖于cardMapper.java
entity层:实体类(cardVO,cardDO,)
2.card项目和ytuser不同的是,这里MyBatis和数据库的交互方式---Mapper接口
(SqlSession 获取 Mapper 接口,通过 Mapper 接口发送 SQL,通过SqlSession 的 getMapper 方法获取一个 Mapper 接口,就可以调用它的方法了。因为 XML 文件或者接口注解定义的 SQL 都可以通过“类的全限定名+方法名”查找,所以 MyBatis 会启用对应的 SQL 进行运行,并返回结果。)
cardMapper.xml中:
<mapper namespace="com.yuantu.mapper.CardMapper" > <insert id="insertCard" parameterType="com.yuantu.domain.CardDO" useGeneratedKeys="true" keyProperty="id" > insert into card (union_id, corp_id...status) values(#{unionId}, #{corpId},#{cardNo}... #{status},) </insert> //cardMapper.java类中 Public interface CardMapper { int insertCard(CardDO cardDO) throws DAOException; } //CardManagerImpl.java类中,根据卡id查询卡 @Override public Integer insert(CardDO cardDO) { return cardMapper.insertCard(cardDO); }
getCardById(long id) throws DAOException;
MyBatis 配置规范后,通过SqlSession.getMapper(XXXMapper.class) 方法,
MyBatis 会根据接口的方法信息,通过动态代理机制生成一个Mapper 实例,我们使用Mapper 接口的某一个方法时,MyBatis 会根据这个方法的方法名和参数类型,确定Statement Id。
底层还是通过SqlSession.select("statementId",parameterObject);
或者SqlSession.update("statementId",parameterObject);操作来实现对数据库的操作
MyBatis 引用Mapper 接口方式,纯粹是为了满足面向接口编程的需要。(其实还有一个原因是在于,面向接口的编程,使得用户在接口上可以使用注解来配置SQL语句,这样就可以脱离XML配置文件,实现“0配置”)。
3.MyBatis的主要的核心部件有以下几个:
SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所需要的参数,
ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
TypeHandler 负责java数据类型和jdbc数据类型之间的映射和转换
MappedStatement MappedStatement维护了一条<select|update|delete|insert>节点的封***r /> SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
BoundSql 表示动态生成的SQL语句以及相应的参数信息
Configuration MyBatis所有的配置信息都维持在Configuration对象之中。