10.1.2 编写配置文件
在Eclipse中,创建一个test1109e10的Web项目,将JAR包添加到项目的lib目录下,并发布到类路径下。如下图所示:
在项目的src目录下,分别创建db.properties文件、Spring的配置文件以及MyBatis的配置文件,如下图所示:
db.properties
applicationContext.xml
mybatis-config.xml
10.2 传统DAO方式的开发整合
1、实现持久层
在src目录下,创建一个com.itheima.po包,并在包中创建持久化类Customer,在Customer类中定义相关属性和方法后,如下图所示:
Customer.java
在com.itheima.po包中,创建映射文件CustomerMapper.xml,在该文件中编写根据id查询客户信息的映射文件,如下图所示:
CustomerMapper.xml
在MyBatis的配置文件mybatis-config.xml中,配置映射文件CustomerMapper.xml的位置,具体如下图所示:
2、实现Dao层
在src目录下,创建一个com.itheima.dao包,并在包中创建接口CustomerDao,在接口中编写一个通过id查询客户的方法findCustomerById(),如下图所示:
CustomerDao.java
在src目录下,创建一个com.itheima.impl包,并在包中创建CustomerDao接口的实现类CustomerDaoImpl,编辑后的如下图所示:
CustomerDaoImpl.java
在Spring的配置文件applicationContext.xml中,编写实例化CustomerDaoImpl的配置,代码如下图所示:
3、整合测试
在src目录下,创建一个com.itheima.test包,在包中创建测试类DaoTest,并在类中编写测试方法findCustomerByIdDaoTest(),如下图所示:
DaoTest()
在上述方法中,采用的是根据容器中Bean的id来获取指定Bean的方式。
另一种获取Bean的方式,即根据类的类型来获取Bean的实例,采用这种方式,只需将第17~18行代码替换成如下:
这样在获取Bean的实例时,就不需要在进行强制类型转换了。
使用JUnit4执行上述方法后,控制台的输出结果如下图所示:
可以看出,通过CustomerDao实例的findCustomerById()方法已经查询出了id为1的客户信息,这也就说明了MyBatis与Spring整合成功。
10.3 Mapper接口方式的开发整合
10.3.1 基于MapperFactoryBean的整合
在src目录下,创建一个com.itheima.mapper包,并在包中创建CustomerMapper接口以及对应的映射文件,编辑后如下图所示:
CustomerMapper.java
CustomerMapper.xml
在MyBatis的配置文件中,引入新的映射文件,代码如下所示:
在Spring的配置文件中,创建一个id为customerMapper的Bean,代码如下图所示:
在测试类DaoTest中,编写测试方法findCustomerByIdMapperTest(),具体如下图所示:
上述方法,通过Spring容器获取了CustomerMapper实例,并调用了实例中的findCustomerById()方法来查询id为1的客户信息。
使用JUnit4执行上述方法后,控制台的输出结果如下图所示:
从中可以看出,通过Mapper接口的方式,同样查询到了相应的客户信息。
10.4 测试事务
在CustomerMapper接口中,编写测试方法addCustomer(),代码如下图所示:
编写完接口中的方法后,在映射文件CustomerMapper.xm中编写执行插入操作的SQL配置,代码如下图所示:
在src目录下,创建一个com.itheima.service包,并在包中创建接口CustomerService,在接口中编写一个添加客户方法addCustomer(),文件如下图所示:
CustomerService.java
在src目录下,创建一个com.itheima.service.impl包,并在包中创建CustomerService接口的实现类CustomerServiceImpl,来实现接口中的方法,如下图所示:
CustomerServiceImpl.java
在Spring的配置文件中,编写开启注解的配置代码,代码如下图所示:
在com.itheima.test包中,创建测试类TransactionTest(),在测试类的main()方法中编写测试事务执行的代码,代码如下图所示:
TransactionTest.java
在上述文件中,首先获取了CustomerService的实例,然后创建了Customer对象,并向对象中添加属性值,最后调用了实例的addCustomer()方法执行添加客户操作。
在运行测试方法之前,先来查看一下数据库中已有的数据,如下图所示:
从上图可以看到,此时数据表中只有4条数据。执行测试类中的main()方法后,控制台的输出结果如下图所示:
从上图可以看到,程序已经执行了插入操作,并在执行到错误代码时抛出了异常信息。再次查询t_customer表,其表中的数据如下图所示:
从上图可以看到,新添加的数据已经存储到了t_customer表中,这说明项目中的事务管理没有起作用。
此时将@Transactional前面的注释删除:
再次执行测试类中的main()方法后,虽然Eclipse的控制台也会抛出异常信息,但是此时t_customer表中依然只有4条数据,如下图所示:
这也就说明项目中的事务配是正确的。