Spring注解

Posted linchongatfirst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring注解相关的知识,希望对你有一定的参考价值。

  之前一直使用的是一对一的单注解方式,今天考到了一对多..果真是什么不会考什么,结果就是什么考试没做出来,数据也没取到。。。。

mysql> select * from clazz;
+----+-------+
| id | title |
+----+-------+
| 1 | 一班 |
| 2 | 二班 |
+----+-------+
2 rows in set (0.00 sec)

mysql> select * from student;
+----+-------+-------+----------+
| id | name | phone | clazz_id |
+----+-------+-------+----------+
| 1 | pop | 24556 | 1 |
| 2 | bob | 24556 | 1 |
| 3 | alice | 24556 | 2 |
+----+-------+-------+----------+
3 rows in set (0.00 sec)

 这是我两张简单表的数据,模型如下:

package com.yangpeng.hr.model;

public class Clazz {
    int mid;
    String mtitle;

    public int getMid() {
        return mid;
    }

    public void setMid(int mid) {
        this.mid = mid;
    }

    public String getMtitle() {
        return mtitle;
    }

    public void setMtitle(String mtitle) {
        this.mtitle = mtitle;
    }

    

}
package com.yangpeng.hr.model;

public class Student {

    int vid;
    String vname;
    String vphone;
    Clazz vclazz;

    public int getVid() {
        return vid;
    }

    public void setVid(int vid) {
        this.vid = vid;
    }

    public String getVname() {
        return vname;
    }

    public void setVname(String vname) {
        this.vname = vname;
    }

    public String getVphone() {
        return vphone;
    }

    public void setVphone(String vphone) {
        this.vphone = vphone;
    }

    public Clazz getVclazz() {
        return vclazz;
    }

    public void setVclazz(Clazz vclazz) {
        this.vclazz = vclazz;
    }

}

 平常我都是保证表的数据和类的字段名字一致,以减少不必要的麻烦,有些坑毕竟还是要尝试一下的,如果表的字段和建立类的字段信息不一,可以在sql语句起

别名,另一种就是使用@Result指定property,你现在可以看到Student类里面放了Clazz字段,明显和student表的字段不一样,这里就要使用@one,来实现一对一的操作。

package com.yangpeng.hr.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
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 com.yangpeng.hr.model.Clazz;
import com.yangpeng.hr.model.Student;

@Mapper
public interface StudentMapper {

    @Select("select * from student")
    @Results(value = { 
            @Result(property = "vid", column = "id"), 
            @Result(property = "vname", column = "name"),
            @Result(property = "vphone", column = "phone"),
            @Result(property = "vclazz", column = "clazz_id", 
            javaType = Clazz.class, one = @One(select = "loadclazzByid")) })
    public List<Student> getallStu();

    @Select("select * from clazz where id = #{clazz_id}")
    @Results(value = {
            @Result(property="mid",column="id"),
            @Result(property="mtitle",column="title")
    })
    public Clazz loadclazzByid(int clazz_id);

}

   @one里面有一个属性select,单引号包含的是一个函数名,如果在不同类或者不同包,要使用方法的全权定名,我的loadclazzByid(int clazz_id)就是下面,只要使用方法名就可以啦

注意cloum = clazz_id  这一句,它会把表中的这个字段自动赋给loadclazzByid方法中的clazz_id,调用loadclazzByid方法,实现clazz对象的返回。最后我的页面终于成功取到数据。
















以上是关于Spring注解的主要内容,如果未能解决你的问题,请参考以下文章

使用Java代码和注解完成Spring配置

Spring Boot实战笔记-- Spring高级话题(组合注解与元注解)

如何获取spring 注解的bean

SRPING02_配置数据源原始注解开发新注解开发集成Junit代码实现

spring 在哪里可以找到注解的实现代码

Spring组合注解与元注解