Mybatis基础整合(一)

public class ProductMapperTest {
    @Test
    public void getProductById() throws IOException {
        /**
         * 获取SqlSession:
         *      1.获取mybatis-config.xml的资源流对象(inputStream)
         *      2.创建SqlSessionFactoryBuilder对象
         *      3.调用build方法,传入第二步获取到的流对象,得到SqlSessionFactory对象
         *      4.通过Factory对象调用openSession方法,最后得到SqlSession对象
         */
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /**
         * 使用SqlSession对象的两种方法:
         *      1.使用传统编程:旧版本的方法
         *      sqlSession.selectOne(String s,Object o):
         *          s:映射文件中的namespace和id的组合,语法:namespace.id;
         *          o:要传递的值或对象
         *      2.使用面向接口编程:
         *      sqlSession.getMapper(Class aClass):
         *          aClass: Mapper接口的字节码对象
         *          注意:使用接口编程时,映射文件要符合以下内容
         *              namespace = Mapper接口的全限定类名
         *              id = Mapper接口中对应的方法名
         *
         *      目前主要使用面向接口式的编程:它具有面向对象的特点,可读性、可操作性高
         *      通过代理生成一个对象,此对象具有接口的实现方法,可以直接调用。
         */
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        Product product =productMapper.getProductById(10L);
        System.out.println(product);
    }


    //========测试多种传递参数的方式=========
    /** 传递多个参数方法:
     *  Map传递:
     *      参数不做任何包装直接交给后台,Mybatis会将我们的参数封装成Map集合
     *          key = [param1,param2,param3...]/[arg0,arg1,arg2...]
     *          save2pro(String productName, String brand, String supplier);
     *      如果我们想要自定义key的值时,可以使用@Param("自定义的名字")跟在 接口 方法的形参前面:
     *          save2pro(@Param("productName") String productName, String brand, String supplier);
     *      我们也可以先把参数自己封装在Map,在把Map交给Mybatis
     *
     *  使用Bean对象来传递参数:
     *      在映射文件里,获取参数时可以直接使用类的属性名来获取
     */
    @Test
    //方法:Boolean save2(String productName, String brand, String supplier);
    public void save2() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        productMapper.save2("save2", "Mybrand", "Mysupplier");

    }

    @Test
    //方法:Boolean save2pro(@Param("productName")String productName, String brand, String supplier);
    public void save2pro() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        productMapper.save2pro("save2pro", "Mybrand", "Mysupplier");
    }

    @Test
    //方法:Boolean save3(Map map);
    public void save3() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Map map = new HashMap<>();
        map.put("productName","save3");
        map.put("brand","Mybrand");
        map.put("supplier","Mysupplier");
        productMapper.save3(map);
    }

    @Test
    //方法:Boolean save4(Product p);
    public void save4() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Product product = new Product();
        product.setProductName("save4");
        product.setBrand("Mybrand");
        product.setSupplier("Mysupplier");
        productMapper.save4(product);
    }

    //=====测试save、delete、update方法=====
    @Test
    public void save() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Product product = new Product();
        product.setId(100L);
        product.setProductName("save");
        productMapper.save(product);
    }

    @Test
    public void delete() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        productMapper.delete(100L);
    }

    @Test
    public void update() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Product product = new Product();
        product.setId(100L);
        product.setProductName("update");
        productMapper.update(product);
    }
    
    //============获取从数据库返回值或对象============
    /**
     *  获取返回的值或对象:Mybatis会将结果封装成为Map对象
     *      当返回一个对象的时候
     *          key为列名,value为列名对应的值
     *      当返回多个对象的时候
     *          默认情况下,key为自动生成,即1,2,3... value为对象
     *          可以通过注解@MapKey("id")自定义Map集合的key,如列名为id的值成为key
     */
    @Test
    public void getProductByIdResultMap() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Map map = productMapper.getProductByIdResultMap(38L);
        System.out.println(map.keySet());
        System.out.println(map.values());
    }

    @Test
    public void getProductByIdResultMapMulti() {
        //获取Mapper对象
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
        //测试开始
        Map map = productMapper.getProductByIdResultMapMulti("罗技");
        System.out.println(map.keySet());
        System.out.println(map.values());
    }
}

你可能感兴趣的:(Mybatis基础整合(一))