欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Mybatis 开发注解快速入门

程序员文章站 2024-03-09 16:43:17
快速普及 1、mybatis是什么       mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层...

快速普及

1、mybatis是什么

      mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。

      mybatis消除了几乎所有的jdbc代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的xml或注解用于配置和原始映射,将接口和java的pojo(plain old java objects,普通的java对象)映射成数据库中的记录。
mybatis实现了接口绑定,使用更加方便。

对象关系映射的改进,效率更高

mybatis采用功能强大的基于ognl的表达式来消除其他元素。

2、功能架构

Mybatis 开发注解快速入门

3、执行流程

Mybatis 开发注解快速入门

原理详解:

       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 开发注解快速入门,希望对大家有所帮助