spring和mybatis整合框架

来源:互联网 发布:购物群软件 编辑:程序博客网 时间:2024/05/23 20:18

Spring和MyBatis整合框架

Spring和MyBatis整合步骤

  1. 建立工程,加入Spring和MyBatis的有关Jar
  2. 建立开发目录结构,创建实体类(pojo)
  3. 创建数据访问接口(Dao)
  4. 创建数据访问接口的实现类
  5. 配置SQL映射语句文件
  6. 配置MyBatis应用配置文件
  7. 配置Spring应用配置文件
  • Mybatis的工作流程
  • Spring集成MyBatis
  • SpringMVC+MyBatis框架搭建

项目整合工程目录


项目工程中加入spring和mybatis的有关Jar 点击下载

创建实体类(pojo)

package cn.pojo;public class User {    private Integer id;    //用户编号    private String userCode;    //用户名    private String userName;    //用户密码    private String userPassword;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getUserCode() {        return userCode;    }    public void setUserCode(String userCode) {        this.userCode = userCode;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUserPassword() {        return userPassword;    }    public void setUserPassword(String userPassword) {        this.userPassword = userPassword;    }}

创建数据访问接口的实现类

package cn.dao;import java.util.List;import cn.pojo.User;public interface UserMapper {    //获取所有记录list集合    public List<User> getUserList();    //获取表中有所有记录条数    public int count();    //添加一条记录    public int add(User user);}

配置SQL映射语句文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="cn.dao.UserMapper">    <!-- 获取表中所有的记录 映射到User的属性中,返回一个list集合 -->    <select id="getUserList" resultType="User">        select * from user    </select>    <!-- 返回表中所有记录的条数 -->    <select id="count" resultType="int">        select count(*) from user    </select>    <!-- 根据user的属性添加一条记录到表中 -->    <select id="add" parameterType="User">        insert into        user(id,userCode,userName,userPassword)         values(#{id},#{userCode},#{userName},#{userPassword});    </select></mapper>

配置mybatis应用配置文件

<?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>    <!-- 在dao的mapper文件中 直接使用cn.pojo下的实体类名,将实体类名当做参数类型和返回值类型-->    <typeAliases>        <package name="cn.pojo"/>    </typeAliases>  </configuration>

配置spring应用配置文件

<?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:p="http://www.springframework.org/schema/p"    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">    <!-- properties文件读取配置 -->    <context:property-placeholder location="classpath:jdbc.properties" />    <!-- JNDI获取数据源(使用dbcp连接池) -->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close" scope="singleton">        <property name="driverClassName" value="${driverClassName}" />        <property name="url" value="${url}" />        <property name="username" value="${username}" />        <property name="password" value="${password}" />    </bean>    <!-- 事务管理 @Transaction/AOP -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- -->        <property name="dataSource" ref="dataSource"></property>    </bean>    <!-- 配置mybatis sqlSessionFactory 在 mybatis-spring.jar中 -->    <bean id="sqlSessionFactory"         class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="configLocation" value="classpath:mybatis-config.xml" />        <property name="mapperLocations" value="classpath:cn/dao/*.xml" />    </bean>    <!-- 配置sqlSessionTemplate -->    <bean id="sqlSessionTemplate"         class="org.mybatis.spring.SqlSessionTemplate">        <!-- spring 使用构造器进行注入 -->        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />    </bean>    <!-- 把sqlSessionTemplate注入到测试类中-->    <bean id="userDaoTest" class="cn.test.UserDaoTest">        <!-- 将资源ref:sqlSessionTemplate,使用set进行注入usetDaoTset 中的sqlSessionTemplate属性中 -->        <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>    </bean></beans>

创建junit测试类

package cn.test;import static org.junit.Assert.*;import java.util.List;import org.apache.log4j.Logger;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.dao.UserMapper;import cn.pojo.User;public class UserDaoTest {    //sqSession模板    private SqlSessionTemplate sqlSessionTemplate;    private UserDaoTest test;    //应用上下文    private ApplicationContext context;    //获取当前测试地logger实例    private Logger logger = Logger.getLogger(UserDaoTest.class);    @Test    public void getUserListTest() {        List<User> userlist = null;        //使用mapper.xml文件调用sql语句        userlist = test.sqlSessionTemplate                .selectList("cn.dao.UserMapper.getUserList");        //使用mapper接口映射到mapper.xml文件中        userlist = test.sqlSessionTemplate.getMapper(UserMapper.class).getUserList();    }    /**     * Before注解的方法在 Test前执行     */    @Before    public void init() {        //通过加载applicationContext-mybatis.xml获取上下文        context = new ClassPathXmlApplicationContext(                "applicationContext-mybatis.xml");        //通过上下文获取中applicationContext-mybatis中UserDaoTest bean的实例         test = (UserDaoTest) context.getBean("userDaoTest");    }    @Test    public void addTest() {        User user = new User();        user.setId(3);        user.setUserCode("T03");        user.setUserName("lv");        user.setUserPassword("123456");        int flag = test.sqlSessionTemplate.getMapper(UserMapper.class).add(user);        Assert.assertEquals(1, flag);    }    @Test    public void countTest() {        int count = test.sqlSessionTemplate.getMapper(UserMapper.class).count();        logger.debug("count : " + count);    }    public SqlSessionTemplate getSqlSessionTemplate() {        return sqlSessionTemplate;    }    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {        this.sqlSessionTemplate = sqlSessionTemplate;    }}

MapperFactoryBean整合方式

跟上面的整合差不多,只需要实现一个接口和一个实现类,再配置下spring应用配置。

在cn.service包下实现一个UserService接口

package cn.service;import java.util.List;import cn.pojo.User;public interface UserService {    // 获取所有记录list集合    public List<User> getUserList();    // 获取表中有所有记录条数    public int count();    // 添加一条记录    public int add(User user);}

在cn.service.impl包中实现一个UserServiceImpl实现类并实现UserService的接口

package cn.service.impl;import java.util.List;import cn.dao.UserMapper;import cn.pojo.User;import cn.service.UserService;public class UserServiceImpl implements UserService{    private UserMapper userMapper;    public UserMapper getUserMapper() {        return userMapper;    }    public void setUserMapper(UserMapper userMapper) {        this.userMapper = userMapper;    }    @Override    public List<User> getUserList() {        // TODO Auto-generated method stub        return userMapper.getUserList();    }    @Override    public int count() {        // TODO Auto-generated method stub        return userMapper.count();    }    @Override    public int add(User user) {        // TODO Auto-generated method stub        return userMapper.add(user);    }}

需要更改applicationContext-mybatis.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:p="http://www.springframework.org/schema/p"    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">    <!-- properties文件读取配置 -->    <context:property-placeholder location="classpath:jdbc.properties" />    <!-- JNDI获取数据源(使用dbcp连接池) -->    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"        destroy-method="close" scope="singleton">        <property name="driverClassName" value="${driverClassName}" />        <property name="url" value="${url}" />        <property name="username" value="${username}" />        <property name="password" value="${password}" />    </bean>    <!-- 事务管理 @Transaction/AOP -->    <bean id="transactionManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!-- -->        <property name="dataSource" ref="dataSource"></property>    </bean>    <!-- 配置mybatis sqlSessionFactory 在 mybatis-spring.jar中 -->    <bean id="sqlSessionFactory"         class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="configLocation" value="classpath:mybatis-config.xml" />    </bean>    <!-- 配置dao -->    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">        <property name="mapperInterface" value="cn.dao.UserMapper"/>        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>    </bean>    <!-- service配置 -->    <bean id="userService" class="cn.service.impl.UserServiceImpl">        <property name="userMapper" ref="userMapper"/>    </bean></beans>

使用Junit来测试

package cn.test;import static org.junit.Assert.*;import java.util.List;import org.apache.log4j.Logger;import org.junit.Before;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.pojo.User;import cn.service.UserService;public class UserServiceTest {    private ApplicationContext context;    private Logger logger = Logger.getLogger(UserServiceTest.class);    private UserService userService;    @Before    public void setUp(){        context = new ClassPathXmlApplicationContext("applicationContext-mybatis.xml");        userService = (UserService) context.getBean("userService");    }    @Test    public void getUserListTest() {        List<User> userlist = null;             userlist = userService.getUserList();        if(userlist!=null && userlist.size()>0){            for(User user : userlist){                logger.debug("username ------>  "+user.getUserName());            }        } else {            logger.debug("没有用户!");        }    }}