MyBatis的基本注解

常用注解

基本注解:实现简单的增删改查操作

结果映射注解:实现结果的映射关系,也可以完成级联映射

动态SQL注解:实现动态SQL的内容

基本注解:

增加操作:@Insert

删除操作:@Delete

修改操作:@Update

查询操作:@Select

//查找所有的学生
	@Select("select * from student")
	public List<Student> findAllStu();

	//根据sid查找学生
	@Select("select * from student where sid=#{v}")
	public Student findstudent(int sid);
	
	//增加学生
	@Insert("insert into student(sname,birthday,ssex,classid) "
			+ "values(#{sname},#{birthday},#{ssex},#{classid})")
	public int insertstu(Student s);
	
	//删除学生
	@Delete("delete from student where sid=#{v}")
	public int delstu(int sid);
	
	//修改学生
	@Update("update student set sname=#{sname},birthday=#{birthday},"
			+ "ssex=#{ssex},classid=#{classid} where sid=#{sid}")
	public int updatestu(Student s);
    
    @Select("select * from student where ssex = #{xb} and"
			+ " classid=#{bj} limit #{wz},#{bc}")
	public List<Student> findStudentByssexAndClassidLimit(
			@Param("xb") String ssex,
			@Param("bj") int calssid,
			@Param("wz") int weizhi,
			@Param("bc") int buchang
			);

主键回填:完成数据库自增主键的回填

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

主键自增:

@SelectKey ( statement = "自增规则", keyProperty

= "主键属性", resultType = 结果类型, before = true )

结果映射注解

@Results结果映射

功能:完成数据库字段和JavaBean属性的映射关系

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

@Results({ @Result(id = 是否为主键, column = "字段", property = "属性" ) })

@Results复用

一对一映射:

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

FetchType.EAGER:即时加载,FetchType.LAZY:延时加载

一对多映射:

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

FetchType.EAGER:即时加载,FetchType.LAZY:延时加载

动态SQL注解

脚本sql:XML配置方式的动态SQL,是用<script>的方式把它照搬过来,用注解来实现。适用于xml 配置转换到注解配置

//	动态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

@InsertProvider

@UpdateProvider

@DeleteProvider

这些方法的使用

// 方式二 在方法中创建动态sql语句
	@SelectProvider(type = StudentSql.class, method = "getSelectStudentSql")
	public List<Student> findStudentFunc(Student s);

	// 方式三 构造器生成动态sql语句 将方式二进行封装-- 构造器
	@SelectProvider(type = StudentSql.class, method = "getGZQSelectStudentSql")
	public List<Student> getGZQSelectStudentSql(Student s);
	
	@InsertProvider(type=StudentSql.class,method="getGZQAddStudentSql")
	public int getGZQAddStudentSql(Student s);
	
	@DeleteProvider(type=StudentSql.class,method="getGZQDeleteStudentSql")
	public int getGZQDeleteStudentSql(int sid);
	
	@UpdateProvider(type=StudentSql.class,method="getGZQUpdateStudentSql")
	public int updateStudentGZQ(Student s);
	

	//内部类
	class StudentSql {
		
		public String getSelectStudentSql(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;
		}

		
		//构造器
		public String getGZQSelectStudentSql(Student s) {
			return new SQL() {
				{
					//字段名
					SELECT("sid,sname");
					SELECT("birthday");
					SELECT("ssex,classid");
					//表
					FROM("student");
					//条件
					if(s.getSsex()!=null) {
						WHERE("ssex=#{ssex}");
					}
					if(s.getClassid()!=0) {
						WHERE("classid=#{classid}");
					}
				}
			}.toString();
		}

		public String getGZQAddStudentSql(Student s) {
			return new SQL() {
				{
					INSERT_INTO("student");
					if(s.getSid()!=0) {
						VALUES("sid","#{sid}");
					}
					if(s.getSname()!=null) {
						VALUES("sname","#{sname}");
					}
					if(s.getBirthday()!=null) {
						VALUES("birthday","#{birthday}");
					}
					if(s.getClassid()!=0) {
						VALUES("classid","#{classid}");
					}
				}
			}.toString();
		}
		
		public String getGZQUpdateStudentSql(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 getGZQDeleteStudentSql(int sid) {
			return new SQL() {
				
				{
					DELETE_FROM("student");
					WHERE("sid = #{v}");
				}
				
			}.toString();
		}
	

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值