6.2 应用案例:SpringMVC、Mybatis Mapper接口编程
我们仍然使用第五章的数据库,并使用第五章Mybits反向工程生成的代码,我们编写程序结构如下图:

在这里,包entity和包mapper中的代码均为Mybits反向工程自动生成的代码。其中包含使用Mybatis框架访问数据库的代码。
我们编写三个配置文件applicationContext.xml、db.properties和mybatis-config.xml,其中db.properties文件内容如下:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=UTF-8 jdbc.username=root jdbc.password=123456 jdbc.maxTotal=30 jdbc.maxIdle=10 jdbc.initialSize=5 |
在这里我们仍然设定数据库名称为school,登录名称为root,密码为123456.
mybatis-config.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 别名定义 --> <typeAliases> <package name="entity" /> </typeAliases> </configuration> |
applicationContext.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd"> <!-- 读取db.properties --> <context:property-placeholder location="classpath:db.properties"/> <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"> <!--数据库驱动 --> <property name="driverClassName" value="${jdbc.driver}" /> <!--连接数据库的url --> <property name="url" value="${jdbc.url}" /> <!--连接数据库的用户名 --> <property name="username" value="${jdbc.username}" /> <!--连接数据库的密码 --> <property name="password" value="${jdbc.password}" /> <!--最大连接数 --> <property name="maxTotal" value="${jdbc.maxTotal}" /> <!--最大空闲连接 --> <property name="maxIdle" value="${jdbc.maxIdle}" /> <!--初始化连接数 --> <property name="initialSize" value="${jdbc.initialSize}" /> </bean> <!-- 事务管理器,依赖于数据源 --> <bean id="transactionManager" class= "org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager"/> <!-- 配置MyBatis工厂SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--注入数据源 --> <property name="dataSource" ref="dataSource" /> <!--指定核MyBatis心配置文件位置 --> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean>
<!-- 配置mapper扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="mapper"/> </bean> <bean id="StudentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- 指定要映射的mapper接口的全限定名 --> <property name="mapperInterface" value="mapper.StudentMapper"></property> <!-- 指定sqlSessionFactory --> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean>
<!-- 扫描Service --> <context:component-scan base-package="entity" /> </beans> |
在applicationContext.xml配置文件中我们导入了db.properties和mybatis-config.xml两个文件,并且解析其中内容连接数据库和整合mybatis框架。
在applicationContext.xml配置文件中我们还配置了mapper扫描器并设定其扫描位置是mapper包。
我们还配置了一个名为StudentMapper的bean,该bean对应的接口我们设定为mapper.StudentMapper。
接下来我们编写业务类StudentBiz.java如下:
package biz; import biz.ApplicationContexter; import entity.Student; import entity.StudentExample; import mapper.StudentMapper; public class StudentBiz { public void addStudent(Student student){ StudentMapper ud=(StudentMapper)ApplicationContexter.getApplicationContext().getBean("StudentMapper"); ud.insert(student); } public void delStudent(int id){ StudentMapper ud=(StudentMapper)ApplicationContexter.getApplicationContext().getBean("StudentMapper"); ud.deleteByPrimaryKey(id); } public void delStudentByName(String name){ StudentMapper ud=(StudentMapper)ApplicationContexter.getApplicationContext().getBean("StudentMapper"); StudentExample se=new StudentExample(); se.createCriteria().andStunameLike(name); ud.deleteByExample(se); } } |
在业务类StudentBiz.java中我们设计了三个方法,一个是添加学生,两个是删除学生信息,当然我们也可以设计更多的操作学生信息的方法。
在业务类中我们用到了一个名为ApplicationContexter.java的类,该类有一个静态方法getApplicationContext,用来获取一个单例模式的spring容器,其代码如下:
package biz; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ApplicationContexter { static ApplicationContext appc=null; public static ApplicationContext getApplicationContext(){ if(appc==null)appc=new ClassPathXmlApplicationContext("applicationContext.xml"); return appc; } } |
我们编写测试类如下:
import biz.StudentBiz; import entity.Student; public class Testadd { public static void main(String[] args) { //Student s=new Student(); //s.setStuname("bob"); //new StudentBiz().addStudent(s); new StudentBiz().delStudentByName("%a%"); } } |

