谈谈mybatis的理解(三)

本文详细介绍了MyBatis中的基本注解如@Insert、@Delete、@Update和@Select,以及参数传递和结果映射的使用,同时涵盖了一对一和一对多关系的映射,以及动态SQL和SQL构造器的实例。
摘要由CSDN通过智能技术生成

mybatis

MyBatis映射器注解
基本注解
  • 增加操作:@Insert 类似 < insert > 完成新增
  • 删除操作:@Delete 类似 < delete > 完成删除
  • 修改操作:@Update 类似 < update > 完成修改
  • 查询操作:@Select 类似 < select > 完成查询

@Insert 新增

	@Insert("insert into student(sname,birthday,ssex,classid)"
			+ "values(#{sname},#{birthday},#{ssex},#{classid})")
	@Options(keyProperty = "sid", useGeneratedKeys = true)
	public int addStudent(Student s);

@Delete 删除

	@Delete("delete from student where sid = #{v}")
	public int delStudent(int sid);

@Update 修改

	@Update("update student set sname=#{sname},birthday=#{birthday},"
			+ "ssex=#{ssex},classid = #{classid} where sid = #{sid}")
	public int updateStudent(Student s);

@Selete 查询

	@Select("select * from student")
	public List<Student> findAllStudent();

@Param 方式 传递多参

	@Select("select * from student where ssex = #{xingbie} limit #{weizhi},#{sizepage}")
	public List<Student> findStudentBySexPage( 
			@Param("xingbie") String sex,  
			@Param("weizhi") int curpage, 
			@Param("sizepage") int sizepage
			);
结果映射注解

@Results 结果映射

@Result(column = "smid", property = "smid")

@Results 复用

	@Results(id = "smMap", value = {
			@Result(column = "smid", property = "smid"),
			@Result(column = "sm_name", property = "smname"),
			@Result(column = "smsex",property = "smsex")	
	})

一对一映射

语法

@one(select="需要对应的方法的路径")
	@Results({
			@Result(column = "classid", property = "classid"),
			@Result(property = "bj",column = "classid", 
				one = @One(select = "com.ape.mapper.BanjiMapper.findBanjiByClassid") )
			
	})
	@Select("select * from student")
	public List<Student> findStudentAndClass();
一对多映射

语法

@Many(select="需要对应的方法的路径")
	@Results(id = "bj_stu_Map", value = {
			@Result(column = "classid", property = "classid"),
			@Result(column = "classid", property = "slist",
					many = @Many(select = "com.ape.mapper.StudentMapper.findStudentByClassid"))
	})

	@Select("select * from class")
	public List<Banji> findAllBanjiAndStu();
脚本动态SQL

在sql语句中加入标签,按照之前sqlmap中的动态sql的样式书写

	// 脚本Sql
	@Select("<script>"
			+ "select * from student "
			+ "<where>"
			+ "<if test=\"ssex != null\"> and ssex = #{ssex}</if>"
			+ "<if test=\"classid != 0\"> and classid = #{classid}</if>"
			+ "</where>"
			+ "</script>")
	public List<Student> findStudent(Student s);

在方法中构建动态SQL

	@SelectProvider(type = StudentSql.class, method = "chaxunStuSql" )
	public List<Student> findStudentFun(Student s);
	
	
	class StudentSql{
			public String chaxunStuSql(Student s) {
			String sql = "select * from student  where 1=1 ";
			
			if(s.getSsex() != null) {
				sql += " and ssex = #{ssex}";
			}
			if(s.getClassid() != 0) {
				sql += " and classid = #{classid}";
			}
			
			return sql;
		}
	}

方法中的方法名要与@SelectProvider中的method参数一致,type对应都是内部类的类名

使用SQL构造器

构造器的结构:

return new SQL(){
	{
	
	}
}.toString();
	@SelectProvider(type = StudentSql.class, method = "gzqchaxun")
	public List<Student> findStudentGZQ(Student s);
	
	@UpdateProvider(type = StudentSql.class, method = "gzqxiugai")
	public int updateStudentGZQ(Student s);
	
	@InsertProvider(type = StudentSql.class, method = "gzqtianjia")
	@Options(keyProperty = "sid",useGeneratedKeys = true)
	public int addStudentGZQ(Student s);
	
	@DeleteProvider(type = StudentSql.class, method = "gzqshanchu")
	public int delStudentGZQ(int sid);
	
	
	class StudentSql{
		public String gzqchaxun(Student s) {
			return new SQL() {
				{
//					SELECT("sid");
//					SELECT("sname");
//					SELECT("birthday,ssex,classid");
					SELECT("*");
					FROM("student");
					if(s.getSsex() != null) {
						WHERE("ssex = #{ssex}");
					}
					if(s.getClassid() != 0) {
						OR();
						WHERE("classid = #{classid}");
					}
				}
			}.toString();
		}

		public String gzqxiugai(Student s) {
			return new SQL() {
				{
					UPDATE("student");
					if(s.getSname() != null) {
						SET("sname = #{sname}");
					}
					if(s.getBirthday() != null) {
						SET("birthday = #{birthday}");
					}
					if(s.getSsex() != null) {
						SET("ssex = #{ssex}");
					}
					if(s.getClassid() != 0) {
						SET("classid = #{classid}");
					}
					WHERE("sid = #{sid}");
				}
			}.toString();
		}
		
		public String gzqtianjia(Student s) {
			return new SQL() {
				{
					INSERT_INTO("Student");
					if(s.getSname() != null) {
						VALUES("sname","#{sname}");
					}
					if(s.getBirthday() != null) {
						VALUES("birthday","#{birthday}");
					}
					if(s.getSsex() != null) {
						VALUES("ssex","#{ssex}");
					}
					if(s.getClassid() != 0) {
						VALUES("classid","#{classid}");
					}
				}
			}.toString();
		}
		
		public String gzqshanchu(int sid) {
			return new SQL() {
				{
					DELETE_FROM("student");
					WHERE("sid = #{v}");
				}
				
			}.toString();
		}
	}
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值