1、采用数据映射器(MapperFactoryBean)的方式,不用写mybatis映射文件,采用注解方式提供相应的sql语句和输入参数。
<!-- 引入jdbc配置文件 --> <context:property-placeholder location="jdbc.properties"/> <!-- 创建SqlSessionFactory,同时指定数据源--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 自动将映射接口转换为bean --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.easyway.*.dao.mapper"/> <property name="sqlSessionFactory" ref="SqlSessionFactory" /> </bean> <!-- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="com.easyway.*.dao.mapper" p:sqlSessionFactory-ref="sqlSessionFactory"> </bean> -->
package com.mybatis.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface QueryMapper
{
/**
* 获得所有表名、注释
* @param dbName
* @return
*/
@Select("SELECT DISTINCT(TABLE_NAME), TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = #{dbName}")
public List<Map<String, String>> getTables(@Param("dbName") String dbName);
/**
* 获得表字段、注释
* @param dbName
* @param tblName
* @return
*/
@Select(" SELECT " +
" COLUMN_NAME," +
" DATA_TYPE," +
" COLUMN_COMMENT" +
" FROM " +
" INFORMATION_SCHEMA.COLUMNS" +
" WHERE " +
" table_schema = #{dbName}" +
" AND table_name = #{tblName} ")
public List<Map<String, String>> getTable(@Param("dbName") String dbName, @Param("tblName")String tblName);
@Select("SELECT * FROM ${tblName}")
public List<Map<String, Object>> getTableInfo(@Param("tblName")String tblName);
}
2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
MyBatis中,sessionFactory可由SqlSessionFactoryBuilder来创建。MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代。
SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
<!-- 数据库连接池 --> <bean id="dataSource" parent="parentDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/myBatisConfig.xml" /> <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" autowire="byName"> <constructor-arg ref="sqlSessionFactory" /> </bean>
3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis/myBatisConfig.xml" /> <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"/> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean>
public abstract class BaseIbatis3Dao<E, PK extends Serializable> extends SqlSessionDaoSupport implements EntityDao<E, PK> {
private final static String mapperNs = "";//通过注入方式
protected E getById(Object id) throws DataAccessException
{
return getSqlSession().selectOne(mapperNs + ".getById", id);
}
}