重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
JPA=Java Persistence API,Java持久层API。JDK5引入JPA ORM目的:简化Java EE开发,整合ORM技术。JPA定义了JPQL(Java Persistence Query Language)。
成都创新互联服务项目包括洛宁网站建设、洛宁网站制作、洛宁网页制作以及洛宁网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,洛宁网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到洛宁省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
Spring Data JPA默认集成的JPA Provider是Hibernate。
a.在pom.xml中增加JPA依赖
b.然后增加MySQL依赖:
c.在Model类前增加标注@Entity
@Entity
public class user {
d.在ID字段钱增加标注@Id和 @GeneratedValue
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
e.扩展数据仓库接口:
public interface UserRepository extends CrudRepository
f.在控制类前面增加标注
@Controller
@RequestMapping(path="/demo")
public class UserController {
g.在控制类仓库属性前面增加标注
@Autowired
private UserRepositoryrepository;
h.在控制类操作函数之中和前面增加标注
@GetMapping(path ="/add")
public @ResponseBody String addNewUser(@RequestParam Stringname,@RequestParam Stringemail) {
useru =new user();
u.setName(name);
u.setEmail(email);
repository.save(u);
return "Saved";
}
@Query("select id,username,sex,address from #{#entityName} u where u.username=:name")
List
i.在Application类前面增加标注
@SpringBootApplication
public class Application {
public static void main(String[]args) {
SpringApplication.run(Application.class,args);
}
}
J.在Application.properties中增加配置项
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=springuser
spring.datasource.password=ThePassword
k.注解解说
@Entity说明此类是实体类,使用默认ORM规则,即class名即数据库表中表名,class字段名即表中的字段名。如果想改变这种默认规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Column来改变class中字段名与db中表的字段名的映射规则。
@Query 这是JPA支持重量级查询方式,有两种方式:一种是JPQL的SQL语言方式,一种是原生SQL的语言。常用情景如下:
***like表达式:
@Query(value = "select id,username,sex,address fromUserModel b where b.name like %:name%")
List
***原生SQL语言
@Query(value = "select * fromuserb where b.username=?1", nativeQuery = true)
List
***使用@Param注解注入参数
@Query(value = "select id,username,sex,address from UserModel b where b.username = :name AND b.address=:address AND b.sex=:sex")
List
***SPEL表达式
@Query(value = "select * from #{#entityName} b where b.name=?1", nativeQuery = true)
List
l.JPA框架图
m.JPQL语法
基本格式如下:
select 实体别名.属性名, 实体别名.属性名from实体名as实体别名where实体别名.实体属性op比较值
表达式 | 查询方法 | hql查询语句 |
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstname,findByFirstnameIs,findByFirstnameEqual | … where x.firstname = 1? |
Between | findByStartDateBetween | … where x.startDate between 1? and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age⇐ ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 (parameter bound with appended %) |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 (parameter bound with prepended %) |
Containing | findByFirstnameContaining | … where x.firstname like ?1 (parameter bound wrapped in %) |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection age) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |
SpringBoot都支持mybatis和Hibernate,实际上它们都属于ORM框架,整体架构也差不多,如下:
对比项 | MyBatis | Hibernate |
JDBC | 支持 | 支持 |
JTA事务 | 支持 | 支持 |
SessionFactoryBuilder | 支持 | 支持 |
SessionFactory | 支持 | 支持 |
Session | 支持 | 支持 |
开发难度 | 框架掌握简单 | 框架掌握复杂 |
SQL语句 | 支持原生SQL,便于性能优化 | HQL,一般不需要编写原生SQL语句,性能较低 |
缓存 | 支持二级缓存,可能存在脏数据 | 支持二级缓存 |
可移植性 | 较差 | 较好 |
自动化 | 半自动 | 全自动 |
安全性 | 较差 | 较好 |
日志 | 较差 | 较好 |