前言:
技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, 以及ibatis的升级版mybatis. 从基本的xml配置, 也逐渐演化为注解方式配置.
技术的进步意味着, 你需要时刻保持一颗进步的心. 即便你经验丰富, 学识渊博. 但新技术的革命, 使得新人轻松超越. 希望作为一个技术人员, 始终有颗年轻的心.
本文将讲述一下, spring+mybatis的配置方式, 权当学习笔记.
mybatis配置:
mybatis-config.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> <typeAliases> <typeAlias alias="Sample" type="com.sample.Sample" /> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/sample/mapper/SampleMapper.xml" /> </mappers> </configuration>
其中, typeAliase用于指定类的别名, 用于简写. environment用于设置datasource和transactionManager的细节. mapper则指定了具体要载入的mapper.xml文件.
mybatis可以脱离spring来运行, 具体不再展开, 详见后续的学习笔记.
spring集成:
mybatis和spring集成时, 其mybatis-config.xml中的environment标签将被自动忽略. 这个是大前提.
基本的关键词是: datasource, sqlsessionfactory, sqlsession, sqlmapper.
spring+mybatis配置方式有很多, 有暴露sqlsession, 也有借助SqlSessionDaoSupport类隐藏sqlsession. 这边讲述其中一种方式.
1) 配置Datasource
<!--创建jdbc数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/> <property name="username" value="root"/> <property name="password" value=""/> <property name="maxActive" value="10"/> <property name="maxIdle" value="2"/> <property name="minIdle" value="2"/> </bean>
2) 配置SqlSessionFactoryBean
<!-- 配置SqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:mybatis/*.xml" /> <!--<property name="configLocation" value="classpath:mybatis.xml"/>--> </bean>
3) 配置MapperScannerConfigurer
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" > <property name="basePackage" value="com.springapp.mvc.sqlmapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean>
4) 配置TransactionManager
<!-- 配置Spring的事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
以上就是整个spring+mybatis的一个相对完整的配置, 当然由于版本升级, 不同spring和mybatis细节上是有差异的.
这边选用的版本为mybatis为3.3.0, mybatis-spring为1.2.3.
<!-- mybatis & mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.3</version> </dependency>
SqlMapper的JAVA样例代码如下:
public interface MessageMapper { @Select("SELECT * FROM tb_message WHERE message_id = #{message_id}") Message queryMessage(@Param("message_id") int messageId); }
其在MapperScanner后, 生成了一个代理类用于处理sql的执行和请求响应的映射处理. 同时在spring容器中按类型注入.
springmvc集成:
作为web应用的话, 需要指定并载入相关的配置信息.
假设所有的spring+mybatis的集成, 都在alicationContext.xml文件中配置.
在web.xml中, 添加如下代码:
<!-- 添加spring相关的配置文件&属性--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
总结:
感觉有些潦草, 并没有形成一个完整的可运行的小例子. 所幸我自己能看懂, ^_^. Mybatis涉及的知识点很多, 希望后续的学习能好好补上. 推荐参考书籍<<Java Persistence With Mybatis 3>>, 以及大神的博文链接.
公众号&游戏站点:
个人微信公众号: 木目的H5游戏世界