MyBatis(五)映射器注解

1,常见的注解

(1)基本注释:实现简单的增删改查操作。

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

(3)动态SQL注解:实现动态 SQL 的内容。

2,Insert 新增

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

3,Delete 删除

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

4,Update 修改

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

5,Select 查询

    // 查询
    @Select("select * from student")
	public List<Student> findAllStudent();
	
	@Select("select * from student where sid = #{v}")
	public Student findStudentBysid(int sid);
	
	// Pojo 和 Map 可以进行多参查询
	// 注解的多参特有的形式
	
	@Select("select * from student "
			+ " where ssex=#{k} and classid = #{classid} "
			+ " limit #{curpage},#{sizepage}")
	public List<Student> findStudentByssexandClassid(
			@Param("k") String sex, @Param("classid") int cid,
			@Param("curpage") int curpage, 
			@Param("sizepage") int sizepage
			);

6,@Results 结果映射

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

    @Results(id = "smMap",value = {
		@Result(column = "smid",property = "smid"),
		@Result(column = "sm_name",property = "smname"),
		@Result(column = "smsex",property = "smsex")
	})
	@Select("select * from schoolmaster")
	@ResultMap("smMap") // 方法外去找映射
	public List<Smaster> findSm();

7,一对一映射

	// one 一对一的表联查 @One(select="能得到属性对象的反射字符串",fetchType="加载机制")
	
	@Results({
		@Result(column = "classid", property = "classid"),
		@Result(column = "classid",property = "bj", 
			one=@One(
				select = "com.ape.mapper.BanjiMapper.findBanjiByClassid")
		)
	})
    @Select("select * from student")
	public List<Student> findAllStudent();

	@Select("select * from class where classid = #{v}")
	public Banji findBanjiByClassid(int classid);
	

8,多表映射

    // many 一对多的映射 @Many(select ="通过字符串反射得到的集合对象")
	@Results({
		@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> findAllBanji();

	@Select("select * from student where classid = #{v}")
	public List<Student> findStudentByClassid(int classid);

9,动态SQL注解

(1)脚本SQL

	// sql脚本
	// <script></script>
	@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> findStudentScript(Student s);

(2)方法中构建SQL

// 方法构建sql语句
	// @SelectProvider (type = 内部类.class, method = "方法名")
	// @InsertProvider
	// @UpdateProvider
	// @DeleteProvider
	// 不推荐
	@SelectProvider(type = StuSql.class ,method = "selectFunc")
	public List<Student> findStudentFun(Student s);

	class StuSql{
		public String selectFunc(Student s) {
			String sql = "select * from student where 1=1";
			if(s.getClassid() != 0) {
				sql += " and classid = #{classid}";
			}
			if(s.getSsex() != null) {
				sql += " and ssex = #{ssex}";
			}
			return sql;
		}
    }

(3)SQL语句构造器

// sql构造器
	// 官方推荐的方式
	// 方法构建sql语句
	// @SelectProvider (type = 内部类.class, method = "方法名")
	// @InsertProvider
	// @UpdateProvider
	// @DeleteProvider
	
	
	@SelectProvider(type=StuSql.class, method = "selectPro")
	public List<Student> findStudentProvider(Student s);


	class StuSql{	
		public String selectPro(Student s) {
			return new SQL() {
				{
					// SELECT("sid,sname,birthday"); // 字段
			    	// SELECT("ssex");
					// SELECT("classid");
					SELECT("*");
					FROM("student");
					if(s.getClassid() != 0) {
						WHERE("classid = #{classid}");
					}
					if(s.getSsex() != null) {
					 OR();	WHERE("ssex = #{ssex}");
					}
				}
			}.toString();
		}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手可摘鑫晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值