MyBatis 本是 apache 的一个开源项目 iBatis, 2010 年这个项目由 apache software foundation 迁移到了 google code,并且改名为 MyBatis 。
mybatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。这篇文章主要介绍了 Mybatis 开发注解快速入门的相关资料, 需要的朋友可以参考下
快速普及
1、mybatis 是什么
mybatis 是一个支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索封装。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
Mybatis 实现了接口绑定,使用更加方便。
对象关系映射的改进,效率更高
MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
2、功能架构
3、执行流程
原理详解:
MyBatis 应用程序根据 XML 配置文件创建 SqlSessionFactory,SqlSessionFactory 在根据配置,配置来源于两个地方,一处是配置文件,一处是 Java 代码的注解,获取一个 SqlSession。SqlSession 包含了执行 sql 所需要的所有方法,可以通过 SqlSession 实例直接运行映射的 sql 语句,完成对数据的增删改查和事务提交等,用完之后关闭 SqlSession。
下面看下本文介绍重点 mybatis 简单注解
关键注解词 :
@Insert : 插入 sql , 和 xml insert sql 语法完全一样
@Select : 查询 sql, 和 xml select sql 语法完全一样
@Update : 更新 sql, 和 xml update sql 语法完全一样
@Delete : 删除 sql, 和 xml delete sql 语法完全一样
@Param : 入参
@Results : 结果集合
@Result : 结果
1、领域模型 :
- public class UserDO {
- private Long id;
- private String userName;
- private Date gmtCreate;
- private Date gmtModified;
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public Date getGmtCreate() {
- return gmtCreate;
- }
- public void setGmtCreate(Date gmtCreate) {
- this.gmtCreate = gmtCreate;
- }
- public Date getGmtModified() {
- return gmtModified;
- }
- public void setGmtModified(Date gmtModified) {
- this.gmtModified = gmtModified;
- }
- }
2、接口定义 :
- public interface UserDAO {
- @Insert("INSERT INTO t_user(gmt_create, gmt_modified, user_name) values(now(), now(), #{userName})")
- public int insert(@Param("userName") String userName);
- @Select("SELECT * FROM t_user WHERE id = #{id}")
- public UserDO selectByUserId(@Param("id") Long id) ;
- @Update("UPDATE t_user SET gmt_modified = now(), user_name = #{userName} WHERE id = #{id}")
- public int udpateById(@Param("userName") String userName, @Param("id") Long id) ;
- @Delete("DELETE FROM t_user WHERE id = #{id}")
- public int udpateById(@Param("id") Long id) ;
- }
3、mybatis xml config:
- <!-- mybatis 注解 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="mysqlBASE" /> <!--这里只需要配置你自己的数据源即可-->
- </bean>
- <bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
- <property name="mapperInterface" value="com.yuanmeng.userDAO" /> <!--mybatis接口-->
- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!--sqlSession工厂-->
- </bean>
这样, 我们就完成了 mybatis 使用注解的 demo, 是不是觉得很简单 ~~
如果熟悉 mybatis xml 的话, 大多数情况下, 我们需要将数据库表的字段名 与 class DO 映射起来。mybatis 注解也提供了映射的功能, 语法大同小异。
- @Select("SELECT * FROM tsp_template WHERE id = #{id}")
- @Results(value = { @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) })
- public UserDO selectById(@Param("id") Long id);
当然, 上述只是再不能简单的 sql 了。想想如果我们有这种需求, 更新用户信息, 希望能更新指定的属性值, 换而言之, 像 xml 一样动态生成 SQL 。 那我们就不能简单粗暴使用 @update 注解 。好在 强大的 mybatis 也提供了动态 SQL 的组装。
动态 SQL
对应关系如下
@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider
四个 provider 注解标识 使用了动态 SQL, 使用语法格式 :
- @UpdateProvider(type = UserProvider.class, method = "updateSQL")
如何构造动态 SQL
- public class UserProvider {
- /**
- * udpate
- * @param UserDO userDO
- * @return
- */
- public String updateSQL(final UserDO userDO) {
- return new SQL() {
- {
- UPDATE("t_user");
- SET("gmt_modified = now()");
- if (userDO.getUserName() != null) {
- SET("user_name = #{userName}");
- }
- WHERE("id = #{id}}");
- }
- }.toString();
- }
- }
本文提到的知识点比较基础, 如需深入了解见官网文档 or 看下源码。
总结 :
1、xml 和 注解 如何选择 ? 因人而异, 每个人的撸码各有各的习惯, xml 、注解各有优缺点, xml 的缺点 : 当模型属性有变更时, 需要从 DO 改到 DAO 改到 xml, 想想就蛋疼了~ xml 也有优点 , SQL 片段复用方便, 语法平易近人, 不像注解, 构造个动态语句, 还得建个类, 而且当一段 SQL 被多处引用时, 代码就显得冗余了, 这时必须借助 xml 来抽取共同使用。吐槽了下 mybatis 注解, 那注解岂不是毫无用处。 no , mybatis 适合模型属性经常变更的场景, 因为可以结合反射, 正则匹配动态构造 SQL(纯粹瞎歪歪, 个人想法, 应该可以实现, 改天撸一发)。可以说, mybatis 的注解 优点 很好弥补了 xml 缺点。两者互补~
以上所述是小编给大家介绍的 Mybatis 开发注解快速入门,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 PHPERZ 网站的支持!
来源: http://www.phperz.com/article/17/1212/359328.html