在接口中有方法的返回值定义,参数的定义,方法名,在sqlMapper.xml 中也对应这接口给予了赋值,这时候dao的实现类就显得多余,这是Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结果,这就是Mybatis的mapper动态代理
不用创建实现类,由mybatis自动实现
Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper接口开发需要遵循以下规范:
Mapper.xml文件中的namespace与mapper接口的类路径相同。
Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
使用SqlSession的方法getMapper() 让Mybatis自动生成对应接口的实现对象。
SqlSession sqlSession = DaoUtil.getSqlSession();
DeviceWorkMapper mapper = sqlSession.getMapper(DeviceWorkMapper.class);
List dList = mapper.findAllList();
dList.forEach(System.out::println);
动态代理对象调用sqlSession.selectOne()和sqlSession.selectList()是根据mapper接口方法的返回值决定,如果返回list则调用selectList方法,如果返回单个对象则调用selectOne方法。
mybatis官方推荐使用mapper代理方法开发mapper接口,程序员不用编写mapper接口实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或map对象,保证dao的通用性。
将java的重载功能砍掉了,因为mybatis的id是唯一标识 的,不允许出现重复
半自动化的体现 :配置 SQL 语句,体现了半自动化和灵活性。
ORM的体现:对象关系映射的实现,数据库表和 POJO 类的映射关系。
映射器与接口:映射器配置文件和接口绑定:配置文件名对应接口名,id 属性值对应方法名。
1.文件路径 – 用相对路径引入映射器:
2.XML – 用文件定位符引入映射器:
3.包名 – 用包名引入映射器:
4.类注册 – 用类名引入映射器:
id :唯一标识,接口中的方法名;
parameterType :入参的类型;
resultType :结果集类型;
resultMap :结果集映射关系;
方式1:javaBean
方式2:map集合
方式3:param1,param2,param3…
方式4:arg0,arg1,arg2…
id :唯一标识,接口中的方法名;
parameterType :参数的类型;
keyProperty :表示以哪个列作为属性的主键,不能和 keyColumn 同时使用;
keyColumn :指明哪一列是主键,不能和 keyProperty 同时使用;
useGeneratedKeys :获取有数据库内部生成的主键(默认false);
当主键在数据库中为自增字段时,新增成功后,回填主键。
insert into student(sname,birthday,ssex,classid)
values(#{sname},#{birthday},#{ssex},#{classid})
< selectKey >用来预先设定主键值。自定义主键生成规则时,可以使用该标签;
order 属性:
id :唯一标识,接口中的方法名;
parameterType :参数的类型;
update student set sname =#{sname},birthday=#{birthday},ssex=#{ssex},classid=#{classid}
where sid = #{sid}
delete from student where sid=#{value}
表名和字段名不一致使用
用于配置构造方法的元素。
标识主键列,允许多个主键。
POJO 到 SQL 列名的映射关系。
result标签的属性:
property :映射到列结果的字段或者属性,通常是指 POJO 的属性;
column :对应的数据库字段;
javaType :Java 类型,可以是基本数据类型,也可以是类完全限定名;
jdbcType :JDBC 的类型,基本支持所有常用的数据库类型;
级联(cascade),是指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率
一对一:association
一对多:collection ofType(collection对象的类型)
1.性能缺陷:级联操作会降低性能,增加程序的执行时间;
2.复杂度缺陷:关联较多造成复杂度的增加,不利于他人的理解和维护;
1.根据实际情况增加级联关系
2.多层关联式,超过三层尽量少用级联