在实际的项目开发中,我们需要将MyBatis和Spring进行整合,通过Spring 的依赖注入以减少代码的耦合。本文以MyEclipse和MySQL数据库为开发环境简单的讲解一下MyBatis和Spring的整合过程。
首先我们创建一个Java Project名称任意,然后导入所需要包:
spring3.1.1
mybatis-3.1.1.jar
mysql-connector-java-5.1.2-beta-bin.jar
mybatis-spring-1.1.1.jar
第一步:创建数据库表
在MySQL中执行如下sql命令创建表User:
CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(20) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后插入测试数据
INSERT INTO user VALUES ('1', 'admin', 'admin');
第二步:创建model
创建一个model包并在其下创建一个User.java文件。
package model; public class User { private int id; private String username; private String password; public User(){ } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String toString(){ return "User [id = "+ id +" , username = "+ username +"]" + " , password = "+ password; } }
第三步:创建DAO接口(这里我们对增删改查进行简单的实现)
创建一个包dao,并在其下创建一个UserMapper.java文件作为DAO接口。
package dao; import model.User; public interface UserMapper { public User selectUser(User user); public void insertUser(User user); public void updateUser(User user); public void deleteUser(int userId); }
第四步:实现DAO接口
在dao包下创建一个UserMapper.xml文件作为上一步创建的DAO接口的实现。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="dao.UserMapper"> <select id="selectUser" parameterType="model.User" resultType="model.User"> SELECT * FROM user WHERE username=#{username} AND password=#{password} </select> <insert id="insertUser" parameterType="model.User" flushCache="true"> INSERT INTO user (id,username,password) VALUES (#{id},#{username},#{password}) </insert> <update id="updateUser" parameterType="model.User"> UPDATE user SET password=#{password} WHERE id=#{id} </update> <delete id="deleteUser" parameterType="int"> DELETE FROM user WHERE id=#{userId} </delete> </mapper>
这里对这个xml文件作几点说明:
1.namespace要指定为接口的类路径。
2.select,insert,update,delete的id必须要和UserMapper.java接口中的方法同名。
第五步:创建MyBatis的配置文件
在src下创建一个mybatis-config.xml文件,由于我们的数据源部分是要交给Spring管理,所以此处的配置文件只包含xml映射文件的位置信息。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <mappers> <mapper resource="dao/UserMapper.xml"/> </mappers> </configuration>
第六步:在Spring中配置数据源
在src下创建一个ApplicationContext.xml文件作为Spring的配置文件,这里我们使用Spring自带的Jdbc数据源,读者可以根据实际需要替换为其他数据源。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="https://www.springframework.org/schema/beans" xmlns:tx="https://www.springframework.org/schema/tx" xmlns:p="https://www.springframework.org/schema/p" xmlns:aop="https://www.springframework.org/schema/aop" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd https://www.springframework.org/schema/tx https://www.springframework.org/schema/tx/spring-tx-3.0.xsd https://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!—配置数据源--> <bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.gjt.mm.mysql.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>123456</value> </property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="jdbcDataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml"></property> </bean> <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="dao.UserMapper"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> </beans>
关于Spring配置的说明:
Spring没有内置的提供对MyBatis的支持,配置sqlSessionFactory和userMapper所需要的class是来自于mybatis-spring-1.1.1.jar。
第七步:测试
在src下创建一个test包,并在其下创建一个test.java文件
package test; import model.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import dao.UserMapper; public class test { public static void main(String[] args) { ApplicationContext ctx=null; ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); UserMapper userMapper=(UserMapper)ctx.getBean("userMapper"); User u=new User(); u.setUsername("admin"); u.setPassword("admin"); System.out.println(userMapper.selectUser(u)); //插入(去掉下面的注释进行调试) /* User insertUser=new User(); insertUser.setUsername("testUsername"); insertUser.setPassword("testPassword"); userMapper.insertUser(insertUser); */ //更新(去掉下面的注释进行调试) /* u.setId(1); u.setPassword("updatePassword"); userMapper.updateUser(u); */ //删除(去掉下面的注释进行调试) /* userMapper.deleteUser(9); */ } }