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<T> 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<String, Object> map);
public void save3() {
//获取Mapper对象
SqlSession sqlSession = MyBatisUtil.getSqlSession();
ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
//测试开始
Map<String, Object> 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());
}
}
网友评论