如果是自己用的Mybatis不需要考虑对配置文件加密如果不是那就需要考虑加密这篇文章主要讲如何配置CS的Mybatis 因为mybatis好使所以几乎需要操作数据库的时候我都会使用mybatis而且在一个正式的项目中同时存在BS和CS的程序都使用的Mybatis使用的相同mapper文件
Mybatis的XML配置文件正常如下
复制代码 代码如下: <?xml version="" encoding="UTF" ?> <!DOCTYPE configuration PUBLIC "//mybatisorg//DTD Config //EN" " <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="driver" /> <property name="url" value="url" /> <property name="username" value="username" /> <property name="password" value="password" /> </dataSource> </environment> </environments>
<mappers> <mapper resource="com/isea/dao/YouMapperxml" /> </mappers> </configuration> 为了防止数据库用户名密码洩漏我将XML进行双向加密变成了一个字节文件而且文件名后缀随意 例如basicdata内容局部如下
根据XML生成Mybatis的SqlSessionFactory代码如下 复制代码 代码如下: public class MyBatis { private static final String CONFIG = "basicdata"; private SqlSessionFactory sqlSessionFactory;
private static MyBatis instance = new MyBatis();
private MyBatis(){ InputStream inputStream = null; try { inputStream = getXMLIS(); if(inputStream==null){ throw new RuntimeException("数据库信息配置失败!"); } sqlSessionFactory = new SqlSessionFactoryBuilder()build(inputStream); } finally{ try { inputStreamclose(); } catch (Exception e) { } } }
public static InputStream getXMLIS(){ InputStream inputStream = null; try { //对资源进行加密解密后处理 BufferedReader reader = new BufferedReader(new FileReader(new File(ConfigLOCATION+"/"+CONFIG))); String str = null; StringBuffer sbBuffer = new StringBuffer(); while((str=readerreadLine())!=null){ sbBufferappend(str); } EncrypDES encrypDES = new EncrypDES(); String result = encrypDESDecryptor(sbBuffertoString()); inputStream = new ByteArrayInputStream(resultgetBytes()); return inputStream; } catch (Exception e) { } return null; }
public SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; }
public static MyBatis getInstance(){ return instance; } } 这里的data文件是在src下 代码中的EncrypDES是一个使用DES的加密解密类 代码中的ConfigLOCATION代码如下
复制代码 代码如下: public static String getRealPath() throws Exception { String realPath = ConfigclassgetClassLoader()getResource("")getFile(); javaioFile file = new javaioFile(realPath); realPath = filegetAbsolutePath(); realPath = javanetURLDecoderdecode(realPath "utf"); return realPath; } getRealPath()返回的值赋给LOCATION
上面代码的主要流程读取data文件解密以流的形式返回给mybatis 通过Mybatis类就可以在程序的任意地方进行调用了
除了使用XML方式配置Mybatis外还可以完全使用JAVA代码进行配置这种方式比较麻烦需要创建一个DataSource然后用Mybatis配置类加载所有需要的mapperclass这里就不详细介绍了(除非有需要) |