mybatis使用Dao和Mapper方式
Posted fosonR
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis使用Dao和Mapper方式相关的知识,希望对你有一定的参考价值。
1、配置jdcp.properties数据库连接文件
#mysql database setting
jdbc.type=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://1xxx:3306/xx?useUnicode=true&characterEncoding=utf-8
jdbc.username=xxx
jdbc.password=xxx
#pool settings
jdbc.pool.init=1
jdbc.pool.minIdle=3
jdbc.pool.maxActive=20
1.1配置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> <!-- 全局参数 --> <settings> <!-- 使全局的映射器启用或禁用缓存。 --> <setting name="cacheEnabled" value="true"/> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 --> <setting name="aggressiveLazyLoading" value="true"/> <!-- 是否允许单条sql 返回多个数据集 (取决于驱动的兼容性) default:true --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true --> <setting name="useColumnLabel" value="true"/> <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。 default:false --> <setting name="useGeneratedKeys" value="false"/> <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分 FULL:全部 --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- 这是默认的执行类型 (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新) --> <setting name="defaultExecutorType" value="SIMPLE"/> <!-- 使用驼峰命名法转换字段。 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 设置本地缓存范围 session:就会有数据的共享 statement:语句范围 (这样就不会有数据的共享 ) defalut:session --> <setting name="localCacheScope" value="SESSION"/> <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 --> <setting name="jdbcTypeForNull" value="NULL"/> </settings> <!-- 类型别名 --> <typeAliases> <typeAlias alias="Page" type="com.yueqiu8.common.persistence.Page" /><!--分页 --> </typeAliases> <!-- 插件配置 --> <plugins> <!--<页面拦截器插件/>--> <plugin interceptor="com.github.pagehelper.PageHelper" /> </plugins> </configuration>
2、spring-context.xml文件配置(spring-context.xml配置在web.xml中加载)
<!-- 加载classpath下的jdbc.properties文件,里面配了数据库连接的一些信息 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="dataSource" class="${dataSource}" 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="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!--数据源配置sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref bean="dataSource"/>
<property name="typeAliasesPackage" value="com.xxx.path"/>
<property name="typeAliasesSuperType" value="xxx.xxx"/>
<property name="mapperLocations" value="classpath:/mappings/**/*.xml"/>
<property name="configLocation" value="classpath:/mybatis-config.xml"></property>
</bean>
配置sql,UserMapper.xml供service使用
<mapper namespace="ssm.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="user">
select * from user where id = #{id}
</select>
</mapper>
3、dao方式和mapper方式使用mybatis
在context-spring.xml配置不同的加载方式
3.1、dao方式:
com.xxx.MybatisDao类如下:
public class MybatisDao extends SqlSessionDaoSupport {
final static Logger logger = LoggerFactory.getLogger(GenericDao.class);
private SqlSessionFactory sqlSessionFactory;
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
this.sqlSessionFactory = sqlSessionFactory;
}
public <T>T select(String key, Object param) {
if(null == param) {
return this.getSqlSession().selectOne(key);
}
return this.getSqlSession().selectOne(key,param);
}
//其他insert,delete,update方法自行实现
}
<!-- 配置dao实现类-- >
<bean id="genericDao" class="com.xxx.MybatisDao">
<property name="sqlSessionFactory">
<ref bean="sqlSessionFactory" />
</property>
<property name="batchSqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<!-- 配置dao使用-->
<bean id="myClass" class="com.xxx.MyClass">
<property name="myDao" ref="genericDao"></property>
</bean>
在MyClass中是用:
private MybatisDao myDao;
User user = myDao.select("ssm.mapper.UserMapper.findUserById",1);
3.2、mapper方式使用
3.2.1配置xml
<!-- 扫描basePackage下所有以@MyBatisDao注解的接口 -->
<bean id="mapperScannerConfigurer" class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<!--<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> -->
<!--自动扫描包路径-->
<property name="basePackage" value="com.xxx.path"/>
<!--自动扫描MyBatisDao注解标注的接口并自动装载-->
<property name="annotationClass" value="com.xxx.annotation.MyBatisDao"/>
<!--<property name="markerInterface" value="com.xxx.CrudMapper"/>-->
</bean>
3.2.2 //MyBatisDao 注解定义
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Component
public @interface MyBatisDao {}
3.2.3 //mapper接口,相当于dao接口,接口类名必须和mapper.xml命名空间一样UserMapper ,结合typeAliasesPackage使用可省掉命名空间包名路径
public interface UserMapper extends Mapper<T>, MySqlMapper<T> {
//根据id查询用户信息,方法名必须和mapper.xml配置的id名称一致,参数类型必须和mapper.xml配置parameterType类型一致,返回类型必须和配置的resultType一直
public User findUserById(int id) throws Exception;
}
以上是关于mybatis使用Dao和Mapper方式的主要内容,如果未能解决你的问题,请参考以下文章
02.MyBatis在DAO层开发使用的Mapper动态代理方式
MyBatis开发Dao的原始Dao开发和Mapper动态代理开发