查询客户
在实际开发中,查询操作通常都会涉及单条数据的精确查询,以及多条数据的模糊查询。那么使用MyBatis框架是如何进行这两种查询的呢?接下来,本小节将讲解下如何使用MyBatis框架根据客户编号查询客户信息,以及根据客户名模糊查询客户信息。
1.根据客户编号查询客户信息
根据客户编号查询客户信息主要是通过查询客户表中的主键(这里表示唯一的客户编号)来实现的,其具体实现步骤如下。
(1)在MySQL数据库中,创建一个名为mybatis的数据库,在此数据库中创建一个t_customer表,同时预先插入几条数据。此操作所执行的SQL语句如下所示。
完成上述操作后,数据库t_customer表中的数据如图6-5所示。
(2)在Eclipse中,创建一个名为chapter06的Web项目,将MyBatis的核心JAR包、lib目录中的依赖JAR包,以及MySQL数据库的驱动JAR包一同添加到项目的lib目录下,并发布到类路径中。添加后的lib目录如图6-6所示。
(3)在src目录下,创建一个com.itheima.po包,在该包下创建持久化类Customer,并在类中声明id、username、jobs和phone属性,及其对应的getter/setter方法,如文件6-2所示。
从上述代码可以看出,持久化类Customer与普通的JavaBean并没有什么区别,只是其属性字段与数据库中的表字段相对应。实际上,Customer就是一个POJO(普通Java对象), MyBatis就是采用POJO作为持久化类来完成对数据库操作的。
(4)在src目录下,创建一个com.itheima.mapper包,并在包中创建映射文件CustomerMapper. xml,编辑后如文件6-3所示。
在文件6-3中,第2~3行是MyBatis的约束配置,第5~11行是需要程序员编写的映射信息。其中,元素是配置文件的根元素,它包含一个namespace属性,该属性为这个指定了唯一的命名空间,通常会设置成“包名+SQL映射文件名”的形式。子元素中的信息是用于执行查询操作的配置,其id属性是元素在映射文件中的唯一标识;parameterType属性用于指定传入参数的类型,这里表示传递给执行SQL的是一个Integer类型的参数;resultType属性用于指定返回结果的类型,这里表示返回的数据是Customer类型。在定义的查询SQL语句中,“#{}”用于表示一个占位符,相当于“? ”,而“#{id}”表示该占位符待接收参数的名称为id。
(5)在src目录下,创建MyBatis的核心配置文件mybatis-config.xml,编辑后如文件6-4所示。
在文件6-3中,第2~3行是MyBatis的配置文件的约束信息,下面元素中的内容就是开发人员需要编写的配置信息。这里按照子元素的功能不同,将配置分为了两个步骤:第1步配置了环境,第2步配置了Mapper的位置。关于上述代码中各个元素的详细配置信息将在下一章进行详细讲解,此案例中读者只需要按照上述代码配置即可。
(6)在src目录下,创建一个com.itheima.test包,在该包下创建测试类MybatisTest,并在类中编写测试方法findCustomerByIdTest(),如文件6-5所示。
在文件6-5的findCustomerByIdTest()方法中,首先通过输入流读取了配置文件,然后根据配置文件构建了SqlSessionFactory对象。接下来通过SqlSessionFactory对象又创建了SqlSession对象,并通过SqlSession对象的selectOne()方法执行查询操作。selectOne()方法的第1个参数表示映射SQL的标识字符串,它由CustomerMapper.xml中元素的namespace属性值+元素的id属性值组成;第2个参数表示查询所需要的参数,这里查询的是客户表中id为1的客户。为了查看查询结果,这里使用了输出语句输出查询结果信息。最后,程序执行完毕时,关闭了SqlSession。
使用JUnit4测试执行findCustomerByIdTest()方法后,控制台的输出结果如图6-9所示。
从图6-9可以看出,使用MyBatis框架已经成功查询出了id为1的客户信息。