Mybatis基于代理Dao的CRUD操作
经过了前一天的mybatis的学习,掌握了mybatis的环境搭建以及知道了mybatis 的快速入门,其实mybatis在使用代理dao的方式实现增删改查时只做了两件事:
1、创建代理对象
2、在代理对象中调用selectList方法
基于代理Dao的CRUD操作的配置文件实现(IUserDao.xml):
其中id为dao接口中的方法名,parameterType为参数的类型,resultType为dao接口中的返回值类型。正是通过namespace属性值和id中的属性值以及parameterType和resultType的属性值,于是才可以定位到所要调用的方法,所要执行的SQL语句以及想要返回的类型。
Mybatis中参数的深入-使用实体类的包装对象作为查询条件:
需求:根据用户名查询用户信息,查询条件放到QueryVo的user属性中
首先关于OGNL表达式:
-----------------------------------------
OGNL表达式:
Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了。
比如:我们获取用户的名称
类中的写法:user.getUsername();
OGNL表达式写法:user.username
mybatis中为什么能直接写username,而不用user.呢:
因为在parameterType中已经提供了属性所属的类,所以此时不需要写对象名
-----------------------------------------
当使用QueryVo实体类将User对象进行包装之后,便不能#{username}直接使用属性名称了,而需要指定为哪一个包装对象的哪一个属性名,即
解决实体类属性与数据库字段名不对应的两种方式:
1、起别名的方式,这种方式执行的效率比较高,在写SQL语句时,用as将实体类的属性名使之与数据库字段名对应,但是此种方式在写多条SQL语句时显得麻烦,用起来较为简单。
2、使用resultMap标签,配置实体类属性与数据库字段名的对应关系,开发效率比较高,但是要多解析一段xml代码,执行效率比较低。
SqlMapConfig.xml 文件中:
properties标签的使用及细节:
properties标签用于导入外部的配置文件,当为resource属性值时只需要写其resources报下的文件名称即可,当为url属性值即统一资源定位符,需要写协议 主机 端口号 URI(统一资源标志符),具体实现如下:
其中value属性值为properties文件中的key值,${}包裹起来即可。
typeAliases标签和package标签的使用及细节:
此处的参数类型INT可以随便填写,int、INT、java.lang.Interger、甚至iNt都可以就是因为mybatis框架中有typeAliases标签,
typeAlias用于配置别名,type属性为封装对象的全限定类名,alias为别名,当取了别名便不区分大小写
package属性用于指定要配置别名的包,当指定之后,该包下的所有类都会注册别名,并且类名就是别名,不再区分大小写,范围更大
并且在配置映射文件的位置,当使用package标签时,package标签用于指定dao接口所在的包,当指定之后就不需要再写mapper标签以及其属性了