01、准备数据表
在MySQL中创建数据库mybatis,并在mybatis数据库中创建表tb_team。语句如下:
02、创建项目并引入相关依赖
创建一个Maven项目,并引入4个相关jar包,分别是MyBatis 3.5.9核心包,用于单元测试的JUnit 4.10包,用于MyBatis输出日志信息的SLF4J 和Logback 1.2.10包,MySQL 8.0.28 Java驱动程序包。修改pom.xml文件,加入如下依赖:
03、创建日志配置文件
为方便程序调试,开发者经常需要在控制台输出SQL语句。这就需要配置MyBatis的输出日志。本书采用SLF4J和Logback构建日志系统。可以在src/main/resources目录下创建一个logback.xml的文件,作为Logback的配置文件,如文件1所示。
【文件1】logback.xml
在文件1中的第10行设置了输出日志的包为com.example.mybatis.mapper。即执行该包中的代码时,MyBatis会在控制台输出日志信息。根据调试需要,可以扩大或缩小(可以指定日志输入范围为某个包中的某个类)输出日志的范围。
04、创建数据库连接配置文件
数据库连接的参数可以用properties文件实现动态配置。即由核心配置文件读取properties文件中的配置参数值,进而完成数据库连接设置。在src/main/resources目录下创建db.properties文件,内容如文件2所示。
【文件2】db.properties
05、创建MyBatis配置文件
MyBatis的配置文件主要用于项目的环境配置,如数据库连接的相关配置等。配置文件可任意命名,本书将其命名为mybatis-config.xml。在src/main/resources下创建配置文件,内容如文件3所示。
【文件3】mybatis-config.xml
其中,第2~4行为配置文件的约束信息,第6行用于加载数据库连接配置文件,第9行用于配置事务管理器,第10行使用JDBC DataSource接口构建数据库连接池,第11~14行用于配置数据库连接池的核心参数。
06、创建持久化类
持久化类用于封装应用程序要操作的数据。注意持久化类的属性类型应与数据库表中对应的字段类型相匹配。持久化类的属性名字可以与数据库表中字段的名字一致(非必须)。在src/main/java目录下创建com.example.mybatis.entity包,并在包中创建Team类,代码如文件4所示。
【文件4】Team.java
07、创建映射文件
在src/main/java目录下创建一个包com.example.mybatis.mapper,并创建一个名为TeamMapper.xml的映射文件。该文件主要用于配置SQL语句和Java对象之间的映射,使得被SQL语句查询出来的结果能够被映射为Java对象。一个项目可以有多个映射文件,每个实体类都可以有与其对应的映射文件。映射文件通常使用“持久化类的名字+Mapper”的方式命名。TeamMapper.xml的内容如文件5所示。
【文件5】TeamMapper.xml
其中,第2~4行是映射文件的约束信息,第5行是根元素的声明,属性namespace用于标识映射文件。一般来讲,要定义一个DAO接口,并用namespace来指定这个DAO接口的全限定名。本例中没有定义相关接口,此处的namespace属性只是用包名来填充。第6~9行的 元素用于编写SQL查询语句。其中 的id属性是该SQL语句的唯一标识,Java代码通过id值找到对应的SQL语句。resultType属性声明SQL查询语句的返回结果会被映射为Team类型。第8行为要执行的SQL语句,从提升程序性能角度考虑,不建议写 “select from…” 这种结构,而是将“”替换为要查找的字段列表。
08、修改配置文件
映射文件需要与配置文件关联,这样才可以在读取配置文件时加载映射文件。修改文件3,在第17行和第18行之间加入对映射文件的引用,代码如下:
09、编写测试类
最后,在src/test/java目录下创建com.example.demo.test包,并在该包中创建一个测试类TeamDemoTest,测试代码如文件6所示。
【文件6】TeamDemoTest.java
其中,第29~30行找到映射文件的元素的子元素,并执行中的SQL语句。具体过程为:首先通过元素的namespace属性找到对应的,在通过的子元素的id属性找到对应的子元素,并执行其中的SQL语句。由于要执行的是查询语句,并且该查询语句可能返回一组数据,因此调用的是SqlSession接口的selectList()方法。执行此测试代码,会在控制台输出当前tb_team表中的全部记录,如图3所示。
■ 图3 输出当前tb_team表中的全部记录