MyBatis的种种
2011年12月18日 21:49
最近项目上要用MyBatis做持久层,说实话,还真没听过这么个著名的东西。
去官网(http://www.mybatis.org/)下个jar包和documentation,大体看来和hibernate的应用没差太多。
(说白了就是蛋疼得把Java代码里该写的东西写到XML里去,然后再用Java从XML读到Java里。)
不过不用在DAO层写N多的SQL确实比较省事,毕竟拿String去拼SQL是很不纯粹的事,我这人就是反感不纯粹的东西。
MyBatis的配置和hibernat还是比较相近的。有个全局的配置xml,用来配置驱动,url,name和password。
然后对于每个实体类都会有个映射xml,对于这个实体类对应表的操作SQL也就是写在这个xml里的。如果表之间关系很复杂,那么这个xml也将变成噩梦。与这个xml想配对的(当然可以不用,使用其他方式代替,不过相对麻烦)
interface(假设叫TestMapper),定义了对表的基本操作,而这些操作应该是在映射xml里已经实现的SQL。
大概配置的结构就这么多,然后就是jar包里提供的Resources把配置xml文件读进来:
Reader reader = Resources.getResourceAsReader(xml_path);
然后用读进来的东西去生成个SqlSessionFactory(用来生成Session的(和JDBC的connection有的一比))
SqlSessionFactory _sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
上述的东西可以写成一个工具类,方便调用。
然后可以写DAO层了。
用工具生成个SqlSessionFactory _factory = SqlSessionFactoryUtil.getSqlSessionFactory();
然后在增删改查方法里,用_factory去生成Session
_session = _factory.openSession();
这个Mapper就是和那个实体类映射文件配对的东西,用它的实例去掉它定义的方法。
TestMapper mapper = _session.getMapper(TestMapper.class);
_test = mapper.selectTest(id);
_session.commit();
之后记得commit,他喵的竟然不会自己commit,还得我insert完了之后性喜若狂,结果表里什么都没有。
直接openSession()打开的session没有自动commit,不过可以打开自动commit功能。
只是顺手写个过程,顺便用来抱怨一下,最好别做为学习参考,还是看看官方的documentation。