MyBatis在IDEA中的第一个程序

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>

猜你喜欢

转载自blog.csdn.net/qq_44116023/article/details/108788562