提交 35272324 编写于 作者: C Calvin

#57 在扫描MyBatis接口时,加入annotation class的限定,适合dao放在不同的模块目录的情况

上级 06820b54
package org.springside.examples.showcase.repository.mybatis;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 标识MyBatis的DAO,方便{@link org.mybatis.spring.mapper.MapperScannerConfigurer}的扫描。
*
* @author calvin
*
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyBatisRepository {
}
......@@ -8,7 +8,8 @@ import org.springside.examples.showcase.entity.Team;
*
* @author calvin
*/
@MyBatisRepository
public interface TeamMybatisDao {
public Team getTeamWithDetail(Long id);
public Team getWithDetail(Long id);
}
......@@ -11,14 +11,15 @@ import org.springside.examples.showcase.entity.User;
*
* @author calvin
*/
@MyBatisRepository
public interface UserMybatisDao {
public User getUser(Long id);
public User get(Long id);
public List<User> searchUser(Map<String, Object> parameters);
public List<User> search(Map<String, Object> parameters);
public void saveUser(User user);
public void save(User user);
public void deleteUser(Long id);
public void delete(Long id);
}
......@@ -36,7 +36,7 @@ public class AccountEffectiveService {
private final JsonMapper jsonMapper = JsonMapper.nonDefaultMapper();
public Team getTeamWithDetail(Long id) {
return teamDao.getTeamWithDetail(id);
return teamDao.getWithDetail(id);
}
/**
......@@ -49,7 +49,7 @@ public class AccountEffectiveService {
String jsonString = memcachedClient.get(key);
if (jsonString == null) {
user = userDao.getUser(id);
user = userDao.get(id);
if (user != null) {
jsonString = jsonMapper.toJson(user);
memcachedClient.set(key, MemcachedObjectType.USER.getExpiredTime(), jsonString);
......@@ -64,16 +64,16 @@ public class AccountEffectiveService {
Map<String, Object> parameters = Maps.newHashMap();
parameters.put("loginName", loginName);
parameters.put("name", name);
return userDao.searchUser(parameters);
return userDao.search(parameters);
}
@Transactional
public void saveUser(User user) {
userDao.saveUser(user);
userDao.save(user);
}
@Transactional
public void deleteUser(Long id) {
userDao.deleteUser(id);
userDao.delete(id);
}
}
......@@ -39,20 +39,21 @@
</property>
</bean>
<!-- Spring Data Jpa配置 -->
<!-- Spring Data Jpa配置, 扫描base-package下所有继承于Repository<T,ID>的接口, 动态生成实现类 -->
<jpa:repositories base-package="org.springside.examples.showcase" transaction-manager-ref="defaultTransactionManager" entity-manager-factory-ref="entityManagerFactory"/>
<!-- MyBatis配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描目录,省掉Configuration.xml里的手工配置Class名与缩写 -->
<!-- 自动扫描目录, 省掉Configuration.xml里的手工配置Class名及其缩写 -->
<property name="typeAliasesPackage" value="org.springside.examples.showcase.entity" />
<!-- 没有把mapper文件放到与dao相同的深层目录,显式指定Mapper文件位置 -->
<property name="mapperLocations" value="classpath:/mybatis/*Mapper.xml" />
</bean>
<!-- 在指定扫描所有接口, 动态生成MyBatis Dao接口实现-->
<!-- 扫描basePackage下所有接口, 动态生成MyBatis Dao接口实现 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.springside.examples.showcase.repository.mybatis" />
<property name="basePackage" value="org.springside.examples.showcase" />
<property name="annotationClass" value="org.springside.examples.showcase.repository.mybatis.MyBatisRepository"/>
</bean>
<!-- 事务管理器配置, Jpa单数据源事务 -->
......
......@@ -19,7 +19,7 @@
</resultMap>
<!-- 获取部门详细信息, 输出用resultMap关联嵌套对象 -->
<select id="getTeamWithDetail" parameterType="int" resultMap="teamDetailMap">
<select id="getWithDetail" parameterType="int" resultMap="teamDetailMap">
select t.id as team_id,
t.name as team_name,
m.id as master_id,
......
......@@ -6,7 +6,7 @@
<!--
获取用户: 输出直接映射到对象, login_name列要"as loginName"以方便映射 ,team_id as "team.id"创建team对象并赋值
-->
<select id="getUser" parameterType="int" resultType="User">
<select id="get" parameterType="int" resultType="User">
select id, name, email,
login_name as loginName,
team_id as "team.id"
......@@ -15,7 +15,7 @@
</select>
<!-- 查询用户,演示: 1.输入用map传入多个参数 2.<where>语句, 智能添加where和and关键字 3.输出直接映射对象 -->
<select id="searchUser" parameterType="map" resultType="User">
<select id="search" parameterType="map" resultType="User">
select id, name, email,
login_name as loginName,
team_id as "team.id"
......@@ -31,7 +31,7 @@
</select>
<!-- 插入用户: 1.由数据库生成id并赋值到user对象 2.输入用对象, 嵌套属性表达式#{team.id} -->
<insert id="saveUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
<insert id="save" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into ss_user (
login_name, name, password, email, team_id)
values (
......@@ -40,7 +40,7 @@
</insert>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
<delete id="delete" parameterType="int">
delete from ss_user where id=#{id}
</delete>
</mapper>
......@@ -20,7 +20,7 @@ public class TeamMybatisDaoTest extends SpringTransactionalTestCase {
@Test
public void getTeamWithDetail() throws Exception {
Team team = teamDao.getTeamWithDetail(1L);
Team team = teamDao.getWithDetail(1L);
assertEquals("Dolphin", team.getName());
assertEquals("Admin", team.getMaster().getName());
}
......
......@@ -26,7 +26,7 @@ public class UserMybatisDaoTest extends SpringTransactionalTestCase {
@Test
public void getUser() throws Exception {
User user = userDao.getUser(1L);
User user = userDao.get(1L);
assertEquals("admin", user.getLoginName());
}
......@@ -34,7 +34,7 @@ public class UserMybatisDaoTest extends SpringTransactionalTestCase {
public void searchUser() throws Exception {
Map<String, Object> parameter = Maps.newHashMap();
parameter.put("name", "Admin");
List<User> result = userDao.searchUser(parameter);
List<User> result = userDao.search(parameter);
assertEquals(1, result.size());
assertEquals("admin", result.get(0).getLoginName());
}
......@@ -44,17 +44,17 @@ public class UserMybatisDaoTest extends SpringTransactionalTestCase {
//create
int count = countRowsInTable("ss_user");
User user = UserData.randomUser();
userDao.saveUser(user);
userDao.save(user);
Long id = user.getId();
assertEquals(count + 1, countRowsInTable("ss_user"));
User result = userDao.getUser(id);
User result = userDao.get(id);
assertEquals(user.getLoginName(), result.getLoginName());
//delete
userDao.deleteUser(id);
userDao.delete(id);
assertEquals(count, countRowsInTable("ss_user"));
assertNull(userDao.getUser(id));
assertNull(userDao.get(id));
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册