java  中MyBatis注解映射的实例详解

java  中MyBatis注解映射的实例详解

1.普通映射

@Select("select * from mybatis_Student where id=#{id}")
public Student getStudent(int id);
@Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{pic},#{grade.id},#{address.id})")
public int insert(Student student);
@Update("update mybatis_Student set name=#{name},age=#{age} where id=#{id}")
public int update(Student student);
@Delete("delete from mybatis_Student where id=#{id}")
public int delete(int id);

 2.结果集映射

@Select("select * from mybatis_Student")
@Results({
  @Result(id=true,property="id",column="id"),
  @Result(property="name",column="name"),
  @Result(property="age",column="age")
})
public List<Student> getAllStudents(); 

 3.关系映射

1),一对一

@Select("select * from mybatis_Student")
@Results({
  @Result(id=true,property="id",column="id"),
  @Result(property="name",column="name"),
  @Result(property="age",column="age"),
    @Result(property="address",column="address_id",one=@One(select="com.skymr.mybatis.mappers.AddressMapper.getAddress"))
})
public List<Student> getAllStudents();

2)一对多

package com.skymr.mybatis.mappers; 

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select; 

import com.skymr.mybatis.model.Grade; 

public interface Grade2Mapper { 

  @Select("select * from mybatis_grade where id=#{id}")
  @Results({
    @Result(id=true,column="id",property="id"),
    @Result(column="grade_name",property="gradeName"),
    @Result(property="students",column="id",many=@Many(select="com.skymr.mybatis.mappers.Student2Mapper.getStudentsByGradeId"))
  })
  public Grade getGrade(int id);
}

Java代码

package com.skymr.mybatis.mappers; 

import java.util.List; 

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; 

import com.skymr.mybatis.model.Student; 

public interface Student2Mapper { 

  @Select("select * from mybatis_Student where id=#{id}")
  public Student getStudent(int id);
  @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{pic},#{grade.id},#{address.id})")
  public int insert(Student student);
  @Update("update mybatis_Student set name=#{name},age=#{age} where id=#{id}")
  public int update(Student student);
  @Delete("delete from mybatis_Student where id=#{id}")
  public int delete(int id); 

  @Select("select * from mybatis_Student")
  @Results({
    @Result(id=true,property="id",column="id"),
    @Result(property="name",column="name"),
    @Result(property="age",column="age"),
    @Result(property="address",column="address_id",one=@One(select="com.skymr.mybatis.mappers.AddressMapper.getAddress"))
  })
  public List<Student> getAllStudents();
  @Select("select * from mybatis_Student where grade_id=#{gradeId}")
    @Results({
    @Result(id=true,property="id",column="id"),
    @Result(property="name",column="name"),
    @Result(property="age",column="age"),
    @Result(property="address",column="address_id",one=@One(select="com.skymr.mybatis.mappers.AddressMapper.getAddress"))
  })
  public List<Student> getStudentsByGradeId(int gradeId);
}

 4.动态sql注解映射

provider类

package com.skymr.mybatis.mappers.provider; 

import java.util.Map; 

import org.apache.ibatis.jdbc.SQL; 

import com.skymr.mybatis.model.Student; 

public class StudentDynaSqlProvider { 

  public String insertStudent(final Student student){
    return new SQL(){
      {
        INSERT_INTO("mybatis_Student");
        if(student.getName() != null){
          VALUES("name","#{name}");
        }
        if(student.getAge() > 0){
          VALUES("age","#{age}");
        }
      }
    }.toString();
  } 

  public String updateStudent(final Student student){
    return new SQL(){
      {
        UPDATE("mybatis_Student");
        if(student.getName() != null){
          SET("name=#{name}");
        }
        if(student.getAge() > 0){
          SET("age=#{age}");
        }
        WHERE("id=#{id}");
      }
    }.toString();
  } 

  public String getStudent(final Map<String,Object> map){
    return new SQL(){
      {
        SELECT("*");
        FROM("mybatis_Student");
        if(map.containsKey("name")){
          WHERE("name like #{name}");
        }
        if(map.containsKey("age")){
          WHERE("age=#{age}");
        }
      }
    }.toString();
  } 

  public String deleteStudent(){
    return new SQL(){
      {
        DELETE_FROM("mybatis_Student");
        WHERE("id=#{id}");
      }
    }.toString();
  }
}

 Mapper接口

@SelectProvider(type=StudentDynaSqlProvider.class,method="getStudent")
public List<Student> getStudents(Map<String,Object> map);

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • MyBatis一对一映射初识教程

    MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 一对一映射 在生活中,一对一的例子还是有的,比如啦,学生和身份证哦,或者在我国,实行的是一夫一妻制度哦.那么我们以学生和身份证每个学生只有一张身份证,而每张身份证的

  • Mybatis中如何使用sum对字段求和

    目录 使用sum对字段求和 避免Mybatis sum求和返回null 使用sum对字段求和 如下sql,为计算用户收益总和:   <select id="getTotalIncome" resultType="com.lws.test.modules.user.entity.UserIncomeEntity">     select sum(income) as totalIncome     from income_log     where uid

  • MyBatis输入映射和输出映射实例详解

    什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的

  • MyBatis的SUM映射问题及解决

    目录 SUM映射问题 原因 解决方式 sum 返回映射问题(sum报表统计接口返回) MyBatis sum 返回值映射 SUM映射问题 当我们根据类别进行统计,返回的数据类型为HashMap<String,Object>,获取数值类型,容易报 java.math.BigDecimal cannot be cast to java.lang.Integer 场景如下: // Mapper层 <select id="selectInfoByTest" resultTyp

  • java 中MyBatis注解映射的实例详解

    java  中MyBatis注解映射的实例详解 1.普通映射 @Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{

  • java  中MyBatis注解映射的实例详解

    java  中MyBatis注解映射的实例详解 1.普通映射 @Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{

  • Java中的注解和反射实例详解

    一.注解 注解(Annotation): 从jdk5.0开始引进,可以对程序进行解释或被其他程序读取. 注解格式:"@注释名",并可以添加一些参数. 例:@MyAnnotation(value='value') 1.内置注解 @override: 用于修饰方法,表示该方法声明是重写或实现一个父类的方法 @Deprecated: 用于修饰方法.属性.类,表示已过时不建议使用的 @SuppressWarnings: 用于抑制编译时的警告信息 2.元注解 作用:用于注解其他注解 @Targe

  • Java中内核线程理论及实例详解

    1.概念 内核线程是直接由操作系统内核控制的,内核通过调度器来完成内核线程的调度并负责将其映射到处理器上执行.内核态下的线程执行速度理论上是最高的,但是用户不会直接操作内核线程,而是通过内核线程的接口--轻量级进程来间接的使用内核线程.这种轻量级进程就是所谓的线程. 2.优点 由于内核线程的支持,每一个线程都是一个独立的单元,因此就算某一个线程挂掉了,也不会导致整个进程挂掉. 3.缺点 这种实现方式也存在局限性.由于是基于内核线程实现的,所以当涉及到线程的操作时(创建.运行.切换等)就涉及到系统

  • java 中HttpClient传输xml字符串实例详解

    java 中HttpClient传输xml字符串实例详解 介绍:我现在有一个对象page,需要将page对象转换为xml格式并以binary方式传输到服务端 其中涉及到的技术点有: 1.对象转xml流 2.输出流转输入流 3.httpClient发送二进制流数据 POM文件依赖配置 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifact

  • java 中模式匹配算法-KMP算法实例详解

    java 中模式匹配算法-KMP算法实例详解 朴素模式匹配算法的最大问题就是太低效了.于是三位前辈发表了一种KMP算法,其中三个字母分别是这三个人名的首字母大写. 简单的说,KMP算法的对于主串的当前位置不回溯.也就是说,如果主串某次比较时,当前下标为i,i之前的字符和子串对应的字符匹配,那么不要再像朴素算法那样将主串的下标回溯,比如主串为"abcababcabcabcabcabc",子串为"abcabx".第一次匹配的时候,主串1,2,3,4,5字符都和子串相应的

  • java中的static{}块的实例详解

    java中的static{}块的实例详解 一直以来对static块不是很熟系,今天特意写了两个程序来搞清楚一下: 第一个小程序: package com.babyDuncan.Sohu; public class testStatic { static { int x = 5; } static int x, y; public static void main(String[] args) { x--; myMethod(); System.out.println(x + y + ++x);

  • Java中Properties类的操作实例详解

    Java中Properties类的操作实例详解 知识学而不用,就等于没用,到真正用到的时候还得重新再学.最近在看几款开源模拟器的源码,里面涉及到了很多关于Properties类的引用,由于Java已经好久没用了,而这些模拟器大多用Java来写,外加一些脚本语言Python,Perl之类的,不得已,又得重新拾起.本文通过看<Java编程思想>和一些网友的博客总结而来,只为简单介绍Properties类的相关操作.  一.Java Properties类 Java中有个比较重要的类Properti

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • java中静态导入机制用法实例详解

    java中静态导入机制用法实例详解 这里主要讲解了如何使用Java中静态机制的用法,这里提供了简单实例大家可以参考下. 静态常量类 在java开发中,我们会经常用到一些静态常量用于状态判断等操作.为了能够在多个地方复用这些常量,通常每个模块都会加一个常量类,举个简单的列子: import com.sky.OrderMouleConsstants; /** * Created by gantianxing on 2017/4/21. */ public class Test { public vo

随机推荐