MyBatis idea 第一个程序

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

首先把我的项目结构给大家看一看。

idea导入module变成了main和test_intellij idea

1、搭建环境

1.1 Maven 环境配置

Maven,IDEA本身也会自带。但是,个人喜欢用自己的Maven,因为自带的导包实在是太慢了。

我们去Maven 官网下载地址下载。在下载列表中,我们找到zip的安装包,(如果是其他的,请看情况安装别的包)。

idea导入module变成了main和test_intellij idea_02


下载好后,解压到特定的文件目录中去。我们找到bin目录,复制Maven目录的路径(等会配置环境需要使用)。

idea导入module变成了main和test_mybatis_03


我们在此电脑中右键,找到属性,再找到高级环境设置,在找到的窗口中点击打开环境变量,将进入下面的窗口。

idea导入module变成了main和test_mysql_04


首先,我们新建MAVEN_HOME,将我们刚才复制粘贴的路径添加进去。

idea导入module变成了main和test_xml文件_05


然后,我们找到Path目录,点击进去。点击新建,将Maven路径下的bin目录的路径复制粘贴进去。

idea导入module变成了main和test_intellij idea_06


这样就算配置好了Maven的环境。我们进入cmd界面,输入Mvn -v,cmd将会显示Maven的版本。

idea导入module变成了main和test_mysql_07


但是,这远远不够,我们还需要更改Maven的settings.xml文件。因为Maven会自动导包到C盘的一个本地仓库中去,占用C盘空间,我们可以对本地仓库进行修改,因为Maven的下载的镜像是国外的,下载速度可能不尽人意,我们可以换成阿里云的镜像。我们找到Maven的安装位置,点击路径下的conf文件夹,其下面就能找到settings.xml文件。

idea导入module变成了main和test_mybatis_08


点击打开他,找到被注释的本地仓库标签。在他下面编写你自己的本地仓库路径(前提需要你自己先创建一个本地仓库)。

idea导入module变成了main和test_mysql_09


然后,再找到被注释的镜像,在他们的下面编写你准备的镜像地址。

idea导入module变成了main和test_intellij idea_10


从此,Maven环境配置成功。但是,在创建项目之前,我们需要更改IDEA 中的Maven配置。

首先,我们打开IDEA,找到主界面下的Configure,点击找到setting,点击打开。

idea导入module变成了main和test_数据库_11

idea导入module变成了main和test_数据库_12


打开后,我们找到Build, Exection, Deployment->Build Tools->Maven,将划线的三个地方都更改成本地的。第一个是本地Maven的文件路径,第二个是本地Maven的settings.xml路径,第三个是Maven的本地仓库。将这三个都更改成自己的配置。

idea导入module变成了main和test_intellij idea_13


这下,Maven配置就算完成了。

1.2 搭建数据库

接下来,我们就要搭建数据库了。MyBatis就是为了方便我们对数据库进行操作,所以我们需要建一个MySQL数据库。(本人比较喜欢在cmd中搭建数据库。)

首先,在cmd中输入mysql -u root -p,回车输入密码,进入MySQL的界面。

idea导入module变成了main和test_intellij idea_14


我们创建数据库MyBatis,使用我们新建的MyBatis数据库,创建我们第一个数据表User。

idea导入module变成了main和test_intellij idea_15


idea导入module变成了main和test_intellij idea_16


然后,就是插入数据。我们这次直接一次性插入四条数据。

idea导入module变成了main和test_mybatis_17


这样,我们的数据库以及数据表就创建成功了。

idea导入module变成了main和test_mysql_18

1.3 创建新的Maven项目

首先,我们点击IDEA的Create New Project。点击Maven,进入这个界面后,点击Next。

idea导入module变成了main和test_mysql_19


给新项目设定路径。(我设定的com.newProject,可以按个人习惯设定)

idea导入module变成了main和test_xml文件_20


创建后,新项目会是一个下图的结构。

idea导入module变成了main和test_mysql_21

2、导入MyBatis

2.1 编写配置

在新建项目后,我们将src文件夹删除,然后再建一个新的Module(新的子项目)。结果如下图。

这样做的好处是 在父项目中导入了依赖以后可以不在子项目中导入依赖了。

idea导入module变成了main和test_xml文件_22


然后,编写原来项目中pom.xml文件。然后开始写入依赖。其中第一个依赖是MySQL驱动依赖,第二个是MyBatis依赖,第三个是junit依赖。

idea导入module变成了main和test_xml文件_23


但是,第一次操作还是小心点,同样在新的子项目路径下的pom.xml文件中导入依赖。

idea导入module变成了main和test_xml文件_24


做完以上操作后,开始编写MySQL配置文件,我们找到子项目中的src文件夹下的resources文件夹,在该文件夹下新建一个mybatis-config.xml文件。

idea导入module变成了main和test_mysql_25


注意:如果是第一次用idea写xml文件,可能会找不到这个文件。我们需要去setting中去添加这种文件。
打开setting后,找到Editor,点击File and Code Templates。在右边的Files中找到加号。点击他,会出现添加文件的界面。

idea导入module变成了main和test_数据库_26


左边的name是你添加此种文件后在你右键创建文件后出现的名字,右边的Extension是你想要添加这种文件的类型。我是已经添加了,最下面的XML File就是我添加的结果。

idea导入module变成了main和test_mybatis_27


如果创建好后,我们就去编写配置文件了。而官方文档中有配置文件的官方描写。

idea导入module变成了main和test_intellij idea_28


然后,把驱动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文件后再讲。

idea导入module变成了main和test_mybatis_29

2.2 创建实体类和Mapper文件

我们已经配置好了MySQL文件后,就需要开始写实体类了。我们刚才已经在MySQL中的数据库中创建了一个User表了。我们创建的时候就对着这个表创建就行了。MySQL中的int类型对应着Java中的int类型或Integer类型,而varchar类型则对应着String类型。

idea导入module变成了main和test_intellij idea_30


我们先创建一个pojo文件夹,(Plain Ordinary Java Object 简单的Java对象),在这个文件夹下创建User实体类。创建结果如下。

idea导入module变成了main和test_数据库_31


idea导入module变成了main和test_数据库_32


实体类写好了,按着原来我们写JDBC的方法,现在我们应该是要写DAO类文件了。可是,MyBatis中的DAO类是接口,我们只需要写Mapper文件,来实现他里面的方法。首先,我们先创建一个Dao文件夹,来存放DAO类接口和Mapper文件。接着在分别创建DAO类接口和Mapper文件。

idea导入module变成了main和test_数据库_33


UserDao接口中,只需要写需要被Mapper文件实现的方法即可。第一个程序,我们就写一个查询表中全部元素好了。

idea导入module变成了main和test_数据库_34


写完Dao文件后,在相同的文件夹下创建一个对应的Mapper文件,我们就命名为UserMapper.xml好了。

怎么写呢?我们依然可以在官方文档中的探究已映射的SQL语句下面能找到一个官方的书写Mapper文件的格式。

idea导入module变成了main和test_mysql_35


上面的文件我们几乎可以照搬。但是,依然还是需要修改一些东西。

命名空间namespace,我们需要设置为我们的对应的Dap类接口(或者应该叫Mapper接口)的java文件夹下面的全路径,按照我们现在配置的话(你没有偷偷修改的话),应该是com.newProject.dao.UserDao。将这个路径写入namespace中去。

而select中的id是Dao类接口中我们设定的方法,我们需要将他修改成我们自己的方法,我设置的是getUserList,用它将selectBlog替换了。

而resultType则是我们需要得到的返回值类型。这里我们需要设置为我们实体类在java文件夹下的全路径。路径应该是com.newProject.pojo.User。

配置完后的Mapper文件如下图。

idea导入module变成了main和test_intellij idea_36


这些操作完成后,我们的实体类和Mapper文件都已经创建完了。

注意:我们刚才是不是在配置MyBatis-config.xml文件中遇到了Mapper文件的配置。这时,我们就需要在这个配置文件中绑定Mapper.xml文件在java文件夹下的全路径。

idea导入module变成了main和test_mysql_37

2.3 编写工具类

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。

但是,每一次连接数据库,都要编写SqlSessionFactory实在是有点太麻烦了。所以,我们需要为创建SqlSessionFactory创建一个工具类,然后在每次需要创建SqlSession的时候调用这个工具类就好了,省的我们多次重写代码。

首先,我们先创建一个utils文件夹,在其下创建一个MyBatisUtil文件。

idea导入module变成了main和test_intellij idea_38


然后,开始编写我们需要的工具类,代码如下。

idea导入module变成了main和test_数据库_39

至此,上面我们的准备工作都完成了,就差测试代码了。

3、编写测试代码

仔细观察我们的Maven项目的话,我们可以看到一个和main文件夹并列的test文件夹。那里一般是我们存放测试代码的地方。

idea导入module变成了main和test_mybatis_40


我们在test文件夹下所属的java文件夹创建一个与我们创建的实体类同名的文件夹(即com.newProject.Dao文件夹),这样做更为规范。然后,在我们新建的文件夹下创建一个UserTest文件。创建结果如下。

idea导入module变成了main和test_数据库_41

创建好后,我们开始编写测试代码。
首先,我们需要创建一个SqlSession,相当于是原来JDBC中的collection。
接着,我们创建一个Mapper对象,相当于原来JDBC中的DAO。
然后,创建一个元素全为User的List列表,同时使用mapper对象的查询方法。接着,用foreach语句遍历我们创建的列表。
最后,我们将SqlSession对象关闭。

最后的代码如下。

idea导入module变成了main和test_xml文件_42


测试代码就这样写完了。

4、测试

我们终于到这一步了。我们点击test方法旁边的绿色箭头,方法就会开始运行了。结果将在下面的终端中显示。

运行结果如下。

idea导入module变成了main和test_数据库_43


这下,我们的第一个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>