Spring Boot
ORM 框架 Hibernate
接口 JpaRepository
jar包
maven:
<dependency
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
gradle:
compile('org.springframework.boot:spring-boot-starter-data-jpa')
配置文件application.properties,springboot下会自动加载配置文件
Mysql:
#DB properties:
#spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test
#spring.datasource.username = root
#spring.datasource.password = root
#spring.datasource.driverClassName = com.mysql.jdbc.Driver
postgresql:
#DB properties:
spring.datasource.url = jdbc:postgresql://192.168.237.1:5432/postgres
spring.datasource.username = postgres
spring.datasource.password = postgres
spring.jpa.properties.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL9Dialect
#JPA Configuration:
spring.datasource.testWhileIdle = true
spring.datasource.validationQuery = SELECT 1
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update
# Naming strategy
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
pojo映射实体类:
@Entity注释指名这是一个实体Bean,@Table注释指定了Entity所要映射带数据库表,@Table.name()用来指定映射表的表名
@Column注释定义了将成员属性映射到关系表中的哪一列和该列的结构信息,属性如下:
name:映射的列名。如:映射tbl_user表的name列,可以在name属性的上面或getName方法上面加入;
unique:是否唯一;
nullable:是否允许为空;
length:对于字符型列,length属性指定列的最大字符长度;
insertable:是否允许插入;
updatetable:是否允许更新;
columnDefinition:定义建表时创建此列的DDL;
secondaryTable:从表名。如果此列不建在主表上(默认是主表),该属性定义该列所在从表的名字。
@Id注释指定表的主键,它可以有多种生成方式:
TABLE:容器指定用底层的数据表确保唯一;
SEQUENCE:使用数据库的SEQUENCE列来保证唯一(Oracle数据库通过序列来生成唯一ID);
IDENTITY:使用数据库的IDENTITY列来保证唯一;
AUTO:由容器挑选一个合适的方式来保证唯一;
NONE:容器不负责主键的生成,由程序来完成。
@GeneratedValue注释定义了标识字段生成方式。
@Temporal注释用来指定java.util.Date或java.util.Calender属性与数据库类型date、time或timestamp中的那一种类型进行映射。
@Temporal(value=TemporalType.TIME)
@Entity
@Table(name = "tbl_system_parameter")
public class SystemParameters implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid")
private String uuid;
@Column(name = "uuid",nullable=false)
private String key;
private String value;
private String reserve1;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getReserve1() {
return reserve1;
}
public void setReserve1(String reserve1) {
this.reserve1 = reserve1;
}
}
service层:
@Service
public class SystemParamSeviceImpl implements SystemParamService {
/**
* 日志记录.
*/
private static final Logger logger = LoggerFactory.getLogger(SystemParamSeviceImpl.class);
@Autowired
private SystemParametersDao paramDao;
//查找所有
@Override
public List<SystemParameters> findAll() {
try {
return paramDao.findAll();
} catch (Exception e) {
logger.error("find systemparameters list failure", e);
return null;
}
}
//保存或者修改list<pojo>
@Override
public void save(List<SystemParameters> params) {
try {
paramDao.save(params);
} catch (Exception e) {
logger.error("save systemparametersList failure: ", e);
throw new RuntimeException(e);
}
}
//保存或者修改pojo
@Override
public void save(SystemParameters systemParameters) {
try{
paramDao.save(systemParameters);
}catch(Exception e){
logger.error("save systemparameters failure: ", e);
throw new RuntimeException(e);
}
}
//通过id删除
@Override
public void delete(String uuid) {
try {
paramDao.delete(uuid);
} catch (Exception e) {
logger.error("delete systemparameters failure: ", e);
throw new RuntimeException(e);
}
}
//查找通过key
@Override
public List<SystemParameters> findByKey(String key) {
List<SystemParameters> list ;
try {
list = paramDao.findByKey(key);
} catch (Exception e) {
logger.error("find systemparameters by key failure: ", e);
return null;
}
return list;
}
//修改value通过匹配key
@Override
@Transactional
public void modifySystemParameters(String key, String value) {
try {
paramDao.modifySystemParameters(value,key);
} catch (Exception e) {
logger.error("update systemParameters by key failure: ", e);
throw new RuntimeException(e);
}
}
}
dao层:
只需要继承Repository接口 底层接口是JpaRepository Spring Data 自己封装的JPA接口类
还有CrudRepository接口,继承Repository,有基本的增删改查的方法
PagingAndSortingRepository接口,继承Repository,有分页和排序的方法
也可以自己写JPQl,和HQL类似,用接口@Modifying,@Query
Spring Data JPA 实现的方法都是使用事务的。针对查询类型的方法,其等价于 @Transactional(readOnly=true)
增删改类型的方法,等价于 @Transactional
用JPQL的时候进行修改和删除的时候,需要@Transactional 显式指定事务属性
public interface SystemParametersDao extends Repository<SystemParameters,String>{
List<SystemParameters> findAll();
//JPQl,修改和删除需要用@Modifying注解,且调用的方法需要加事务
@Modifying
@Query("update SystemParameters s set s.value = ?1 where s.key = ?2")
void modifySystemParameters(String value, String key);
//JPQl查找
@Query("select u from SystemParameters u where key like %:un%")
List<SystemParameters> findByKey(@Param("un") String key);
<S extends SystemParameters> Iterable<S> save(Iterable<S> entities);
<S extends SystemParameters> S save(S entity);
void delete(String id);
}