J2EE中那些忘却的~

MyBatis的种种

regding posted @ 2011年12月18日 21:49 in Java with tags MyBatis Database JDBC Java , 1941 阅读

最近项目上要用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。

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter