写在前面
很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。
本文使用到的东西
- MyBatis
- java
1.注解与xml映射器的比较
注解相比于xml配置的优点:
a 灵活,代码提示好
b 分工合作。将实现类和对应的配置是同一文件,由同样的开发人员维护。
缺点:
a 效率稍低
b 不支持热加载,需要重启程序。
注解实现映射器与xml不同,注解实现那么Mapper就为接口类本身,所有在mybatis-config.xml文件中mappers内的映射器定义要指向类,而不是路径中的xml。
示例项目文件
链接:https://pan.baidu.com/s/1V4IXNG9GIPrdTfcN_GHDzw
提取码:pspp
连接的是userinfo表
连接的是person和sex表
链接:https://pan.baidu.com/s/1s6eVhbZR3wt5SOoHwwydEg
提取码:sax6
2.单表_没有返回的简单增、删、改
增
增语句比较简单,只需使用@Insert一个注解接口
语法:
@Insert("增加列的查询语句")
示例:
@Insert("insert into userinfo values(#{uid},#{uname},#{password})")
删
增语句比较简单,只需使用@Insert一个注解接口
语法:
@Delete("删除列的查询语句")
示例:
@Delete("delete from userinfo where uid=#{uid}")
改
增语句比较简单,只需使用@Insert一个注解接口
语法:
@Update("修改列的查询语句")
示例:
@Update("update userinfo set uname = #{uname},password = #{password} where uid=#{uid}")
3.单表的查询
单表的查询比较简单,比增删改略微复杂一点点,只要@select+@Results+@Result三个注解即可实现简单的单表查询
语法:
@Select("查询表的语句")
@Results
(value = {
@Result(property="java实体类属性",column="映射的表的字段",id=true), //id=true表示主键
@Result(property="java实体类属性",column="映射的表的字段"),
@Result(property="java实体类属性",column="映射的表的字段")
}
)
示例:
@Select("select * from userinfo where uid=#{uid}")
@Results
(value = {
@Result(property="uid",column="uid",id=true),
@Result(property="uname",column="uname"),
@Result(property="password",column="password")
}
)
4.多表关联查询
示例1:
@Select("select * from person where pid=#{pid}")
@Results(
value={
@Result(property="pid",column="pid",id=true),
@Result(property="pname",column="pname"),
@Result(property="age",column="age"),
@Result(property="sex",column="sexid",javaType=com.etc.entity.Sex.class,
one=@One(select="com.etc.dao.SexDao.findById")
)
}
)
public Person findById(int pid);
示例2:
@Select("select * from sex")
@Results(
value={
@Result(property="sexid",column="sexid",id=true),
@Result(property="sexname",column="sexname"),
@Result(property="persons",column="sexid",javaType=List.class
,many=@Many(select="com.etc.dao.PersonDao.selectPersonBySexid")),
}
)
public List<Sex> findAll();
- 多表查询与单表查询使用的几乎是同样的标签,一般多用了@Many+@One两个标签
- @Many+@One两个标签使用方法相同,作用貌似也相同,实验时调换两个标签的位置也未报错
- javaType定义property指定的java类的属性类型为指定类
- @Many+@One表示用数据库字段的值来调用指定类中指定接口的Mapper,并将返回值传给property定义的属性
- 详细使用可以下载运行注解实现Mapper_关联表.zip示例项目
5.总结
很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。有不清楚的地方欢迎评论留言,看到的我都会回复的。本文到此结束,有什么不足的地方请大家不吝指正。