Mybatis----parameterType 配置参数

项目结构

在这里插入图片描述

parameterType参数概述

使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装 类.

注意事项

基本类型和 String 我们可以直接写类型名称,也可以使用包名.类名的方式,例如: java.lang.String。
实体类类型,目前我们只能使用全限定类名。
究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名, 而我们的是实体类并没有注册别名,所以必须写全限定类名。

以下这些都是支持的默认别名。

在这里插入图片描述

源码

TypeAliasRegistery.class 的源码。

在这里插入图片描述

Mybatis使用ognl表达式解析对象字段的值, #{}或者${}括号中的值为pojo属性名称.

OGNL表达式:
		Object	Graphic	 Navigation	 Language
      对象	   图			  导航				语言
      
    它是通过对象的取值方法来获取数据. 在写法上把get给省略了.
    比如: 我们获取用户的名称
      		类中的写法: user.getUsername();
					OGNL表达式写法: user.username
    Mybatis中为什么直接写username, 而不是用user.:
					因为在parameterType中已经提供了属性所属的类, 所以此时不需要写对象名

传递 pojo 包装对象

  1. 概述与需求

    开发中通过 pojo 传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查 询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
    Pojo 类中包含 pojo。
    需求:根据用户名查询用户信息,查询条件放到 QueryVo 的 user 属性中。
      
    注意: Pojo类  就是  JavaBean类
    
  2. 持久层接口方法

    		/**
         * 根据QueryVo中的条件查询用户
         * @param vo
         * @return
         */
        public List<User> findByVo(QueryVo vo);
    
  3. 实体类User

    package com.xiaoge.domain;
    
    import java.util.Date;
    
    /**
     * @Author: 潇哥
     * @DateTime: 2020/3/4 下午4:03
     * @Description: TODO
     */
    public class User {
    
        private Integer id;
        private String username;
        private String address;
        private String sex;
        private Date birthday;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "id=" + id +
                    ", username='" + username + '\'' +
                    ", address='" + address + '\'' +
                    ", sex='" + sex + '\'' +
                    ", birthday=" + birthday +
                    '}';
        }
    }
    
  4. 实体类QueryVo

    package com.xiaoge.domain;
    
    /**
     * @Author: 潇哥
     * @DateTime: 2020/3/6 下午3:49
     * @Description: TODO
     */
    public class QueryVo {
    
        private User user;
    
        public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    }
    

配置文件

  1. UserDao.xml

    <!--根据queryVo的条件查询用户-->
        <select id="findByVo" resultType="com.xiaoge.domain.User" parameterType="com.xiaoge.domain.QueryVo">
            select * from user where username like #{user.username}
        </select>
    

测试方法

  1. MybatisTest

    package com.xiaoge.test;
    
    import com.xiaoge.dao.UserDao;
    import com.xiaoge.domain.QueryVo;
    import com.xiaoge.domain.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.List;
    
    /**
     * @Author: 潇哥
     * @DateTime: 2020/3/4 下午4:22
     * @Description: 测试mybatis的crud操作
     */
    public class MybatisTest {
    
        private InputStream is;
        private SqlSession session;
        private UserDao userDao;
    
    
        /**
         * 初始化 获取代理对象
         */
        @Before // 用于在测试方法之前执行
        public void init() throws IOException {
            // 1. 加载配置文件
            is = Resources.getResourceAsStream("SqlMapConfig.xml");
    
            // 2. 获取SqlSessionFactory
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(is);
    
            // 3. 获取SqlSession对象
            session = factory.openSession();
    
            // 4. 获取代理对象
            userDao = session.getMapper(UserDao.class);
        }
    
        @After // 用与在测试方法之后执行
        public void destroy() throws IOException {
    
            // 1. 提交事务(提交事务以后才会映射进数据库, 不提交的话, 它会自动回滚)
            session.commit();
    
            // 2. 释放资源
            if (session != null) {
                session.close();
            }
    
            if (is != null) {
                is.close();
            }
    
        }
      
        /**
         * 测试使用QueryVo作为查询条件
         */
        @Test
        public void findByVoTest() {
            // 创建对象
            User user = new User();
    
            QueryVo vo = new QueryVo();
    
            // 给user的username赋值
            user.setUsername("%王%");
    
            // 把user度夏宁封装进QueryVo中
            vo.setUser(user);
    
            // 调用方法
            List<User> users = userDao.findByVo(vo);
    
            for (User u : users) {
                System.out.println(u);
            }
          
          	// 运行结果
            User{id=41, username='老王', address='北京', sex='男', birthday=Wed Feb 28 07:47:08 CST 2018}
            User{id=42, username='小二王', address='北京金燕龙', sex='女', birthday=Sat Mar 03 05:09:37 CST 2018}
            User{id=43, username='小二王', address='北京金燕龙', sex='女', birthday=Mon Mar 05 01:34:34 CST 2018}
            User{id=46, username='老王', address='北京', sex='男', birthday=Thu Mar 08 07:37:26 CST 2018}
            User{id=55, username='王五 last insertid', address='北京', sex='男', birthday=Fri Mar 06 15:17:43 CST 2020}
    
        }
    }
    
    
发布了323 篇原创文章 · 获赞 104 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/zsx1314lovezyf/article/details/104698938