Java框架_Mybatis_day03_参数的深入了解

14 篇文章 0 订阅
11 篇文章 0 订阅

目录

五、Mybatis参数的深入了解

5.1 parameterType(输入类型)

5.1.1 传递简单类型

5.1.2  传递 pojo 对象

5.2 通过 pojo 对象传递条件

5.2.1 创建 QueryVO 类(包装User类)

5.2.2 在 UserDao 接口中编写 模糊查询代码

5.2.3 在 UserDao.xml 文件中编写 模糊查询代码

5.2.4 在 TestUserDao 中编写 模糊查询代码

5.3 resultType(输出类型)

5.3.1 数据库中的字段与对象中的属性不一致问题

5.3.2 字段与属性名不一致问题解决(方案一)

5.3.2 字段与属性名不一致问题解决(方案二)(推荐)(resultMap)


五、Mybatis参数的深入了解

5.1 parameterType(输入类型)

5.1.1 传递简单类型

       int -- int 或者 java.lang.Integer

       string -- string 或者 java.lang.String

       别名不区分大小写

5.1.2  传递 pojo 对象

        com.cpz.domain.User -- username、address、sex、birthday、id

POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。

5.2 通过 pojo 对象传递条件

5.2.1 创建 QueryVO 类(包装User类)

package com.cpz.domain;

public class QueryVO {

    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

5.2.2 在 UserDao 接口中编写 模糊查询代码

    //使用QueryVO完成模糊查询
    List<User> findUserByQueryVOLike1(QueryVO queryVO);

5.2.3 在 UserDao.xml 文件中编写 模糊查询代码

    <!--使用QueryVO完成模糊查询-->
    <select id="findUserByQueryVOLike1" parameterType="com.cpz.domain.QueryVO" resultType="com.cpz.domain.User">
        select * from user where username like #{user.username}
    </select>

5.2.4 在 TestUserDao 中编写 模糊查询代码

    //通过QueryVO模糊查询
    @Test
    public void findUserByQueryVOLike(){
        QueryVO queryVO = new QueryVO();
        User user = new User();
        user.setUsername("%王%");
        queryVO.setUser(user);
        List<User> list = userDao.findUserByQueryVOLike1(queryVO);
        for (User u : list) {
            System.out.println(u);
        }
    }

5.3 resultType(输出类型)

5.3.1 数据库中的字段与对象中的属性不一致问题

       这里我们在原有代码基础上进行修改,分别修改User.java,UserDao.java等文件

       修改User.java文件

package com.cpz.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private int userId;// 主键ID
    private String userName;// 用户姓名
    private String userSex;// 性别
    private Date userBirthday;// 生日
    private String userAddress;// 地址

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userSex='" + userSex + '\'' +
                ", userBirthday=" + userBirthday +
                ", userAddress='" + userAddress + '\'' +
                '}';
    }
}

5.3.2 字段与属性名不一致问题解决(方案一)

添加、修改操作:我们选择修改OGNL表达式的参数值,让它们与实体类中的属性名一致

<!-- 查询所有 -->
<select id="findAll" resultType="com.itheima.domain.User">
    select * from user
</select>

<!--保存用户-->
<insert id="saveUser" parameterType="com.itheima.domain.User">
    <!-- 配置插入操作后,获取插入数据的id -->
    <selectKey keyProperty="userId" keyColumn="id" resultType="int" order="AFTER">
        select last_insert_id();
    </selectKey>
    insert into user(username,address,sex,birthday)values(#{userName},#{userAddress},#{userSex},#{userBirthday})

</insert>

查询操作:我们选择给每个字段起别名的方式,别名分别为实体类中的属性名

<!-- 查询所有 -->
<select id="findAll" resultType="com.itheima.domain.User">
    select id as userId,username as userName,address as userAddress,sex as userSex,birthday as userBirthday from user;
</select>

5.3.2 字段与属性名不一致问题解决(方案二)(推荐)(resultMap)

第一步:在 UserDao.xml 中的 <mapper> 下定义 <resultMap>

    <!--如果数据库的字段和实体类中的属性名称不一致,结果封装null,使用resultMap
        id :封装主键的映射
        result :封装普通字段的映射
            property="":实体中属性的名称
            column="":数据库中字段的名称
    -->
    <resultMap id="userMap" type="com.cpz.domain.User">
        <id property="userId" column="id"></id>
        <result property="userName" column="username"></result>
        <result property="userBirthday" column="birthday"></result>
        <result property="userSex" column="sex"></result>
        <result property="userAddress" column="address"></result>
    </resultMap>

第二步:修改 UserDao.xml 中的语句

         将语句中 resultType="com.cpz.domain.User" 修改为 resultMap="userMap",这里 userMap 指向 <resultMap> 中的 type

    <select id="findAll" resultMap="userMap">
        select * from user
    </select>

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值