Mybatis框架实现CRUD操作
自定义mybatis流程
mybatis基于代理dao的CRUD操作(重点)
E:\JAVAworkspace\mybatis_CRUD
CRUD中可能遇到的问题:参数的传递及返回值的封装
-
parameterType(输入类型):
-
传递简单类型
-
传递pojo对象:mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
OGNL表达式:Object Graphic Navigation Language
对象 图 导航 语言
它是通过对象的取值方法来获取数据。在写法上把get给省略了,比如我们获取用户的名称:
类中的写法:user.getUsername()
OGNL的写法:user.username
mybatis 中为什么能直接写
username
,而不用user.
原因是在parameterType中已经提供了属性所属的类,所以此时不需要写对象名。 -
传递pojo包装对象:当查询条件是综合的查询条件,不仅包括用户查询条件还包括其他的查询条件时(例如用户购买商品的信息),可以使用包装对象传递输入参数。
-
-
resultType(输出类型)
- resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
- 如果sql查询字段名和pojo属性名不一致,可以对SQL列名起别名,也可以通过resultMap将字段名和属性名作一个对应关系,resultMap实质上还需要将查询结果映射到pojo对象中。
<!--起别名:执行效率较高--> SELECT id AS userId,username as userName,address AS userAddress,sex AS userSex, birthday AS userBirthday FROM USER
<!--resultMap:开发效率较高--> <!--配置 查询结果的列名和实体类的属性名的对应关系--> <resultMap id="userMap" type="com.ssm.domain.User"> <!--主键字段的对应--> <id property="userId" column="id"></id> <!--非主键字段的对应--> <result property="userName" column="username"></result> <result property="userAddress" column="address"></result> <result property="userSex" column="sex"></result> <result property="userBirthday" column="birthday"></result> </resultMap> <!--查询所有--> <select id="findAll" resultMap="userMap"> SELECT * FROM USER </select>
- resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询
介绍mybatis传统dao方式的使用(自己编写dao的实现类)
E:\JAVAworkspace\mybatis_CRUD_dao
mybatis主配置文件中的常用配置
-
properties标签:可以在标签内部配置连接数据库的信息,也可以通过属性引用外部配置文件信息
- resource属性:常用的,用于指定配置文件的位置,是按照路径的写法来写,并且必须存在于类路径下
<properties resource="jdbcConfig.properties"></properties>
- url属性:是要求按照url的写法来写地址
- URL:Uniform Resource Locator 统一资源定位符,可以标识唯一的一个资源的位置
- 它的写法:
http://location:8080/mybatisserver/demo1Servlet
协议 主机 端口 URI
<properties url = "file:///E:/JAVAworkspace/mybatis_CRUD/src/main/resources/jdbcConfig.properties"> </properties>
-
typeAliases标签:使用typeAliases配置别名,他只能配置domain类中的别名
typeAlias
用于配置别名,type属性指定实体类全限定类名,alias属性指定别名,当指定了别名就不再区分大小写
<typeAlias type="com.ssm.domain.User" alias="user"></typeAlias>
package
用于指定要配置别名的包,当指定之后,该包下的实体类都会注册别名,并且类名就是别名,不再区分大小写
<package name="com.ssm.domain"></package>
- 解释Integer、int、java.lang.Integer的写法
-
mappers标签的子标签:
- package标签用于指定dao接口所在的包,当指定了之后就不需要再写mapper以及resource(xml解析)或者calss(注解)了
<package name="com.ssm.dao"></package>