第一步,下载mybatis的jar包。这一步非常简单:
pom.xml
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
以前要查询官网,有时候还不一定马上能找到,特别像mybatis以前又叫ibatis,有github,有apache,有code.google等等,根本不知道哪个。而且即使找到了最新的官网,还得找jar的下载位置。现在都不需要了,用maven10秒钟搞定。在eclipse里搜索mybatis,查出所有版本,直接下载最新的3.2.8即可。如果要源代码,也可以从maven下载。
pipeliner/src/main/java/com/age/sale/dao/SqlMapConfig.xml
数据库配置文件:(这里配置了,tomcat的server.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>
<!-- 给bean取别名用在mapping文件中 -->
<typeAliases>
<typeAlias type="com.age.sale.bean.Worker" alias="Worker" />
<typeAlias type="com.age.sale.bean.StatResult" alias="StatResult" />
</typeAliases>
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@32.121.2.130:1521:bsstest" />
<property name="username" value="AUTOAC1" />
<property name="password" value="AUTOAC1" />
</dataSource>
</environment>
</environments>
<!-- 这里可以写多个实体的映射文件 -->
<mappers>
<mapper resource="com/linkage/sale/bean/WorkerSqlMap.xml" />
<mapper resource="com/linkage/sale/bean/DataCountSqlMap.xml" />
</mappers>
</configuration>
pipeliner/src/main/java/com/age/sale/bean/StatResult.java
package com.age.sale.bean;
/**
* 数据统计结果
*
* @author ouyida3
* @since 2015.3.6
*/
public class StatResult {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace用于java代码调用时识别指定xml的mapper文件 -->
<mapper namespace="com.age.sale.bean">
<sql id="field2">
net_type_name name
</sql>
<select id="queryMonthAndDay" resultType="StatResult">
select
<include refid="field2" />
from TS_B_DETAILSTAT a,td_s_netcode b where a.EPARCHY_CODE = #{EPARCHY_CODE} AND a.CYCLE_ID = #{CYCLE_ID}
AND a.STAT_FIELD = b.NET_TYPE_CODE
AND A.STAT_TYPE = 'NET_TYPE_CODE'
AND b.NET_TYPE_NAME like '%'||#{DATA_NAME}||'%'
AND a.STAT_FIELD = #{STAT_FIELD}
AND a.SOURCE_TYPE = #{SOURCE_TYPE}
AND a.SUB_CYCLE_ID!= '0'
ORDER BY a.SUB_CYCLE_ID DESC
</select>
</mapper>
先写测试类DayMonthBalanceDaoTest.java
package com.age.sale.dao;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.linkage.appframework.data.DataMap;
import com.linkage.appframework.data.IData;
import com.linkage.sale.bean.StatResult;
/**
* @since 2015.3.6
*/
public class DayMonthBalanceDaoTest {
@SuppressWarnings("unchecked")
@Test
public final void testQueryByNetTypeWithResult() {
IData cond_data = new DataMap();
cond_data.put("SOURCE_TYPE", "EVERYDAY");
cond_data.put("EPARCHY_CODE", "0751");
cond_data.put("CYCLE_ID", "201403");
cond_data.put("DATA_NAME", "");
cond_data.put("STAT_FIELD", "33");
DayMonthBalanceDao dao = new DayMonthBalanceDao();
List<StatResult> result = dao.queryByNetType(cond_data);
assertEquals(result.size(), 1);
}
}
dao调用类:
package com.age.sale.dao;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.age.appframework.data.IData;
import com.age.sale.bean.StatResult;
/**
* @since 2015.3.6
*/
public class DayMonthBalanceDao {
public List<StatResult> queryByNetType(IData param) {
SqlSessionFactory factory = null;
try {
Reader reader = Resources.getResourceAsReader("com/age/sale/dao/SqlMapConfig.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
SqlSession session = factory.openSession();
List<StatResult> list = session.selectList("com.linkage.sale.bean.queryMonthAndDay", param);
return list;
}
}
后续改进项:
1、数据库连接要配置多个,并且根据不同的城市自动切换数据库连接;
2、dao类不要直接进行数据库连接,应该单独分离出来;
3、数据库连接考虑怎样连接、释放最节省;
出自ouyida3的csdn blog
2015.3.8