写在前面

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。文章可能还有很多不足,请大家谅解,欢迎大佬提意见。

本文使用到的东西

  1. MyBatis
  2. java

1.注解与xml映射器的比较

注解相比于xml配置的优点:
a 灵活,代码提示好
b 分工合作。将实现类和对应的配置是同一文件,由同样的开发人员维护。

缺点:
a 效率稍低
b 不支持热加载,需要重启程序。

注解实现映射器与xml不同,注解实现那么Mapper就为接口类本身,所有在mybatis-config.xml文件中mappers内的映射器定义要指向类,而不是路径中的xml。
映射器配置
示例项目文件

链接:https://pan.baidu.com/s/1V4IXNG9GIPrdTfcN_GHDzw
提取码:pspp

连接的是userinfo表
userinfo表

连接的是person和sex表
链接:https://pan.baidu.com/s/1s6eVhbZR3wt5SOoHwwydEg
提取码:sax6
person表
sex表

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();
  1. 多表查询与单表查询使用的几乎是同样的标签,一般多用了@Many+@One两个标签
  2. @Many+@One两个标签使用方法相同,作用貌似也相同,实验时调换两个标签的位置也未报错
  3. javaType定义property指定的java类的属性类型为指定类
  4. @Many+@One表示用数据库字段的值来调用指定类中指定接口的Mapper,并将返回值传给property定义的属性
  5. 详细使用可以下载运行注解实现Mapper_关联表.zip示例项目

5.总结

很久以前在有道云笔记上写的笔记,打算放弃它了,将笔记迁移到这里来。有不清楚的地方欢迎评论留言,看到的我都会回复的。本文到此结束,有什么不足的地方请大家不吝指正。