MyBatis Spring Boot集成后的数据访问层代码重构案例
在使用MyBatis和Spring Boot进行项目开发时,我们通常会遇到一些重复的代码,例如数据访问层(DAO)的接口和实现。为了提高代码的可维护性和可读性,我们可以对这些代码进行重构。下面是一个简单的数据访问层代码重构案例:
- 首先,创建一个通用的Mapper接口,例如
BaseMapper
:
public interface BaseMapper<T> {
T findById(Long id);
List<T> findAll();
int insert(T entity);
int update(T entity);
int deleteById(Long id);
}
- 然后,创建一个通用的MyBatis映射文件
BaseMapper.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="com.example.demo.mapper.BaseMapper">
<select id="findById" resultType="T">
SELECT * FROM ${tableName} WHERE id = #{id}
</select>
<select id="findAll" resultType="T">
SELECT * FROM ${tableName}
</select>
<insert id="insert" parameterType="T">
INSERT INTO ${tableName} (...) VALUES (...)
</insert>
<update id="update" parameterType="T">
UPDATE ${tableName} SET ... WHERE id = #{id}
</update>
<delete id="deleteById">
DELETE FROM ${tableName} WHERE id = #{id}
</delete>
</mapper>
注意:在这个映射文件中,我们使用了${tableName}
作为动态表名,这样我们就可以在不同的实体类中使用相同的SQL语句。
- 接下来,为每个实体类创建一个Mapper接口,并继承
BaseMapper
:
public interface UserMapper extends BaseMapper<User> {
}
- 在
application.properties
或application.yml
中配置MyBatis的扫描路径:
mybatis.mapper-locations=classpath:mapper/*.xml
- 最后,在Service层或Controller层调用Mapper接口的方法进行数据访问:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User findById(Long id) {
return userMapper.findById(id);
}
public List<User> findAll() {
return userMapper.findAll();
}
public int insert(User user) {
return userMapper.insert(user);
}
public int update(User user) {
return userMapper.update(user);
}
public int deleteById(Long id) {
return userMapper.deleteById(id);
}
}
通过这种方式,我们可以将重复的数据访问层代码抽象出来,提高代码的可维护性和可读性。当然,这只是一个简单的示例,实际项目中可能需要根据具体需求进行更多的定制化开发。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo6@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论