1.insert|update|deleted
这三个标签都没有resultType属性,操作结果需要靠接口的返回值来判断。返回值int受影响行数.
如果数据库是主键自增的,在insert标签中useGeneratedKeys=“true” keyProperty=“形参对象的属性名” 获取自增主键id
2.sql:
公共sql语句块.
uid,uname,uphone,upwd,uemail,create_time,update_time,rid
</sql
结合
3.resultMap:结果集映射
实体类属性名与数据库的字段名不一致;
主键列映射
非主键列映射e
4.resultMap的子标签collection,association对象关系映射:
关联查询:查询用户对象的时候,把用户的角色对象关联查询出来。
association:多对一,一对一关系
查询用户对象的时候,把用户的角色对象关联查询出来。
collection:一对多。
查询角色对象的时候,把该角色下的所有用户查询出来。
5.动态sql:在xml映射文件中进行sql拼接
if:条件判断,传入boolean表达式,多条件使用and或or
where:生成where关键字,并忽略紧跟其后的and或or,如果where中间的是空的,则不生成where了
set:生成set关键字,并忽略最后一个逗号.
foreach:遍历数组和集合参数,批量删除,批量添加
choose-when-otherwise:单条件查询
6.动态代理Proxy类:
Proxy类有成员变量 InvocationHandler h;
创建的代理类$Proxy0 extends Proxy,所以如果原对象没有接口,Proxy类newProxyInstance不能创建代理对象,报异常。
动态代理的实现方式两种:
jdk的Proxy类,要求被代理对象必须有接口。因为内部创建的$Proxy0已经有extends父类,所以$Proxy0只能够用implements继承接口。
第三方组件cglib,可以没有接口