|
今天突然要写一个小的系统,因为什么都是新的,说要框架也要重新搭(bs下公司没有基础框架),ibatis自己没有怎么搭过,所以这次直接选择spring jdbc,但是要是喜欢ibatis的代码sql分离,所以自己百度了下发现spring 的jdbc代码分离有人写了,但是需要配置各个xml
,相信spring都是配置加自动的,所以自己,写了一部分,自动扫描map.xml然后加载,现在都是约定大于配置,这样我们约定放置sql的文件名和方式就可以了
下面是代码:
这个是主要的类,单例的下面这个是扫描类- package com.copote.util;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 扫描service下面的所有map.xml
- *
- * @author jueyue 2013年8月5日
- */
- public class ScanMapFile {
-
- private List<String> sqls;
-
- public ScanMapFile(){
- sqls = new ArrayList<String>();
- }
-
- public List<String> getsqlMaps(String path){
- GetSql(ScanMapFile.class.getResource(path).getPath());
- return sqls;
- }
- /*
- * 递归调用查找指定文件加下所有文件
- */
- private void GetSql(String path) {
- File rootDir = new File(path);
- if (!rootDir.isDirectory()) {
- if(rootDir.getName().equalsIgnoreCase("map.xml")){
- sqls.add(rootDir.getAbsolutePath());
- }
- } else {
- String[] fileList = rootDir.list();
- for (int i = 0; i < fileList.length; i++) {
- path = rootDir.getAbsolutePath() + "\" + fileList[i];
- GetSql(path);
- }
- }
- }
- }
复制代码 我们扫描的是所有的map.xml这样就加载了所有的sql- <?xml version="1.0" encoding="UTF-8"?>
- <sqls>
- <sqlElement key="account.login">
- <![CDATA[
- select * from user
- </sqlElement>
- </sqls>
复制代码 然后在我们的dao里面这样写- @Override
- public AccountEntity login(AccountEntity account) {
- String sql = SQLMap.getInstance().getSql("account.login");//加载sql
- List<AccountEntity> temp = jdbcTemplate.query(sql,
- new Object[] { account.getVAcctCode(), account.getVAcctPwd(),
- account.getCorgId() }, new AccountRowMapper());
- return temp.size() == 1?temp.get(0):null;
- }
复制代码 这样我们就获取了对于的sql,就分离了,而且自动扫描
最后记得在web.xml添加启动监听,进行初始化
jeecg 首发 |
|