一、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.bean领域模型

package cn.xm.exam.bean.common;import java.util.Date;import org.apache.struts2.json.annotations.JSON;
/*** 查询年龄大于55岁的人()* @author QiaoLiQiang* @time 2018年1月25日下午4:03:02*/
public class Message {private String messageid;private String name;private String idcode;private String sex;private Date birthday;private String emptype;private String isdispose;public String getMessageid() {return messageid;}public void setMessageid(String messageid) {this.messageid = messageid == null ? null : messageid.trim();}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}public String getIdcode() {return idcode;}public void setIdcode(String idcode) {this.idcode = idcode == null ? null : idcode.trim();}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex == null ? null : sex.trim();}@JSON(format="yyyy-MM-dd")public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getEmptype() {return emptype;}public void setEmptype(String emptype) {this.emptype = emptype == null ? null : emptype.trim();}public String getIsdispose() {return isdispose;}public void setIsdispose(String isdispose) {this.isdispose = isdispose == null ? null : isdispose.trim();}@Overridepublic String toString() {return "Message [messageid=" + messageid + ", name=" + name + ", idcode=" + idcode + ", sex=" + sex+ ", birthday=" + birthday + ", emptype=" + emptype + ", isdispose=" + isdispose + "]";}}

2.Mapper接口定义:

MessageCustomMapper.java(最后五个方法注解实现)

package cn.xm.exam.mapper.common.custom;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import cn.xm.exam.bean.common.Message;/*** 消息mapper(查询内部外部年龄超过55的人)* * @author QiaoLiQiang* @time 2018年1月25日下午4:07:45*/
public interface MessageCustomMapper {/*** 根据员工类型查询超过55岁的人* * @return* @param empType:员工类型:0短委,1内部* @throws SQLException*/public List<Message> getMessageByEmptype(String empType) throws SQLException;/*** 修改消息的状态(设置为已读 1)* * @param messageId*            消息ID* @return* @throws SQLException*/public int updateMessageStatusByMessageId(String messageId) throws SQLException;/*** 测试注解使用Mybatis*/@Insert(" insert into message values (#{messageid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{idcode,jdbcType=CHAR}, #{sex,jdbcType=VARCHAR}, #{birthday,jdbcType=DATE}, #{emptype,jdbcType=VARCHAR},#{isdispose,jdbcType=VARCHAR})")public int insertIntoByAnnotation(Message message) throws SQLException;@Select("select * from message where messageid = #{messageId}")public Message getMessageById(@Param("messageId")String messageId)throws SQLException;@Update("update message set name=#{name} where messageid=#{messageid}")public int updateMessageById(Message message)throws SQLException;@Select("select * from message where messageid = #{messageId}")public Map getMessageMapById(@Param("messageId")String messageId)throws SQLException;@Delete("delete from message where messageid = #{messageId}")public int deleteByMessageId(@Param("messageId")String messageid)throws SQLException;}

MessageCustomMapper.xml(只实现部分方法)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.xm.exam.mapper.common.custom.MessageCustomMapper"><!-- 查询未读的消息,每次显示6条 --><select id="getMessageByEmptype" parameterType="string"resultType="cn.xm.exam.bean.common.Message">select * from message where empType=#{value} and isDispose='0' limit 0,6</select><!-- 根据ID设置消息状态 --><update id="updateMessageStatusByMessageId">update message set isDispose='1' where messageid = #{value}</update>
</mapper>

3.测试如下:

package cn.xm.exam.test.daoTest;import java.sql.SQLException;
import java.util.Map;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import cn.xm.exam.bean.common.Message;
import cn.xm.exam.mapper.common.custom.MessageCustomMapper;/*** mybatis注解测试* * @author QiaoLiQiang* @time 2018年3月10日下午3:47:40*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/application*")
public class MybatisAnnotationTest {@Autowiredprivate MessageCustomMapper messageCustomMapper;@Testpublic void testAdd() throws SQLException{Message message = new Message();message.setSex("1");message.setMessageid("001");message.setName("张三");int result = messageCustomMapper.insertIntoByAnnotation(message);System.out.println(result);}@Testpublic void testSelect() throws SQLException{Message result = messageCustomMapper.getMessageById("001");System.out.println(result);}@Testpublic void testUpdate() throws SQLException{Message message = new Message();message.setSex("2");message.setMessageid("001");message.setName("李四");int result = messageCustomMapper.updateMessageById(message);System.out.println(result);}@Testpublic void testSelectMap() throws SQLException{Map result = messageCustomMapper.getMessageMapById("001");System.out.println(result);}@Testpublic void testDelete() throws SQLException{int result = messageCustomMapper.deleteByMessageId("001");System.out.println(result);}
}

结果:

(1)testAdd方法:

(2)testSelect方法:

(3)testUpdate方法:

(4)testSelectMap方法:(测试返回类型是Map)

{sex=1, name=李四, messageid=001}

(5)testDelete方法:

1

二、动态SQL

对应关系如下

@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider

四个provider注解标识 使用了动态SQL, 使用语法格式 :

@UpdateProvider(type = UserProvider.class, method =

如何使用动态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();}
}

由此可见动态SQL还是用XML写SQL语句比较方便

本文提到的知识点比较基础, 如需深入了解见官网文档or看下源码。

总结:
  1、xml 和 注解 如何选择 ? 因人而异, 每个人的撸码各有各的习惯, xml 、注解各有优缺点, xml的缺点 : 当模型属性有变更时, 需要从DO改到DAO改到xml, 想想就蛋疼了~ xml也有优点 , SQL片段复用方便, 语法平易近人, 不像注解, 构造个动态语句, 还得建个类, 而且当你需要构造一段SQL被多处引用时, annotation 显得无能为力了~重复写相同的SQL片段, 代码就显得冗余了, 这时必须借助 xml来抽取共同使用。吐槽了下mybatis注解, 那注解岂不是毫无用处? no , mybatis 适合模型属性经常变更的场景, 因为可以结合反射, 正则匹配动态构造SQL(纯粹瞎歪歪, 个人想法, 应该可以实现, 改天撸一发)。可以说, mybatis的注解 优点 很好弥补了 xml缺点。两者互补~

mybits注解详解相关推荐

  1. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

  2. mybatis注解详解

    mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...

  3. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  4. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  5. Spring零配置之@Configuration注解详解

    转载自 Spring零配置之@Configuration注解详解 @Configuration介绍 Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而 ...

  6. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

  7. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

  8. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  9. Java基础13:反射与注解详解

    Java基础13:反射与注解详解 什么是反射? 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性. Orac ...

最新文章

  1. 打造高效机房就这么简单(一)
  2. java实现https免证书认证
  3. 存根类 测试代码 java_常规单元测试和存根–测​​试技术4
  4. Javascript的setTimeOut()和setInterval()的定时器用法
  5. 波士顿大学计算机与传媒专业,波士顿大学传媒专业好吗
  6. IDEA常用快捷键大全
  7. 格式小结 css 0926
  8. python zope 工作流_使用C语言来扩展Python程序和Zope服务器的教程
  9. BAT大揭秘:在腾讯、百度、阿里上班,差别竟然这么大?
  10. 毕设题目:Matlab通信
  11. jquery migrate 应用迁移辅助插件
  12. 【解决方案】PDF文字复制后乱码
  13. w5500telnet协议详解_STM32F103VCT6+W5500 telnet功能实现
  14. Java自定义类的属性、方法结合数组简单使用
  15. lol服务器维护是拳头,问拳头-英雄联盟官方网站-腾讯游戏
  16. 百度在北京和深圳主攻腾讯 新浪等一些IM公司,大力挖人,甚至爆出15w-20w年薪,有人士对百度的行为做出以下分析:
  17. unity 鼠标放置 ui_ui层次结构以及不常见但至关重要的任务放置在哪里
  18. 智慧发电厂+智能发电厂web端平台管理系统+Axure高保真智慧电厂系统+能耗管理+告警管理+生产监控+安防设备管理+运维设备管理+监控面板+系统管理+智慧电厂+电厂系统+智慧电厂管理平台+rp原型
  19. 解析las文件_Java读取解析激光点云数据(Las/Laz)
  20. 超简单的豆瓣电影Top前250影片基本信息爬取

热门文章

  1. SPI参数化分配寄存器
  2. 奇异递归模板模式(Curiously Recurring Template Pattern,CRTP)
  3. 无法复制winevt中的文件_u盘文件无法复制怎么解决 u盘文件无法复制解决方法【详细步骤】...
  4. hi3798mv300是什么手机_华为海思电视芯片hi3798mv300 硬件参数如何?
  5. mysql5.7 新增参数_MySQL 5.7 新增参数
  6. 服务器信息化平台,管理系统的信息化平台.ppt
  7. 误差error,偏置bias,方差variance的见解
  8. Luogu1443 马的遍历【STL通俗BFS】
  9. fiddler2抓包数据工具使用教程
  10. SpringCloud系列七:使用Ribbon实现客户端侧负载均衡