MyBati s映射器注解

映 射 器 注 解

映射器配置文件的缺陷

繁琐:配置文件的书写本身繁琐,需要掌 握的内容比较多

不直观:配置文件和接口直接只是名称相同, 对应起来比较麻烦.

常用的注解

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

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

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

基 本 注 解

基本注解的分类

增加操作:@Insert 类似 < insert > 完成新增

删除操作:@Delete 类似 < delete > 完成删除

修改操作:@Update 类似 < update > 完成修改

查询操作:@Select 类似 < select > 完成查询

@Insert 新增

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

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

主键回填

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

主键自增

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

@Delete 删除

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

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

@Update 更新

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

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

@Selete 查询

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

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

传递多个参数的方式:

方法1:Map 方式 跟sqlmap一样 方法

2:JavaBean 方式 跟sqlmap一样 方法

3:@Param 方式

结 果 映 射 注 解

@Results 结果映射

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

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

@Results 复用

跟sqlmap的xml配合使用

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

一对一映射

功能:  一对一的关系映射;

说明:FetchType.lazy 是延时加载,FetchType.EAGER 是即时加载。

 一对多映射

动 态 S Q L 注 解

注解动态sql

脚本sql:

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

方法中构建sql 2

@SelectProvider @InsertProvider @UpdateProvider @DeleteProvider 这些方法的使用

SQL 语句构造器

实现动态 SQL 的内容

脚本动态sql

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

 @SelectProvider 的用法

其他的动态 SQL 方法

 方法中构建动态sql

在接口中定义内部类,来构建需要的动态sql语句,比使用标签的方式结构更加清晰

SQL 语句构造器

SQL 语句构造器的常用方法

package com.xn.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.xn.bean.Student;

public interface StudentMapper {
	@Insert("insert into student(sname,birthday,ssex,classid)"
			+"values(#{sname},#{birthday},#{ssex},#{classid})")
	@Options(useGeneratedKeys = true,keyProperty = "sid")
	public int addStudent(Student s);
	
	@Update("update student set sname=#{sname},birthday=#{birthday},ssex=#{ssex},classid=#{classid} where sid=#{sid}")
	public int updateStudent(Student s);
	
	@Delete("delete from student where sid=#{v}")
	public int deleteStudent(int sid);
	
	@Select("select * from student where sid=#{v}")
	public Student findStudentById(int sid);
	
	@Select("select * from student")
	public List<Student> findAllAtudent();
	
	//多参 1.JavaBean 2.Map 3.param数(1) 4.arg(0) 5.@Param
	@Select("select * from student where ssex=#{a} and classid=#{b} limit #{c},#{d}")
	public List<Student> findStudentByssexAndClassidLimit(
			@Param("a")String ssex,
			@Param("b")int classid,
			@Param("c")int weizhi,
			@Param("d")int buchang);
	
//查询学生和班级信息 1对1
	@Results(id = "sc_Map",value= {
			@Result(column="classid",property="classid"),
			
			@Result(property = "bj",column="classid",
				one=@One(select= "com.xn.mapper.BanjiMapper.findBanjiByClassid"))
	})
	@Select("select * from student")
	public List<Student> findAllStudentAndClass();
	
	@Select("select * from class where classid=#{v}")
	public List<Student> findBanjiByClassid(int classid);
	
	@Select("select * from student where classid=#{v}")
	public List<Student> findStudentBycalssid(int classid);
	
}

package com.xn.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.xn.bean.Banji;

public interface BanjiMapper {
	
	@Select("select * from class where classid=#{v}")
	public List<Banji> findBanjiByClassid(int classid);
	
	@Results({
		@Result(column = "classid",property="classid"),
		@Result(property = "stulist",column="classid",
			many=@Many(select="com.xn.mapper.StudentMapper.findStudentBycalssid"))
	})
	
	@Select("select * from class")
	public List<Banji> findAllBanjiAndStu();
	
}
package com.xn.mapper;

import java.util.List;

import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.jdbc.SQL;

import com.xn.bean.Student;

public interface StudentMapper {

	// 动态sql

	// 方式1

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

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

	// 方式3 构造器生成动态sql语句 将方式2进行封装---构造器

	@SelectProvider(type = StudentSql.class, method = "getSelectStudentSql")
	public List<Student> FindStudentGZQ(Student s);

	@InsertProvider(type = StudentSql.class, method = "getGZQInsertStudentSql")
	public int AddStudent(Student s);

	@UpdateProvider(type = StudentSql.class, method = "getGZQUpdateStudentSql")
	public int UpdateStudent(Student s);

	@DeleteProvider(type = StudentSql.class, method = "getGZQDeleteStudentSql")
	public int DeleteStudent(int sid);

	// 内部类
	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 getGZQInsertStudentSql(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.getSsex() != null) {
						VALUES("ssex", "#{ssex}");
					}
					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}");
						}
						if (s.getSid() != 0) {
							WHERE("sid = #{sid}");
						}
					}
				}.toString();
		}

		public String getGZQDeleteStudentSql(int sid) {
			return new SQL() {
				{
					DELETE_FROM("student");
					WHERE("sid=#{v}");
				}
			}.toString();

		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值