网站首页 > 基础教程 正文
概要
通常在Java Web开发初期,技术选型搭框架时,往往都针对选定好的一个库类型进行开发,比如oracle、sqlserver、mysql等,传统的mybatis都有固化的sql,如果要换个库,不同库类型的语法不同,就要重新适配修改sql,因此,持久层框架可以选用Hibernate,结合spring-data-jpa,或Mybatis-plus,方便了CRUD的操作,无需配置xml写sql,在DAO层继承类,实现操作方法。当然,对于复杂的子查询再关联,也都有相应处理方法,也都可以写原生sql。
整体架构流程
spring+springMVC+hibernate+spring-data-jpa
开源的【基础数据平台】就是这个结构,链接介绍在尾部。
或springboot+hibernate+spring-data-jpa
或springboot+mybatis-plus
开源的【Jeecg】就是这个结构
技术名词解释
- spring-data-jpa
是Spring提供的一个用于简化数据访问层的框架。它是基于JPA规范实现的,并在Hibernate之上提供了更高层次的抽象,使得开发者可以更加方便地进行数据库操作。
- Mybatis-plus
简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它继承了MyBatis的所有特性并拥有MyBatis的所有解决方案。
技术细节
- spring-data-jpa使用
// User.java (使用JPA注解的实体类)
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
// ...
}
// DAO层 UserRepository.java (继承JpaRepository)
public interface UserRepository extends JpaRepository<User, Long> {
// 可以自定义查询方法,例如:
User findByUsername(String username);
}
// UserService.java (使用Spring Data JPA的Service层)
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User getUserByUsername(String username) {
return userRepository.findByUsername(username);
}
}
- Mybatis-plus使用
// User.java (实体类)
@Data
@TableName("users")
public class User {
private Long id;
private String username;
// ...
}
// DAO层 UserMapper.java (继承BaseMapper)
public interface UserMapper extends BaseMapper<User> {
// 可以自定义方法,如果需要的话
}
// UserService.java (使用MyBatis-plus的Service层)
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.selectById(id);
}
}
小结
JPA更适合事务性系统,MyBatisPlus更适合做分析型系统。
附:
JPA支持接口规范方法名查询,一般查询方法以 find、findBy、read、readBy、get、getBy为前缀,JPA在进行方法解析的时候会把前缀取掉,然后对剩下部分进行解析。
各实体的属性均可拼接作为方法名,比如实体有code,name 两个属性,查询的方法就是
findByCodeAndName(code,name);
- 上一篇: Ajax异步操作集合啦
- 下一篇: web前端的左侧导航狼,难道你不想试试吗?
猜你喜欢
- 2025-05-23 一文了解 Telerik Test Studio 测试神器
- 2025-05-23 python+selenium做ui自动化测试用法必会
- 2025-05-23 程序猿看小说还要去找TXT?自己动手爬一个TXT才是正确的打开方式
- 2025-05-23 web前端的左侧导航狼,难道你不想试试吗?
- 2025-05-23 Ajax异步操作集合啦
- 2025-05-23 Python爬虫利器:requests-html 深度探究
- 2025-05-23 京东商品评论太多,不好抓取?带你一键爬取京东商品所有评论
- 2025-05-23 用golang抓取网页有多简单?
- 2025-05-23 jQuery EasyUI使用教程:在数据网格中扩展行显示详细信息
- 2024-07-21 使用selenium轻松实现元素拖拽(selenium拖动滑块)
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)