数据库表的关系无非就四种:1、一对多(多对一),2、一对一,3、多对多,4、没有关系。其实面对数据表的多对多关系并没有那么复杂,那要看你怎么实现,传统的方法无非就是查询sql语句,而我要的是不通过自己写sql语句来达到查询出数据。这个我貌似不会,在网上找了太多资料,结果太让我失望了,不是要xml文件就是注解写sql,多对多的关系处理不清。想了好久,也碰到好多壁障,不过还是做出来了。
功能:通过中间表查询出与之关联的表的个别字段数据
传统方法(注解编写sql语句的方式)
- 表关系(歌单表、歌曲表、歌曲集合表(中间表))
一个歌单可以有多首歌曲,一首歌曲可以有多个歌单。
这是歌曲表:
这是歌单表:
这是中间表:
代码(注解sql语句方式)
- 创建一个实体类接收数据:
/**
* 歌单歌曲id
*/
private Integer id;
/**
* 歌曲id
*/
private Integer songId;
/**
* 歌单id
*/
private Integer songListId;
/*歌曲表*/
private Song song;
/*曲名*/
private String name;
/*歌单*/
private SongList songList;
/*歌单标题*/
private String title;
- dao层
@Select("select song.name,song_list.title from list_song inner join song on list_song.song_id=song.id\n" +
"join song_list on list_song.song_list_id=song_list.id where list_song.song_list_id=#{id} ")
List<ListSongUtils> selectsong(@Param("id")Integer id);
//sql语句我一般都是在数据库写好了再复制过来,这样可以降低sql语句出错的概率
//参数id是通过前端传过来的,是歌单id(根据歌单id查询歌单里的歌曲集合)
- service层
List<ListSongUtils> selectsong(@Param("id")Integer id);
- serviceImpl实现层
//引用dao层
@Autowired
ListSongMapper listSongMapper;
@Override
public List<ListSongUtils> selectsong(Integer id) {
//返回数据
return listSongMapper.selectsong(id