Mappers映射器和mybatis第二天

Mapper配置的几种方法:

 现在我们用的就是这种方法 在后续中要是建议xml多了的话 很不方便。

 必须在同一个包下而且名字要相同才可以找到(接口名和xml名字)

 但是这种方法后期接口多了也很容易出问题

 

 第三种方法只要学一个mapper包下的所有mapper都能找到,十分便利 以后就用这个

 parameterType(输入类型)

 传递简单类型

参考第一天内容。

使用#{}占位符,或者${}进行sql拼接。

 传递pojo对象

参考第一天的内容。

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

 传递pojo包装对象

开发中通过可以使用pojo传递查询条件。

查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。

包装对象:Pojo类中的一个属性是另外一个pojo

需求:根据用户名模糊查询用户信息,查询条件放到QueryVouser属性中。

先在pojo里创建一个

QueryVo

类,里面包装的User对象

 然后点出来get,set,toString

然后到mapperxml文件里写

 他的输入类型(parameterType)因为我们已经给他配过别名所以可以直接写Queryvo,然后返回值(resultType)类型 要写user 因为这里是list<user>集合,但是我们不能这么写,所以要写他的泛型就是user

 这里面的user是和你QueryVo里面的属性名一样的

 是随着QueryVo里的改动而改动的,然后后面的username是user对象里的属性名。

然后在去写mapper接口方法

 在到测试类:

@Test(单元测试 老师在群发了架包)
    public void get8() throws IOException {
        // 1.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取UserMapper的动态代理对象(实现类对象)
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        QueryVo queryVo=new QueryVo();
        User user=new User();
        user.setUsername("王");
        queryVo.setUser(user);
        List<User> list=userMapper.getQueryVo(queryVo);
        System.out.println(list);
        // 7. 释放资源
        sqlSession.close();

    }

解析:就是先创建一个user对象在创建一个QueryVo对象。然后在user对象里写出条件,在把条件放进QueryVo对象里。

这里没办法一次性传多个参数,我们只能把参数们都放到一个类里,例如:之前做商场条件查询 就是把所有的查询条件放到了一个封装类里

 resultType(输出类型)

我们之前都是输出的一个对象(user)或者集合的泛型(user)当然是在取别名后

 

 因为不需要参数所有不写parameterType,直接写返回值类型 int 毕竟是人数

在mapper接口里写

然后到测试类:

@Test
    public void get9() throws IOException {
        // 1.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取UserMapper的动态代理对象(实现类对象)
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        int row=userMapper.getcount();
        System.out.println(row);
        // 7. 释放资源
        sqlSession.close();

    }

 先创建一个封装类叫orders

 然后吧gei,set,toString点出来

因为这里是新表,所以要创建一堆新的mapperxml和mapper接口 名字必须一致

然后xml里

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.oracle.mapper.OrdersMapper">
    <resultMap type="orders" id="ordermap">
        <id property="id" column="id"/>
        <result property="userId" column="user_id"/>
        <result property="number" column="number"/>
        <result property="createtime" column="createtime"/>
        <result property="note" column="note"/>
    </resultMap>
    <select id="getorders" resultMap="ordermap">
    
    select * from orders
    </select>


</mapper>

接口里写方法:

 测试类:

@Test
    public void get1() throws IOException {
        // 1.创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        // 2. 加载SqlMapConfig.xml配置文件
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 3. 创建SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        // 4. 创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取ordersMapper的动态代理对象(实现类对象)
        OrdersMapper ordersMapper=sqlSession.getMapper(OrdersMapper.class);
        List<Orders> list=ordersMapper.getorders();
        System.out.println(list);
        // 7. 释放资源
        sqlSession.close();

    }

猜你喜欢

转载自www.cnblogs.com/www1842564021/p/12605110.html
今日推荐