基于spring的mybatis封装

本文详细介绍了如何在Spring中封装Mybatis,包括配置mybatis的configuration.xml,整合Spring的spring-mvc-mybatis.xml,定义IDao接口,实现MybatisBaseDao,创建BaseService和DefaultBaseService来简化Service层的代码。通过这样的封装,可以更方便地管理和使用Mybatis。

在Spring中封装Mybatis

1、简要说明

在封装中使用到的文件如下:

文件名作用
configuration.xmlMybatis的配置文件,引入实体别名等
spring-mvc-mybatis.xml引入Mybatis,为Mybatis配置数据源,并引入Mybatis的封装类
IDao.javaMybatis的封装的基础接口
MyBatisBaseDao.javaIDao的实现类
BaseService.javaService层的基本接口,用于封装Dao层
DefaultBaseService.java实现BaseService,引入Dao,隐藏Dao层

返回目录

2、mybatis配置文件configuration.xml

configuration.xml用于配置mybatis,包括实体别名的配置和map 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>
        <typeAlias type="com.zhey.test.entity.Student" alias="student"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/zhey/test/entity/student.xml"/>
    </mappers>
</configuration>

返回目录

3、Spring配置文件spring-mvc-mybatis.xml

spring-mvc-mybatis.xml用于将mybatis引入spring管理中。包括数据源的设置和mybatis基础类的引入。代码如下:

<?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:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:util="http://www.springframework.org/schema/util"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
           http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"
       default-autowire="byName" default-lazy-init="false">

    <!-- mybatis配置-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"></ref>
        </property>
        <property name="configLocation" value="classpath:configuration.xml"/>
    </bean>
    <bean id="mybatisBaseDao" class="org.myframework.db.mybatis.dao.MybatisBaseDao">
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

</beans>

返回目录

4、IDao.java

IDao引入一些公共函数接口,代码如下:

package org.myframework.db.mybatis.dao;

import org.springframework.dao.DataAccessException;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by zhey on 17-3-2.
 */
public interface IDao {
    int delete(String sqlid) throws DataAccessException;

    int delete(String sqlid, Object args) throws DataAccessException;

    Object insert(String sqlid) throws DataAccessException;

    int insert(String sqlid, Object args) throws DataAccessException;

    int update(String sqlid) throws DataAccessException;

    int update(String sqlid, Object args) throws DataAccessException;

//    int updateWithAuthority(String sqlid, ParamDTO args) throws DataAccessException;

    Object queryForObject(String sqlid) throws DataAccessException;

    Object queryForObject(String sqlid, Object args) throws DataAccessException;

    List queryForList(String sqlid) throws DataAccessException;

    List queryForList(String sqlid, Object args) throws DataAccessException;

    List queryForPage(String sqlid, Object args, int var3, int var4);


    Connection getConnection() throws SQLException;

//    SqlMapClient getSqlMapClient();

//    SqlMapClientTemplate getSqlMapClientTemplate();

//    int saveOldFieldData(ParamDTO sqlid, BaseDomain args, String var3, String var4);

    int insertBatch(String sqlid, List<?> args) throws DataAccessException;

//    int updateWithAuthority(String sqlid, IPo args);

//    List<?> queryForPage(String sqlid, String args, IPo var3);

//    IPage queryForPageWithCount(String sqlid, String args, Object var3, IPo var4);

//    void callPrc(String sqlid, IPo args) throws PrcException;
}

返回目录

5、MybatisBaseDao.java

MybatisBaseDao实现IDao接口,代码如下:

package org.myframework.db.mybatis.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Component;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * Created by zhey on 17-3-2.
 */
public class MybatisBaseDao implements IDao {
    private SqlSessionFactory sqlSessionFactory;

    public SqlSessionFactory getSqlSessionFactory() {
        return sqlSessionFactory;
    }

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public <T> List<T> queryForList1(String query) {
        SqlSession session = sqlSessionFactory.openSession();
        List<T> objs = session.selectList("student.getall");
        return objs;
    }

    @Override
    public int delete(String sqlid) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.delete(sqlid);
    }

    @Override
    public int delete(String query, Object obj) {
        SqlSession session = sqlSessionFactory.openSession();
        return session.delete(query, obj);
    }

    @Override
    public Object insert(String sqlid) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.insert(sqlid);
    }

    @Override
    public int insert(String sqlid, Object args) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.insert(sqlid, args);
    }

    @Override
    public int update(String sqlid) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.update(sqlid);
    }

    @Override
    public int update(String sqlid, Object args) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.update(sqlid, args);
    }

    @Override
    public Object queryForObject(String sqlid) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.selectOne(sqlid);
    }

    @Override
    public Object queryForObject(String sqlid, Object args) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.selectOne(sqlid, args);
    }

    @Override
    public List queryForList(String sqlid) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.selectList(sqlid);
    }

    @Override
    public List queryForList(String sqlid, Object args) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return session.selectList(sqlid, args);
    }

    @Override
    public List queryForPage(String sqlid, Object args, int var3, int var4) {
        return null;
    }

    @Override
    public Connection getConnection() throws SQLException {
        return sqlSessionFactory.openSession().getConnection();
    }

    @Override
    public int insertBatch(String sqlid, List<?> args) throws DataAccessException {
        SqlSession session = sqlSessionFactory.openSession();
        return 0;
    }

    //    @Override
    public int add(String query, Object obj) {
        SqlSession session = sqlSessionFactory.openSession();
        return session.insert(query, obj);
    }
}

返回目录

6、BaseService.java

BaseService是对IDao的封装,引入IDao。函数封装不完整,可根据IDao的函数添加,代码如下:

package org.myframework.db.mybatis.service;

import java.util.List;

/**
 * Created by zhey on 17-3-2.
 */
public interface BaseService {
    <T> List<T> queryForList(String query);
}

返回目录

7、DefaultBaseService.java

DefaultBaseService是对BaseServcie的实现,引入BaseService和DefaultBaseService的想法是在Service中继承DefaultBaseService并调用DefaultBaseService中的函数,就可以不用在显示的调用Dao层的函数,代码如下:

package org.myframework.db.mybatis.service;

import org.myframework.db.mybatis.dao.IDao;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

/**
 * Created by zhey on 17-3-2.
 */
public class BaseServiceImpl implements BaseService {
    @Autowired
    public IDao dao;

    public <T> List<T> queryForList(String query) {
        List<T> objs = dao.queryForList(query);
        return objs;
    }
}

最后吐槽一下:CSDN markdown的目录真心不好用
返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值