mybatis基本注解、增删改查、结果集映射、一对一、一对多

mybatis注解

    • 基本注解
      • 新增
      • 删除
      • 修改
      • 查询
    • 结果映射注解
      • @Results结果映射
      • 一对一映射
      • 一对多映射

基本注解

新增

功能:@Insert完成新增操作,类似配置文件的 元素;

说明:新增时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

功能:@Options完成数据库自增主键的回填;

功能:@SelectKey完成自定义主键的自增;

	//新增
	@Insert("insert into student (sname,birthday,ssex,classid) "
			+ "values (sname,birthday,ssex,classId)")

	@SelectKey ( statement = "自增规则", keyProperty 
= "主键属性", resultTyp

	//主键回填注解
	@Options(useGeneratedKeys = true,keyProperty = "sid")
	public int insertStudent(Student s);

删除

功能:完成删除操作,类似配置文件的 元素;

说明:删除时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

	//删除
	@Delete("delete * form student where sid = #{v}")
	public int deleteStudentBysid(int sid);

修改

功能:完成更新操作,类似配置文件的 元素;

说明:更新时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

//修改
	@Update("update student set sname=#{sname},birthday=#{birthday},ssex=#{ssex},classid=#{classId} where sid = #{sid}")
	public int updateStudentBysid(Student s);

查询

功能:完成查询操作,类似配置文件的 元素;

说明:查询时所用的参数取值是接口方法的入参,可以是对象,也可以是 Map 集合。

//全查
	@Select("select * from student")
	public List<Student> findStudnet();
	
	//条件查询
	@Select("select * from student where sid = #{v}")
	public Student findStudentBySid(int sid);
	
	//传多参
	@Select("select * from student where ssex = #{sex} limit #{cp},#{sp}")
	public List<Student> findStudnetSomePar(@Param("sex") String ssex,@Param("cp") int cp,@Param("sp") int sp);

传多参:

在xml四种的基础上又加了一种:

@Param(“名字”):写在接口参数的前面,在sql中传参的地方写名字

结果映射注解

@Results结果映射

功能:完成数据库字段和 JavaBean 属性的映射关系,主要解决数据库中的字段和实体类中的属性名不一致;

说明:每个 @Results 可以包含多个 @Result,其中通过id 属性来判断是否为主键。

语法

@Results(id = "",value={
    @Result(column = "",property = ""),
    @Result(column = "",property = "")
})
//不重复使用的话
@Results({
    @Result(column = "",property = ""),
    @Result(column = "",property = "")
})

eg:
	@Results(id = "sm_map",value = {
			@Result(column = "smid",property = "smid"),
			@Result(column = "sm_name",property = "smname"),
			@Result(column = "smsex",property = "smsex")
	})
	@Select("select * from schoolmaster")
	public List<SMaster> finaAll();

//二次复用

	@Select("select * from schoolmaster")
	@ResultMap("sm_map")
	public List<SMaster> finaAllSMaster();

说明:

@Results标签如果没有id的话就只对离他最近的下面的的查询语句有效,如果需要在后面复用就需要写id 后面的查询语句使用@ResultMap(“id”);

跟当前接口中有定义使用id属性,每个sql语句前要么有一个@Results映射关系,要么要么@ResultMap,这两个不能同时给一 个sql语句

一对一映射

@One( Select = 一对一查询方法, fetchType = FetchType.EAGER )

//步骤
1.在实体类中写外部属性
2.写映射关系
	column = "classid" :将该字段的值作为查询条件传入关联的子表作为条件
	property = "bj" : 外部属性名
	one = @One(select = "com.li.dao.BanjiMapper.findBanjiByClassid" : 写子查询接口的方法名
	fetchType = FetchType.LAZY :懒加载
eg:
//学生mapper中 
  全查关联班级
	@Results(id = "cla_sty_map",value = {
			@Result(column = "classid",property = "classId"),
			@Result(column = "classid",property = "bj",one = @One(select = "com.li.dao.BanjiMapper.findBanjiByClassid" ,fetchType = FetchType.LAZY))
	})
	
	@Select("select * from student")
	public List<Student> findAllStudnet();
        
//班级mapper中
	@Select("select * from class where classid = #{v}")
	public List<Banji> findBanjiByClassid(int classId);
               
               
注意:不论是一对一还是一对多实际上都是单表查询
	

mybatis基本注解、增删改查、结果集映射、一对一、一对多_第1张图片

一对多映射

@Many( Select = 一对多查询方法, fetchType = FetchType.EAGER )

//步骤
1.在实体类中写外部属性
2.写映射关系
	column = "classid" :将该字段的值作为查询条件传入关联的子表作为条件
	property = "bj" : 外部属性名
	many = @Many(select="com.li.dao.StudentMapper.findStudnetByClassid")) : 写子查询接口的方法名
	fetchType = FetchType.LAZY :懒加载
eg:
//班级mapper中 
  全查关联班级
	@Results(id = "class_student_map",value = {
			@Result(column = "classid",property = "classId"),
			@Result(column = "classid",property = "stu",many = 
				@Many(select="com.li.dao.StudentMapper.findStudnetByClassid")),
	})
	@Select("select * from class")
	public List<Banji> findBanjiAndStudent();
        
//学生mapper中
	@Select("select * from student where classid = #{v}")
	public List<Student> findStudnetByClassid(int classid);
               
 

mybatis基本注解、增删改查、结果集映射、一对一、一对多_第2张图片

你可能感兴趣的:(MyBatis,java)