Mybatis 开发注解快速入门

 更新时间:2016年11月25日 08:42:50   作者:坚守一辈子的幸福  
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 开发注解快速入门,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Struts中使用validate()输入校验方法详解

    Struts中使用validate()输入校验方法详解

    这篇文章主要介绍了Struts中使用validate()输入校验方法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • java开发线上事故理解RocketMQ异步精髓

    java开发线上事故理解RocketMQ异步精髓

    这篇文章主要介绍了java开发线上事故理解RocketMQ异步精髓
    2022-07-07
  • Java Proxy机制详细解读

    Java Proxy机制详细解读

    这篇文章主要介绍了Java Proxy机制详细解读,还是非常不错的,这里分享给大家,需要的朋友可以参考下。
    2017-10-10
  • Java编程复用类代码详解

    Java编程复用类代码详解

    这篇文章主要介绍了Java编程复用类代码详解,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java高级语法学习之反射详解

    Java高级语法学习之反射详解

    java的泛型和反射机制一直很难理解和应用,下面这篇文章主要给大家介绍了关于Java高级语法学习之反射的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 详解Java中包装类Integer的使用

    详解Java中包装类Integer的使用

    今天再带大家复习一下Java的相关知识,文中对Java包装类Integer的使用作了非常详细的介绍,对正在学习Java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot工程下使用OpenFeign的坑及解决

    SpringBoot工程下使用OpenFeign的坑及解决

    这篇文章主要介绍了SpringBoot工程下使用OpenFeign的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • default怎么修饰接口中的方法详解

    default怎么修饰接口中的方法详解

    今天给各位小伙伴们总结一下default怎么修饰接口中的方法,文中有非常详细的图文解说.对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot实现IP地址解析的示例代码

    SpringBoot实现IP地址解析的示例代码

    本篇带大家实践在springboot项目中获取请求的ip与详细地址,我们的很多网站app中都已经新增了ip地址显示,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java并发教程之Callable和Future接口详解

    Java并发教程之Callable和Future接口详解

    Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引入异步处理,这篇文章主要给大家介绍了关于Java并发教程之Callable和Future接口的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论