MyBatis之测试添加功能
1.
首先Mybatis为我们提供了一个操作数据库的会话对象叫Sqlsession,所以我们就需要先获取sqlsession对象:
//加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取sqlSessionFactoryBuilder(是我们提供sqlSession的一个工厂对象的一个构建对象) SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取sqlSessionFactory(获取sqlSession工厂对象) SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取sqlSession(获取Mybatis为我们提供一个操作数据库的会话对象) SqlSession sqlSession = sqlSessionFactory.openSession();
补充:
- SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的会话)
- SqlSessionFactory:是“生产”SqlSession的“工厂”
- 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象
2.
然后通过SqlSession来实现我们当前Mybatis中的功能,再访问一个sql语句 去执行sql语句来获得一个结果。再者Mybatis是面向接口编程,我们调用mapper接口中的方法,它就会自动的匹配一个sql语句来执行,所以我们接下来获取mapper接口的对象(一个接口我们想创建对象就需要实现类,但之前我们并没有实现类)
传进去的参数是类型的一个class对象,然后这个类型的泛型是T,而这个方法的返回值是我们当前的T对象,即当我们传进去一个类型的class对象后,它会帮助我们获取这个类型的实例化对象。
最后总结一下流程:
每当我们去调用mapper接口中的方法,
他就根据我们的mapper接口找到映射文件,
然后根据当前调用的方法找到我们的sql语句
增删改受影响的是行数。当sql语句执行成功后,但在数据库中没有添加数据。
这里是(transactionManager)事务管理器,type=JDBC表示用u最原始的JDBC方式来管理事务,所以说现在事务的提交或者回滚都需要手动处理,即造成在数据库中没有添加数据。
补充:
优化1
优化2
通过日志功能来监测当前实现功能他所执行的sql。
增加修改数据功能
先在mapper接口写好方法,然后通过方法去映射文件,再编写好sql语句。
特殊的查询功能
首先有返回值(一个对象或者一个对象的集合)
补充:
1. 查询的标签select必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
- resultType:自动映射,用于属性名和表中字段名一致的情况
- resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况(自动的把我们当前查询的结果的字段名来作为属性名进行赋值,如果能匹配就赋值不能就不赋值)
2. 当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值