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注解的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot实战笔记-- Spring高级话题(组合注解与元注解)