MyBatis idea 第一个程序
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
首先把我的项目结构给大家看一看。
1、搭建环境
1.1 Maven 环境配置
Maven,IDEA本身也会自带。但是,个人喜欢用自己的Maven,因为自带的导包实在是太慢了。
我们去Maven 官网下载地址下载。在下载列表中,我们找到zip的安装包,(如果是其他的,请看情况安装别的包)。
下载好后,解压到特定的文件目录中去。我们找到bin目录,复制Maven目录的路径(等会配置环境需要使用)。
我们在此电脑中右键,找到属性,再找到高级环境设置,在找到的窗口中点击打开环境变量,将进入下面的窗口。
首先,我们新建MAVEN_HOME,将我们刚才复制粘贴的路径添加进去。
然后,我们找到Path目录,点击进去。点击新建,将Maven路径下的bin目录的路径复制粘贴进去。
这样就算配置好了Maven的环境。我们进入cmd界面,输入Mvn -v,cmd将会显示Maven的版本。
但是,这远远不够,我们还需要更改Maven的settings.xml文件。因为Maven会自动导包到C盘的一个本地仓库中去,占用C盘空间,我们可以对本地仓库进行修改,因为Maven的下载的镜像是国外的,下载速度可能不尽人意,我们可以换成阿里云的镜像。我们找到Maven的安装位置,点击路径下的conf文件夹,其下面就能找到settings.xml文件。
点击打开他,找到被注释的本地仓库标签。在他下面编写你自己的本地仓库路径(前提需要你自己先创建一个本地仓库)。
然后,再找到被注释的镜像,在他们的下面编写你准备的镜像地址。
从此,Maven环境配置成功。但是,在创建项目之前,我们需要更改IDEA 中的Maven配置。
首先,我们打开IDEA,找到主界面下的Configure,点击找到setting,点击打开。
打开后,我们找到Build, Exection, Deployment->Build Tools->Maven,将划线的三个地方都更改成本地的。第一个是本地Maven的文件路径,第二个是本地Maven的settings.xml路径,第三个是Maven的本地仓库。将这三个都更改成自己的配置。
这下,Maven配置就算完成了。
1.2 搭建数据库
接下来,我们就要搭建数据库了。MyBatis就是为了方便我们对数据库进行操作,所以我们需要建一个MySQL数据库。(本人比较喜欢在cmd中搭建数据库。)
首先,在cmd中输入mysql -u root -p,回车输入密码,进入MySQL的界面。
我们创建数据库MyBatis,使用我们新建的MyBatis数据库,创建我们第一个数据表User。
然后,就是插入数据。我们这次直接一次性插入四条数据。
这样,我们的数据库以及数据表就创建成功了。
1.3 创建新的Maven项目
首先,我们点击IDEA的Create New Project。点击Maven,进入这个界面后,点击Next。
给新项目设定路径。(我设定的com.newProject,可以按个人习惯设定)
创建后,新项目会是一个下图的结构。
2、导入MyBatis
2.1 编写配置
在新建项目后,我们将src文件夹删除,然后再建一个新的Module(新的子项目)。结果如下图。
这样做的好处是 在父项目中导入了依赖以后可以不在子项目中导入依赖了。
然后,编写原来项目中pom.xml文件。然后开始写入依赖。其中第一个依赖是MySQL驱动依赖,第二个是MyBatis依赖,第三个是junit依赖。
但是,第一次操作还是小心点,同样在新的子项目路径下的pom.xml文件中导入依赖。
做完以上操作后,开始编写MySQL配置文件,我们找到子项目中的src文件夹下的resources文件夹,在该文件夹下新建一个mybatis-config.xml文件。
注意:如果是第一次用idea写xml文件,可能会找不到这个文件。我们需要去setting中去添加这种文件。
打开setting后,找到Editor,点击File and Code Templates。在右边的Files中找到加号。点击他,会出现添加文件的界面。
左边的name是你添加此种文件后在你右键创建文件后出现的名字,右边的Extension是你想要添加这种文件的类型。我是已经添加了,最下面的XML File就是我添加的结果。
如果创建好后,我们就去编写配置文件了。而官方文档中有配置文件的官方描写。
然后,把驱动driver改成本机MySQL的驱动,如果是8以上的版本,驱动就是com.mysql.cj.jdbc.Driver,而5以下的版本,驱动就是com.mysql.jdbc.Driver。
url也是同理,改成jdbc:mysql://localhost:3306/你的数据库。但是,MySQL 8以后的版本都需要添加时差就是serverTimezone = UTC。
username就是 root,而password则是你给root设置的密码。
下面的Mapper.xml文件需要等会创建了mapper.xml文件后再讲。
2.2 创建实体类和Mapper文件
我们已经配置好了MySQL文件后,就需要开始写实体类了。我们刚才已经在MySQL中的数据库中创建了一个User表了。我们创建的时候就对着这个表创建就行了。MySQL中的int类型对应着Java中的int类型或Integer类型,而varchar类型则对应着String类型。
我们先创建一个pojo文件夹,(Plain Ordinary Java Object 简单的Java对象),在这个文件夹下创建User实体类。创建结果如下。
实体类写好了,按着原来我们写JDBC的方法,现在我们应该是要写DAO类文件了。可是,MyBatis中的DAO类是接口,我们只需要写Mapper文件,来实现他里面的方法。首先,我们先创建一个Dao文件夹,来存放DAO类接口和Mapper文件。接着在分别创建DAO类接口和Mapper文件。
UserDao接口中,只需要写需要被Mapper文件实现的方法即可。第一个程序,我们就写一个查询表中全部元素好了。
写完Dao文件后,在相同的文件夹下创建一个对应的Mapper文件,我们就命名为UserMapper.xml好了。
怎么写呢?我们依然可以在官方文档中的探究已映射的SQL语句下面能找到一个官方的书写Mapper文件的格式。
上面的文件我们几乎可以照搬。但是,依然还是需要修改一些东西。
命名空间namespace,我们需要设置为我们的对应的Dap类接口(或者应该叫Mapper接口)的java文件夹下面的全路径,按照我们现在配置的话(你没有偷偷修改的话),应该是com.newProject.dao.UserDao。将这个路径写入namespace中去。
而select中的id是Dao类接口中我们设定的方法,我们需要将他修改成我们自己的方法,我设置的是getUserList,用它将selectBlog替换了。
而resultType则是我们需要得到的返回值类型。这里我们需要设置为我们实体类在java文件夹下的全路径。路径应该是com.newProject.pojo.User。
配置完后的Mapper文件如下图。
这些操作完成后,我们的实体类和Mapper文件都已经创建完了。
注意:我们刚才是不是在配置MyBatis-config.xml文件中遇到了Mapper文件的配置。这时,我们就需要在这个配置文件中绑定Mapper.xml文件在java文件夹下的全路径。
2.3 编写工具类
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
但是,每一次连接数据库,都要编写SqlSessionFactory实在是有点太麻烦了。所以,我们需要为创建SqlSessionFactory创建一个工具类,然后在每次需要创建SqlSession的时候调用这个工具类就好了,省的我们多次重写代码。
首先,我们先创建一个utils文件夹,在其下创建一个MyBatisUtil文件。
然后,开始编写我们需要的工具类,代码如下。
至此,上面我们的准备工作都完成了,就差测试代码了。
3、编写测试代码
仔细观察我们的Maven项目的话,我们可以看到一个和main文件夹并列的test文件夹。那里一般是我们存放测试代码的地方。
我们在test文件夹下所属的java文件夹创建一个与我们创建的实体类同名的文件夹(即com.newProject.Dao文件夹),这样做更为规范。然后,在我们新建的文件夹下创建一个UserTest文件。创建结果如下。
创建好后,我们开始编写测试代码。
首先,我们需要创建一个SqlSession,相当于是原来JDBC中的collection。
接着,我们创建一个Mapper对象,相当于原来JDBC中的DAO。
然后,创建一个元素全为User的List列表,同时使用mapper对象的查询方法。接着,用foreach语句遍历我们创建的列表。
最后,我们将SqlSession对象关闭。
最后的代码如下。
测试代码就这样写完了。
4、测试
我们终于到这一步了。我们点击test方法旁边的绿色箭头,方法就会开始运行了。结果将在下面的终端中显示。
运行结果如下。
这下,我们的第一个MyBatis项目就完成了。
5、项目中可能会出现的错误
注意:如果按照上面的方法运行下来有错误的话,记得来看一看这里。我在第一次创建时,也遇到了超多错误。你也来看看有没有你遇到的错误。
5.1 Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource org/mybatis/example/BlogMapper.xml
这个错误是未正确绑定Mapper文件的错误。
解决方法: 记得将MySQL的配置文件中的Mapper标签中的resource改成src.java文件夹下的Mapper文件的全路径。
<mappers>
<mapper resource="com/newProject/dao/UserMapper.xml"/>
</mappers>
5.2 com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException
这可能是一些配置文件的编码问题。
解决方法: 在pom.xml文件中添加
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
5.3 打包src/main/java和src/main/resources可能会出现的问题
我们刚才在创建Mapper文件时,是将它和Dao.java放在一起的,都是在src/main/java文件夹下,同时我们也把MySQL的配置放在了src/main/resources文件夹下。但是,Maven可能不会将他们一起打包,所以我们需要修改pom.xml文件,使得他们能被打包进jar包或war包中,否则,Maven不会将他们打包。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>