第五章 spring + mybatis 书写通用 dao层接口:
1.书写 BaseRepository 方法:
package com.example.demo.repository;
import java.util.List;
import java.util.Map;
public interface BaseRepository {
/**
* 新增
* @param statementName
* @param obj
*/
void addObject(String statementName, Object obj);
/**
* 按主键ID删除记录
* @param statementName
* @param objId
*/
int deleteObject(String statementName,String objId);
/**
* 删除满足条件的所有记录
* @param statementName
* @param map 条件map
* @return
*/
int deleteForMap(String statementName, Map<String, Object> map) ;
/**
* 按主键ID进行查找
* @param statementName
* @param objId 主键ID
* @return
*/
Object findObject(String statementName,String objId);
/**
* 更新对象
* @param statementName
* @param obj 要更新的对象
* @return
*/
int updateObject(String statementName,Object obj);
/**
* 更改对象启用/停用状态
* @param statementName
* @param map
* @return
*/
int updateObjectState(String statementName,Map<String, Object> map);
/**
* 统计符合条件的记录的数目
* @param statementName
* @param filter sql过滤语句
* @return
*/
int getObjectCount(String statementName, String filter);
/**
* 统计符合条件的记录的数目
* @param statementName
* @param map 过滤条件map
* @return
*/
int getObjectCount(String statementName, Map<String, Object> map);
/**
* 查找符合条件的对象
* @param statementName
* @param map 过滤条件map
* @return
*/
Object findObject(String statementName, Map<String, Object> map);
/**
*分页查询满足给定条件的对象列表
* @param statementName
* @param map 过滤条件map
* @param skipResults 跳过的记录
* @param pageSize 一页的记录条数
* @return
*/
List listByPage(String statementName, Map<String, Object> map, int skipResults, int pageSize);
/**
* 分页查询满足给定条件的对象列表
* @param statementName
* @param filter sql过滤语句
* @param skipResults 跳过的记录
* @param pageSize 一页的记录条数
* @return
*/
List listByPage(String statementName, String filter, int skipResults, int pageSize);
/**
* 查询所有满足给定条件的对象列表
* @param statementName
* @param filter sql过滤语句
* @param skipResults 跳过的记录
* @param pageSize 一页的记录条数
* @return
*/
List list(String statementName, String filter);
/**
* 查询所有满足给定条件的对象列表
* @param statementName
* @param map 过滤条件map
* @param skipResults 跳过的记录
* @param pageSize 一页的记录条数
* @return
*/
List list(String statementName, Map<String, Object> map);
}
2.书写 BaseRepositoryImpl 方法
package com.example.demo.repository.impl;
import com.example.demo.repository.BaseRepository;
import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import java.util.Map;
public class BaseRepositoryImpl implements BaseRepository {
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
@Override
public void addObject(String statementName, Object obj) {
sqlSessionTemplate.insert(statementName, obj);
}
@Override
public int deleteObject(String statementName, String objId) {
return sqlSessionTemplate.delete(statementName, objId);
}
@Override
public int deleteForMap(String statementName, Map<String, Object> map) {
return sqlSessionTemplate.delete(statementName, map);
}
@Override
public Object findObject(String statementName, String objId) {
return sqlSessionTemplate.selectOne(statementName, objId);
}
@Override
public int updateObject(String statementName, Object obj) {
return sqlSessionTemplate.update(statementName, obj);
}
@Override
public int updateObjectState(String statementName, Map<String, Object> map) {
return sqlSessionTemplate.update(statementName, map);
}
@Override
public int getObjectCount(String statementName, String filter) {
Long obj = sqlSessionTemplate.selectOne(statementName, filter);
return obj.intValue();
}
@Override
public int getObjectCount(String statementName, Map<String, Object> map) {
Long obj = sqlSessionTemplate.selectOne(statementName, map);
return obj.intValue();
}
@Override
public Object findObject(String statementName, Map<String, Object> map) {
return sqlSessionTemplate.selectOne(statementName, map);
}
@Override
public List listByPage(String statementName, Map<String, Object> map,
int skipResults, int pageSize) {
return sqlSessionTemplate.selectList(statementName, map, new RowBounds(skipResults, pageSize));
}
@Override
public List listByPage(String statementName, String filter, int skipResults, int pageSize) {
return sqlSessionTemplate.selectList(statementName, filter, new RowBounds(skipResults, pageSize));
}
@Override
public List list(String statementName, String filter) {
return sqlSessionTemplate.selectList(statementName, filter);
}
@Override
public List list(String statementName, Map<String, Object> map) {
return sqlSessionTemplate.selectList(statementName, map);
}
}
3.书写service 方法
package com.example.demo.service;
import com.example.demo.domain.User;
import java.util.List;
public interface UserService {
List<User> getUser();
}
4.书写 serviceImpl 继承 BaseRepositoryImpl
package com.example.demo.service.impl;
import com.example.demo.domain.User;
import com.example.demo.repository.impl.BaseRepositoryImpl;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
@Service
public class UserServiceImpl extends BaseRepositoryImpl implements UserService {
@Override
public List<User> getUser() {
return list("UserMapper.getUser",new HashMap<>());
}
}
5.map.xml 书写方法:UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserMapper">
<select id="getUser" resultType="User">
select * from user
</select>
</mapper>
6.配置resultType 默认路径 application.properties 添加
mybatis.type-aliases-package:com.example.demo.domain
7. Controller 调用Service 接口
8.打包重新启动项目 访问接口:
http://localhost:8080/swagger-ui.html#/%E7%94%A8%E6%88%B7/getUserUsingGET
谢谢观看