Mybatis 开发注解快速入门
快速普及 1、mybatis是什么 mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。 MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 对象关系映射的改进,效率更高 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 四个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 开发注解快速入门,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |