美文网首页
ERP如何集成MyBatis

ERP如何集成MyBatis

作者: 金恒老王 | 来源:发表于2018-06-08 16:38 被阅读70次

ERP如何集成MyBatis

一、下载jar包等相关文件

主要有三个jar包:

  • mybatis-3.2.7.jar
  • db2jcc_license_cu.jar
  • db2jcc.jar

下载地址:

注意:此处链接点开如果显示页面不存在,则需要手动复制链接到浏览器地址栏里打开

https://pan.baidu.com/s/1kZ4wdbOW4yLV9BDCKsOlMw

下载完之后将下载的zip包中的mybatis-3.2.7.jar,db2jcc_license_cu.jar,db2jcc.jar文件拷贝出来放到ERP环境中的WEB-INF/lib下,然后右击jar包,Build Path->Add to Build Path,然后再复制一份mybatis-3.2.7.jar到tomcat下的tomcat6\tomcatCommon\lib_35下,自此jar包导入工作完毕。

注意:mybatis-3.2.7.jar中的源码为了适应ERP被本人修改过,切勿从其他地方下载jar包替换,否则必定会导致程序崩溃

二、应用mybatis

主要分为三个步骤

1. 编写mybatis的核心配置xml

xml文件名称由子系统别开头命名,比如wfjxMybatisConfig.xml,

wf代表在线审核系统,jx代表的是文件类型是xml,MybatisConfig是文件名称含义。文件放置目录如图下:

工程结构.png

目录为wf/files/wfjxMybatisConfig.xml

wfjxMybatisConfig.xml文件内容为:

<?xml version="1.0" encoding="GBK" ?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
"http://mybatis.org/dtd/mybatis-3-config.dtd">  
  
<configuration>  
    <properties>
        <!-- 设置数据库类型 -->
        <property name="dialect" value="DB2"/>
    </properties>
    
    <settings>
        <!-- 设置mybatis查询数据的时候null值也返回key-value -->
        <setting name="callSettersOnNulls" value="true"/>
    </settings>
    
    <typeAliases>
        <!-- 实体类所在package路径,这里根据各自系统而定,不要照抄 -->
        <package name="com.icsc.xx.entity"/>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="JNDI">
                <property name="data_source" value="java:comp/env/jdbc/dsnjsteel"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper url="wf/files/mappers/*Mapper.xml" />
    </mappers>
</configuration>

注意:需要将mappers下的mapper标签的url值改为各自系统的路径,以及实体类所在package路径需要改成自己系统的实体类路径,然后将上述代码直接复制使用。

2. 如何获取SqlSession

这里我编写了一个工具类来获取SqlSession,因为ERP下每个子系统的配置文件路径名不同,所以需要将工具类中的路径修改下既可应用到自己系统中,代码如下:

//注意,这里拷贝过去的时候需要将包路径修改下!
package com.icsc.wf.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class wfjcSqlSessionUtil {
    public static SqlSessionFactory getSqlSessionFactory() {
        try {
            String classPath = wfjcSqlSessionUtil.class.getProtectionDomain().getCodeSource().getLocation().getPath();
            if (classPath.contains("WEB-INF")) {
                classPath = classPath.substring(1, classPath.indexOf("WEB-INF"));
                System.setProperty("rootPath", classPath);
            }
            classPath = "file:///" + classPath + "wf/files/wfjxMybatisConfig.xml";
            InputStream inputStream = Resources.getUrlAsStream(classPath);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            return sqlSessionFactory;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

注意:此处代码,需要将类名与加载的mybatisConfig配置的文件的文件名与路径改成自己系统的

3. DAO层编写

注意:此处DAO类编写与以往ERP的开发很不一样。

示例代码如下:

package com.icsc.wf.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.icsc.wf.entity.wfjcGroupEntity;
import com.icsc.wf.entity.wfjcPageEntity;
import com.icsc.wf.util.wfjcSqlSessionUtil;

/**
 * @desc 分组管理
 * @author WangWeiWei
 * @date 2018年5月16日 上午9:13:26
 */
public class wfjcGroupDao {
    SqlSessionFactory sqlSessionFactory = wfjcSqlSessionUtil.getSqlSessionFactory();

    public List<Map<String, Object>> findAll(Map<String, Object> keyMap, wfjcPageEntity page) {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        int totalCount = sqlSession.selectOne("wfjcGroupDao.getNum", keyMap);
        if (page != null) {
            list = sqlSession.selectList("wfjcGroupDao.findAll", keyMap, new RowBounds(page.getPageBeginCount(), page.getNumPerPage()));
            page.setTotalCount(totalCount);
        } else {
            list = sqlSession.selectList("wfjcGroupDao.findAll", keyMap);
        }
        sqlSession.close();
        return list;
    }

    /**
     * @desc 创建分组
     * @author WangWeiWei 020463
     * @date 2018年5月16日 上午9:22:45
     * @param group
     * @return
     * @throws Exception
     */
    public int create(wfjcGroupEntity group) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        int lines = sqlSession.insert("wfjcGroupDao.create", group);
        sqlSession.close();
        return lines;
    }

    /**
     * @desc 根据Id获取分组信息
     * @author WangWeiWei 020463
     * @date 2018年5月16日 上午11:06:09
     * @param id
     * @return
     */
    public wfjcGroupEntity findOneById(String id) {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        try {
            wfjcGroupEntity group = sqlSession.selectOne("wfjcGroupDao.findOneById", id);
            return group;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return null;
    }

    /**
     * @desc 更新分组信息
     * @author WangWeiWei 020463
     * @date 2018年5月16日 上午11:13:39
     * @param group
     * @return
     * @throws Exception
     */
    public int update(wfjcGroupEntity group) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        int lines = sqlSession.update("wfjcGroupDao.update", group);
        sqlSession.close();
        return lines;
    }

    /**
     * @desc 根据Id删除一条分组信息
     * @author WangWeiWei 020463
     * @date 2018年5月16日 下午4:45:14
     * @param id
     * @return
     * @throws Exception
     * @throws SQLException
     */
    public int delete(String id) throws SQLException, Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        int lines = sqlSession.delete("wfjcGroupDao.delete", id);
        sqlSession.close();
        return lines;
    }
}


dao类不需要继承dejcCommonDAO这个类了!

每次执行一个数据库操作,都需要先SqlSession sqlSession = sqlSessionFactory.openSession(true);生成一个sqlSession,然后操作完之后,都必须关闭SqlSession

sqlSession.insert("wfjcGroupDao.delete", id);//新增
sqlSession.update("wfjcGroupDao.update", group);//编辑
sqlSession.selectOne("wfjcGroupDao.findOneById", id);//查询一条数据
sqlSession.selectList("wfjcGroupDao.findAll", keyMap);//查询多条数据
sqlSession.delete("wfjcGroupDao.delete", id);//删除

wfjcGroupDao.delete,wfjcGroupDao.update...等等名称是mapper文件中的mapper总节点的namespace名称加上子节点的id名称拼接映射而成,SqlSession会根据该条件查找出sql命令并将参数根据占位符预编译的带入进去然后执行sql命令,并返回值。

三、总结

引入mybatis可以大大提高开发效率,摒弃字符串拼接的方式来组成SQL命令,并防止了SQL注入的风险与特殊字符的影响,DB2繁琐的分页命令也无需由开发人员编写,是由mybatis来完成。测试机和正式机都已经将mybatis集成完毕,开发人员正常上代码即可。

作者:研究院-解决方案部-王玮玮

相关文章

网友评论

      本文标题:ERP如何集成MyBatis

      本文链接:https://www.haomeiwen.com/subject/lapasftx.html