本系列文章系本人原创,欢迎转载,转载请注明出处
一、MyBatis配置的基本介绍
在第一章中,我们快速的建立了一个Java通过MyBatis操作数据库的简单的项目(源码)。在建立这个项目的过程中,除了测试类,我们并没有写一行Java代码,而把所有精力都放在了做配置上。那么,为了使MyBatis能正常工作,我们需要做哪些配置呢?
问题的答案很简单,我们不需要查阅任何资料,就可以自己“揣摩”出来:
a. Java Model: 数据库是存储数据的,这些数据在Java中的展现形式是我们需要定义的。最简单的例子,User(id, name, contact_info)表,在Java中就对应成一个User类,该类有id,name和contactInfo成员变量。
b. Java的DAO接口/类:MyBatis是为了Java能方便的操作数据库,所以,我们必须写或配置出相应的DAO接口/类来方便Java调用。
c. SQL语句和DAO接口中方法的对应关系:DAO提供了让Java能操作数据库的接口(Java方法),那么这些接口实际上执行的就是SQL语句。我们需要将这种Java方法到SQL语句的映射关系配置好,比如说:DAO中有个insert(User user)方法,它应该对应到一个形如 “insert into User (id, name, contact_info) values (?,?,?)”的SQL语句,这种映射关系是我们需要记录的。
d. MyBatis连接数据库使用的配置:这个就很显而易见了,我们需要连接数据库的配置(connectionUrl, userId, password等),才能让MyBatis正确的链接数据库。
可以说,我们在使用MyBatis的过程中,这4项是最基本的配置,也是不可或缺的。大家可以先对这4项有个认识,我们会在接下来的章节中着重介绍这4项。下面我们先看一下能大大简化我们对这4项做配置的工具:MyBatis Generator。
二、MyBatis Generator的使用
如果我们有100张表,对每个表又有增删改查及其他操作,是不是我们就要手动建100个Java Model,100个DAO,每个DAO里面再写诸多方法呢?答案是否定的,MyBatis Generator大大简化了我们的操作。回顾在第一章中MyBatis Generator的配置文件,我们着重看下面这几项:
<javaModelGenerator targetPackage="com.example.model" targetProject="smm/src/main/java" />
<sqlMapGenerator targetPackage="mapper" targetProject="smm/src/main/resources" />
<javaClientGenerator targetPackage="com.example.mapper" targetProject="smm/src/main/java" type="XMLMAPPER" />
<table schema="smm" tableName="user">
<generatedKey column="id" sqlStatement="MySql" identity="true" />
</table>
<table schema="smm" tableName="cart">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
<table schema="smm" tableName="product">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
我们要用MyBatis Generator生成上述4项配置中的3项:Java Model,DAO以及DAO到Sql的映射关系。
- 我们先看Java Model:
<javaModelGenerator targetPackage="com.example.model" targetProject="smm/src/main/java" />
<!--其他的配置此处省略-->
<table schema="smm" tableName="user">
<generatedKey column="id" sqlStatement="MySql" identity="true" />
</table>
<table schema="smm" tableName="cart">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
<table schema="smm" tableName="product">
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
在javaModelGenerator中,我们指定了生成Java Model的存放位置是smm/src/main/java目录,com.example.model包下。结合下面的几个table元素,我们会生成User表,Product表和Cart表对应的Java Model。而table元素下的generatedKey元素则告诉MyBatis Generator该table的 “id”列是MySql自动生成的,并且是该表的主键,这样当我们将一个新建的User对象插入到数据库中后,Java中就能获得到MySql自动生成的id。
- 接下来是sqlMapGenerator
<sqlMapGenerator targetPackage="mapper" targetProject="smm/src/main/resources" />
sqlMapGenerator指定了DAO到Sql语句的映射关系保存在smm/src/main/resources目录,mapper包下(实际上因为是resources目录,而“包”是Java的概念,所以也即保存在smm/src/main/resources/mapper目录下)。
- 最后我们看javaClientGenerator
<javaClientGenerator targetPackage="com.example.mapper" targetProject="smm/src/main/java" type="XMLMAPPER" />
javaClientGenerator指定了DAO(MyBatis中叫Mapper)的生成位置:smm/src/main/java目录,com.example.mapper包下,并且是XMLMAPPER的形式。XMLMAPPER代表Mapper会生成为接口,并且接口中方法的实现会依赖于sqlMapperGenerator指定生成的配置文件中。
有兴趣的读者可以尝试将type属性的值替换为“ANNOTATEDMAPPER”,并看看效果(接口方法所对应的sql语句以注解的形式存在在Java文件中)。
至此,我们简单的介绍了MyBatis Generator是用做什么的,它生成的文件是用做什么的,以及MyBatis Generator是如何工作的。如果读者有兴趣对MyBatis Generator做深入了解的话,可以参阅MyBatis Generator的官方文档。