【Spring+MyBatis+MySQL实战入门】三、MyBatis的4个基本配置介绍
2017-02-19 15:06
543 查看
本系列文章系本人原创,欢迎转载,转载请注明出处
在上一章中,我们介绍了要让程序能使用MyBatis来操作数据库,应该至少有4个最基本的需要写/配置的地方:Java Model,DAO,DAO和SQL的映射关系,以及MyBatis连接数据库的配置。我们还介绍了使用MyBatis Generator
来生成这4个配置中的前三个。在本章中,我们来逐一探讨这4个基本的配置。
可以看到,这个User对象就是一个很简单的POJO类,提供了一些属性和getter/setter方法,仅此而已。
结合User表的定义:
我们可以发现,User类就是User表对应的实体类。
细心的读者可能会发现,MyBatis Generator除了帮我们生成了User类,还生成了一个UserExample类:
如果我们不用MyBatis Generator创建实体类,而是自己写实体类的话,这个UserExample类并不是必须的。那么这个UserExample类究竟是做什么的呢?我们看一下这个类里面定义的成员变量和方法不难发现,这个类可以帮助我们实现更发杂的查询(此处的“查询”不一定是select,如 ‘delete * from user where …’中的where子句指定了一个筛选条件,从某种意义上也算是“查询”)。结合后面会讲到的Mapper以及Mapper和Sql的映射关系,我们能更好的理解UserExample类的作用。
注:因为Example相关内容不是必须的,如果不想让MyBatis Generator生成相关内容,可以参考这里。
可以看到以下几点:
UserMapper是一个接口
UserMapper这个接口中提供了常用的增删改查的功能
接口中部分方法用到了之前提到过的UserExample类,这就是为什么我们之前说UserExample可以帮助我们实现复杂的“查询”功能。
讲到这里,善于思考的读者们可能会有疑问:UserMapper仅仅是一个接口,必须要有接口的实现类才能真正的实现方法的调用,但是MyBatis Generator并没有生成相应的实现类。这是个很好的问题,其答案就是我们接下来要讲的DAO(Mapper)和Sql之间的映射关系。
如果我们不用任何框架的话,最直接也是最简单的写法就是:新建一个类,实现Mapper接口,然后在该类的各方法中,使用JDBC(或其他工具)来执行该方法对应的Sql语句。这是一个最朴素的实现方法,可以说几乎任何框架都是在这个实现方法上加以包装,或提取出对Sql的依赖,或是自动生成相应的Sql等等。
通过回答这个问题,我们不难发现,无论实现方法是什么,其根本要解决的是Java形式的Mapper接口中定义的各方法到对应的Sql语句之间的映射关系。MyBatis针对这一问题的解决方案是:将映射关系保存在xml文件中(当然也可以以注解的方式保存在Java文件中,两种方法各有利弊。作为入门教程,我们在此只讨论xml形式的解决方案)。这样,映射关系就有了。有了接口,有了映射关系,MyBatis就能为我们生成代理类了,即我们在Java中调用Mapper接口中的方法时,MyBatis就可以自动的执行该方法对应的Sql语句。
至此,我们可以这么回答上一节留下的“Mapper接口的实现在哪里”这个问题了:我们将Mapper接口中各方法对应要执行的Sql语句保存在xml文件中,由MyBatis负责在调用接口时去执行相应的Sql语句,即我们告诉MyBatis要执行什么,而怎么执行则由MyBatis负责,对其内部实现逻辑,在大多数情况下我们无需关心。
这个表示映射关系的xml文件内容比较长,这里就不贴出来演示了,读者可以在这里获得源码。针对这个xml文件的写法,不是在一篇文章中就可以完全介绍完的,好在这个xml文件是MyBatis Generator自动生成的,在我们的入门教程中,这个自动生成的xml文件已经足够用了,没有必要再做修改。如果读者有兴趣的话,可以参考中文版官方文档。
其中用到的配置配件mybatis-config.properties:
这个简单的xml配置文件配置了MyBatis是如何连接数据库的:
首先,
其次,environments元素制定了默认的environment是id为“development”的environment。这里详细介绍下,实际情况中,针对不同的环境(生产环境,开发环境,测试环境等),可能会有不同的数据库配置,在environments中,我们就可以定义不同的environment来对应各环境,并在environment元素下定义各数据库相关的配置,这样就可以方便我们将代码(包)部署到不同的环境中。
最后,mappers元素里面定义MyBatis会读取哪些xml文件中的Mapper和Sql的映射关系。
这只是一个最简单的配置文件的实现,该配置文件的详细实现不是在一篇文章中可以介绍的完的。有兴趣的读者可以参考中文版官方文档。
在上一章中,我们介绍了要让程序能使用MyBatis来操作数据库,应该至少有4个最基本的需要写/配置的地方:Java Model,DAO,DAO和SQL的映射关系,以及MyBatis连接数据库的配置。我们还介绍了使用MyBatis Generator
来生成这4个配置中的前三个。在本章中,我们来逐一探讨这4个基本的配置。
一、Java Model
我们先以MyBatis Generator为我们自动生成的User类作为例子来看一下:可以看到,这个User对象就是一个很简单的POJO类,提供了一些属性和getter/setter方法,仅此而已。
结合User表的定义:
我们可以发现,User类就是User表对应的实体类。
细心的读者可能会发现,MyBatis Generator除了帮我们生成了User类,还生成了一个UserExample类:
如果我们不用MyBatis Generator创建实体类,而是自己写实体类的话,这个UserExample类并不是必须的。那么这个UserExample类究竟是做什么的呢?我们看一下这个类里面定义的成员变量和方法不难发现,这个类可以帮助我们实现更发杂的查询(此处的“查询”不一定是select,如 ‘delete * from user where …’中的where子句指定了一个筛选条件,从某种意义上也算是“查询”)。结合后面会讲到的Mapper以及Mapper和Sql的映射关系,我们能更好的理解UserExample类的作用。
注:因为Example相关内容不是必须的,如果不想让MyBatis Generator生成相关内容,可以参考这里。
二、DAO (MyBatis中的Mapper)
常用的设计模式/框架中,经常会提到Data Access Object (DAO)的概念,它封装了具体与数据库(或其他数据存储机制)打交道的方法,使得上层Java代码即使对数据是如何存储的廖无所知也能方便的存取数据。MyBatis中的Mapper就可以理解为是一种DAO。我们仍以UserMapper举例:可以看到以下几点:
UserMapper是一个接口
UserMapper这个接口中提供了常用的增删改查的功能
接口中部分方法用到了之前提到过的UserExample类,这就是为什么我们之前说UserExample可以帮助我们实现复杂的“查询”功能。
讲到这里,善于思考的读者们可能会有疑问:UserMapper仅仅是一个接口,必须要有接口的实现类才能真正的实现方法的调用,但是MyBatis Generator并没有生成相应的实现类。这是个很好的问题,其答案就是我们接下来要讲的DAO(Mapper)和Sql之间的映射关系。
三、DAO(Mapper)和Sql之间的映射关系
在上一节中,我们留了一个问题:Mapper接口的实现在哪里?为了回答这个问题,我们来思考这样一个问题:Mapper接口的实现应该怎么写?如果我们不用任何框架的话,最直接也是最简单的写法就是:新建一个类,实现Mapper接口,然后在该类的各方法中,使用JDBC(或其他工具)来执行该方法对应的Sql语句。这是一个最朴素的实现方法,可以说几乎任何框架都是在这个实现方法上加以包装,或提取出对Sql的依赖,或是自动生成相应的Sql等等。
通过回答这个问题,我们不难发现,无论实现方法是什么,其根本要解决的是Java形式的Mapper接口中定义的各方法到对应的Sql语句之间的映射关系。MyBatis针对这一问题的解决方案是:将映射关系保存在xml文件中(当然也可以以注解的方式保存在Java文件中,两种方法各有利弊。作为入门教程,我们在此只讨论xml形式的解决方案)。这样,映射关系就有了。有了接口,有了映射关系,MyBatis就能为我们生成代理类了,即我们在Java中调用Mapper接口中的方法时,MyBatis就可以自动的执行该方法对应的Sql语句。
至此,我们可以这么回答上一节留下的“Mapper接口的实现在哪里”这个问题了:我们将Mapper接口中各方法对应要执行的Sql语句保存在xml文件中,由MyBatis负责在调用接口时去执行相应的Sql语句,即我们告诉MyBatis要执行什么,而怎么执行则由MyBatis负责,对其内部实现逻辑,在大多数情况下我们无需关心。
这个表示映射关系的xml文件内容比较长,这里就不贴出来演示了,读者可以在这里获得源码。针对这个xml文件的写法,不是在一篇文章中就可以完全介绍完的,好在这个xml文件是MyBatis Generator自动生成的,在我们的入门教程中,这个自动生成的xml文件已经足够用了,没有必要再做修改。如果读者有兴趣的话,可以参考中文版官方文档。
四、MyBatis连接数据库的配置
上述三个配置都是在连接好数据库之后,Java与MyBatis交互时需要的配置。这第四个配置则是MyBatis连接数据库的配置:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <properties resource="mybatis-config.properties" /> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="mapper/CartMapper.xml" /> <mapper resource="mapper/ProductMapper.xml" /> <mapper resource="mapper/UserMapper.xml" /> </mappers> </configuration>
其中用到的配置配件mybatis-config.properties:
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/smm username=root password=root
这个简单的xml配置文件配置了MyBatis是如何连接数据库的:
首先,
<properties resource="mybatis-config.properties" />定义了从mybatis-config.properties中读取属性。
其次,environments元素制定了默认的environment是id为“development”的environment。这里详细介绍下,实际情况中,针对不同的环境(生产环境,开发环境,测试环境等),可能会有不同的数据库配置,在environments中,我们就可以定义不同的environment来对应各环境,并在environment元素下定义各数据库相关的配置,这样就可以方便我们将代码(包)部署到不同的环境中。
最后,mappers元素里面定义MyBatis会读取哪些xml文件中的Mapper和Sql的映射关系。
这只是一个最简单的配置文件的实现,该配置文件的详细实现不是在一篇文章中可以介绍的完的。有兴趣的读者可以参考中文版官方文档。
相关文章推荐
- 【Spring+MyBatis+MySQL实战入门】二、MyBatis和MyBatis Generator的配置
- MyBatis入门基本的配置介绍
- Spring+SpringMVC+Mybatis 两种入门级基本配置及登录实例
- 【Spring+MyBatis+MySQL实战入门】一、MyBatis操作入门
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- mybatis学习 一、MyBatis简介与配置MyBatis+Spring+MySql
- 一、MyBatis简介与配置MyBatis+Spring+MySql
- 一、MyBatis简介与配置MyBatis+Spring+MySql
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql .
- 一、MyBatis简介与配置MyBatis+Spring+MySql
- [转]MyBatis详解 与配置MyBatis+Spring+MySql
- 介绍spring3的注解方式和基本配置
- 一、MyBatis简介与配置MyBatis+Spring+MySql
- spring的基本配置和bean高级特性的介绍
- MyBatis详解 与配置MyBatis+Spring+MySql
- MyBatis详解 与配置MyBatis+Spring+MySql 1
- MyBatis简介与配置MyBatis+Spring+MySql