一、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();
} @Override
public 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 { @Autowired
private MessageCustomMapper messageCustomMapper; @Test
public 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);
}
@Test
public void testSelect() throws SQLException{
Message result = messageCustomMapper.getMessageById("001");
System.out.println(result);
}
@Test
public 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);
} @Test
public void testSelectMap() throws SQLException{
Map result = messageCustomMapper.getMessageMapById("001");
System.out.println(result);
}
@Test
public void testDelete() throws SQLException{
int result = messageCustomMapper.deleteByMessageId("001");
System.out.println(result);
}
}

结果:

(1)testAdd方法:

  

 (2)testSelect方法:

 (3)testUpdate方法:

1

(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缺点。两者互补~

  2、古人语 : 熊和鱼掌不可得兼 ~ 而mybatis注解 和 xml 可以混合使用。只要你愿意~~

更全的参考:http://blog.csdn.net/hjm824/article/details/52972738

Mybatis注解的使用的更多相关文章

  1. mybatis注解详解

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

  2. mybatis 注解快速上手

    一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...

  3. mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类

    相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...

  4. mybatis注解开发,动态sql

    在利用mybatis注解开始时,如果没有用到动态sql时,可以直接写 @Select("select * from order") List<XlSubOrder> g ...

  5. 使用mybatis注解@Options实现添加记录时返回主键值

    官网:http://www.mybatis.org/mybatis-3/index.html 在使用mybatis作为ORM框架时,我通常更喜欢使用注解而非xml配置文件的方式.业务场景:添加记录之后 ...

  6. SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]

    SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...

  7. SpringBoot使用Mybatis注解开发教程-分页-动态sql

    代码示例可以参考个人GitHub项目kingboy-springboot-data 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframe ...

  8. Mybatis注解开发模糊查询

    Mybatis注解开发模糊查询 一般在使用mybatis时都是采用xml文件保存sql语句 这篇文章讲一下在使用mybatis的注解开发时,如何进行模糊查询 模糊查询语句写法(在@Select注解中) ...

  9. SpringBoot使用Mybatis注解进行一对多和多对多查询(2)

    SpringBoot使用Mybatis注解进行一对多和多对多查询 GitHub的完整示例项目地址kingboy-springboot-data 一.模拟的业务查询 系统中的用户user都有唯一对应的地 ...

  10. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...

随机推荐

  1. 状压DP详解(位运算)

    前言: 状压DP是一种非常暴力的做法(有一些可以排除某些状态的除外),例如dp[S][v]中,S可以代表已经访问过的顶点的集合,v可以代表当前所在的顶点为v.S代表的就是一种状态(二进制表示),比如 ...

  2. 2016 ACM-ICPC Asia China-Final D 二分

    题意:一共有N个冰淇淋球,做一个冰淇淋需要K个球,并且由于稳定性,这K个球还必须满足上下相邻的下面比上面大至少两倍.先给出N个球的质量,问最多能做出多少个冰淇淋? 思路:二分答案并对其检验. 检验标准 ...

  3. [CodeForces948D]Perfect Security(01字典树)

    Description 题目链接 Solution 01字典树模板题,删除操作用个数组记录下就行了 Code #include <cstdio> #include <algorith ...

  4. Android 渗透小知识点

    客户端用于 ADB 通信的默认端口始终是 5037,设备使用从 5555 到 5585 的端口 adb devices用于显示所有已连接设备, 有时候会出现一些问题, 这时候需要使用adb kill- ...

  5. Spark机器学习之推荐引擎

    一. 最小二乘法建立模型 关于最小二乘法矩阵分解,我们可以参阅: 一.矩阵分解模型. 用户对物品的打分行为可以表示成一个评分矩阵A(m*n),表示m个用户对n各物品的打分情况.如下图所示: 其中,A( ...

  6. java练习题——字符串

    一.动手动脑之String.equals()方法: 判断s1和s2的内容相同s1.equals(s2). 判断s1和s2的地址相同s1 == s2. 二.整理String类的Length().char ...

  7. c语言的左移、右移

    先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如: int i = 1; i = i << 2;  //把i里的值左移2位 也就是说,1的2进制是0 ...

  8. Android stadio butternife工具

    http://www.androidchina.net/5068.html svn今天我对它有了更深的认识.我知道了有冲突了不能提交.但是可以update,updata之后就会有冲突的东西生成,如果你 ...

  9. 剑指Offer - 九度1389 - 变态跳台阶

    剑指Offer - 九度1389 - 变态跳台阶2013-11-24 04:20 题目描述: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳 ...

  10. Timer的schedule和scheduleAtFixedRate方法的区别解析

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下 (1)sched ...