Mapper配置的几种方法:
现在我们用的就是这种方法 在后续中要是建议xml多了的话 很不方便。
必须在同一个包下而且名字要相同才可以找到(接口名和xml名字)
但是这种方法后期接口多了也很容易出问题
第三种方法只要学一个mapper包下的所有mapper都能找到,十分便利 以后就用这个
parameterType(输入类型)
传递简单类型
参考第一天内容。
使用#{}占位符,或者${}进行sql拼接。
传递pojo对象
参考第一天的内容。
Mybatis使用ognl表达式解析对象字段的值,#{}或者${}括号中的值为pojo属性名称。
传递pojo包装对象
开发中通过可以使用pojo传递查询条件。
查询条件可能是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如查询用户信息的时候,将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
包装对象:Pojo类中的一个属性是另外一个pojo。
需求:根据用户名模糊查询用户信息,查询条件放到QueryVo的user属性中。
先在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(); }