美文网首页
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