mybatis是一个持久层的应用框架,它省略了数据库操作dao层的实现类,利用动态代理的原理生成我们需要的实现类操作数据库,并且可以定制化sql语句,不存在很繁琐的注解配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis/config.xml" />
<property name="mapperLocations" value="classpath*:mybatis/mapper/**/*.xml" />
bean>
说明:这是mybatis自己提供的会话工厂实现类,依赖于数据源,依赖的其他属性是要去扫描所有与mybatis配置相关的文件(config.xml和XxxMapper.xml)
3. 配置spring将Mapper接口放入容器的条件
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<property name="basePackage" value="com.bwf.term14.book.mapper" />
bean>
说明:依赖于会话工厂,需要配置需要实现的具体的接口路径
基于mybatis的实体类配置:
<configuration>
<typeAliases>
<package name="实体类的包名路径" />
typeAliases>
configuration>
说明:这些实体类的别名采用默认的。例如,包名 . Book–Book
namespace="com.bwf.term14.book.mapper.AdminMapper">
"adminResultMap" type="Admin" >
"AID" property="id" />
"ALoginID" property="loginId" />
"ALoginPsw" property="loginPsw" />
"AName" property="name" />
<select id="getAdminByLoginId" resultMap="adminResultMap">
select AID , ALoginID, ALoginPsw, AName from admininfo where ALoginID = #{loginId}
select>
<select id="getAdminNameDetails" resultType="map">
select CHAR_LENGTH(AName) as nameLength, count(*) as adminCount, count(char_length(ALoginID)) as loginidLength from admininfo group by CHAR_LENGTH(AName) order by nameLength desc
select>
<select id="getAllAdmins" resultType="Admin">
select AID id, ALoginID loginId, ALoginPsw loginPsw, AName name from admininfo
select>
"add">
insert into admininfo values (null, #{admin.loginId}, #{admin.loginPsw}, #{admin.name})
说明:
1. 命名空间就是借口类的路径
2. 在里面配置数据库操作的数据库增删改查标签
3. 可以使用include标签,提高复用性:
id="header">
select AID as id, ALoginID as loginId, ALoginPsw as loginPsw, AName as name from admininfo
说明:
a. getAdminByLoginId是具体的方法名,Admin是对应的返回类型
b. “#{loginId}”表示传递的参数
c. 如果借口传递的是引用,则需要注解声明:@param(“…”),在xml中可以当作对象来使用
d. resultType是在数据库表和实体类的字段名对应上了才会有用,否则返回的数据将是null;这个时候就需要用resultMap来作映射,就像hibernate注解一样,只不过在xml文件中配置:
"Book" id="bookResultMap">
<id property="id" column="BID"/>(配主键用id)
<result property="title" column="BTitle"/>
<result property="author" column="BAuthor"/>
<result property="price" column="BPrice"/>
<result property="publisher" column="BPublisher"/>
<result property="photo" column="BPhoto"/>
property="category" javaType="Category">
<id property="id" column="CID"/>
<result property="name" column="CName"/>
在进行增删改查的标签配置下还可以动态生成sql语句,具体的标签使用这里不再赘述,百度搜索很多的
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
bean>
说明:其他的配置同spring整合hibernate一致,需要配置具体的通知(连接点)、切入点,具体请参照:声明式事务
,同时导入相应整合的cache的架包