一、jar包的导入
mybatis 需要的jar包:
mybatis-3.1.1.jar
mybatis-spring-1.3.1.jar
db2需要的jar包:
db2jcc.jar
配置dataSource所需要的jar包:
commons-dbcp-1.2.1.jar
commons-pool-1.6.jar
spring各种jar:
如果不使用aop编程aspectj的包不需要引入
二、web.xml的配置
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/applicationContext*.xml</param-value> </context-param>
上面是完成spring 的 简单配置。
由于我个人有强迫症,不喜欢把所有定义的bean 放在同一个xml中 所以引入了多个 aoolicationContext
三、配置mybatis
#驱动名称 jdbc.driver=com.ibm.db2.jcc.DB2Driver #访问的url jdbc.url=jdbc:db2://ip:端口号/库名 jdbc.type=javax.sql.DataSource #初始化连接池大小 jdbc.initialSize=10 #连接池最大数量 jdbc.maxActive=200 #连接池最大空闲 jdbc.maxIdle=100 #连接池最小空闲 jdbc.minIdle=10 #连接池最大等待事件 jdbc.maxWait=5000上面这些需要放在 properties下jdbc.username=用户名 jdbc.password=密码
<!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:spring/properties/jdbc.properties"/> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <!-- 初始化连接大小 --> <property name="initialSize" value="${jdbc.initialSize}"/> <!-- 连接池最大数量 --> <property name="maxActive" value="${jdbc.maxActive}"/> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${jdbc.maxIdle}"/> <!-- 连接池最小空闲 --> <property name="minIdle" value="${jdbc.minIdle}"/> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${jdbc.maxWait}"/> </bean> <!--基于注解的事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--引入dataSource--> <property name="dataSource" ref="dataSource"/> <!--引入mybatis配置文件--> <property name="configLocation" value="classpath:spring/mybatis-config.xml"/> <!--下面这句话可以使用可以不使用。如果不使用 默认的xml 寻找模式为对应的接口目录下。即接口和xml必须名称统一,且在同一目录 此文采用是单独放置其他位置则实现如下配置即可--> <property name="mapperLocations" value="classpath:self/yzx/xml/*.xml"/> </bean> <!-- 扫描mybatis映射接口类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="self"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
四、配置mybatis-cofig
<settings> <setting name="cacheEnabled" value="false"/> </settings>
五、测试
创建接口
public interface svlt02 { public List<Map<String, Object>> getLog(String msg_ids); }创建xml文件
<!--namespace 命名规则为对应的接口名称否则会找不到对应的方法--> <mapper namespace="self.yzx.itface.svlt02"> <select id="getLog" resultType="java.util.Map" parameterType="String"> SELECT * FROM TEST_TABLE WHERE MSG_IDS = ${_parameter} </select> </mapper>
由于我这里传入的是String 类型。所以在 parameterType类型写String。。在 sql中 使用 _parameter 获得传入参数
也可以在接口中 使用 getLog(@param("sp") String msg_ids) 则sql 写 ${sp}
不需要写任何实现类。。
我本地测试是 写个servlet 。。在 servlet 中添加注解。。
调用。
package yzx.sv.lt; import org.springframework.beans.factory.annotation.Autowired; import self.yzx.impl.Svlt02Services; import yzx.sv.lt.BaseServelt.BaseServlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Map; public class servletSVLT02 extends BaseServlet { @Autowired private Svlt02Services svlt02Services; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Map<String, Object>> queryList = svlt02Services.queryList("1"); System.out.println("svlt02"); } }
package self.yzx.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import self.yzx.itface.svlt02; import java.util.List; import java.util.Map; @Service public class Svlt02Services { @Autowired private svlt02 svlt02; public List<Map<String, Object>> queryList(String msg_ids) { List<Map<String,Object>> list =svlt02.getLog(msg_ids); return list; } }
六、总结
按照以上步骤 可以完成mybatis 的 配置 及使用。。
使用idea 会报 no bean name is 这个 不用管。。
如果发现@autowired 为null 是因为 servlet 初始化的时候 没有 完成bean 的装配。。
我这里 采用 所有servlet 继承 BaseServlet 。。。servlet 初始化的时候完成 自动装配。这样 你就不会获取到为空了。
public class BaseServlet extends HttpServlet { public void init() throws ServletException { super.init(); WebApplicationContextUtils.getWebApplicationContext(getServletContext()).getAutowireCapableBeanFactory().autowireBean(this); /*Sings signs = (Sings) ContextLoader.getCurrentWebApplicationContext().getBean("sings");*/ } }