MyBatis中的CRUD
parameterType(输入类型)
1.传递简单类型
<select id="findUserById" resultType="com.study.mybatis.domain.User" parameterType="java.lang.Integer">
SELECT * FROM user WHERE id=#{id};
</select>
2.传递poji对象
MyBatis使用ognl表达式解析对象的字段, #{}
或 ${}
括号中的值为pojo属性值
OGNL表达式
Object Graphic Navigation Language - 对象图导航语言
通过对象的取值方法来获取数据
在写法上把get给省略了
比如获取用户的名称
类中写法:
user.getUsername();
OGNL写法:
user.username
mybatis中能直接写username
是因为在parameterType
中已经提供了属性所属的类, 所有此时不需要写对象名
传递pojo包装对象
开发中通过pojo传递查询条件, 查询条件是综合的查询条件, 包括不同类的查询条件, 这时可以使用包装对象传递输入参数.
包装类
public class QueryVo {
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
配置parameterType
为包装类
<!-- 根据QueryVo 的条件查询用户 -->
<select id="findUserByVo" parameterType="com.study.mybatis.domain.QueryVo" resultType="com.study.mybatis.domain.User">
SELECT * FROM user WHERE username LIKE ${user.username};
</select>
resultType(输出类型)
1.输出简单类型
<!-- 查询总用户数 聚合函数 -->
<select id="findTotal" resultType="com.study.mybatis.domain.User">
SELECT * FROM user WHERE username=#{username};
</select>
2.输出pojo对象
<!-- 查询总用户数 聚合函数 -->
<select id="findTotal" resultType="java.lang.Integer">
SELECT COUNT(id) FROM user;
</select>
3.输出pojo列表
<!-- 查询所有用户 -->
<select id="findAll" resultType="com.study.mybatis.domain.User">
SELECT * FROM user;
</select>
4.resultMap结果类型
解决实体类中属性名和字段名不一致问题
<!-- 配置 查询结果的列名和实体类的属性名的对应关系 -->
<resultMap id="userMap" type="com.study.mybatis.domain.User">
<!-- 主键字段的对应 -->
<id property="uid" column="id"/>
<!-- 非主键字段的对应 -->
<result property="uName" column="username"/>
<result property="uAddress" column="address"/>
<result property="uSex" column="sex"/>
<result property="uBirthday" column="birthday"/>
</resultMap>
应用resultMap
<!-- 查询所有用户 -->
<select id="findAll" resultMap="userMap">
SELECT * FROM user;
</select>