Spring Boot 下配置SpringDataJpa

来源:互联网 发布:酷狗音乐mac版 编辑:程序博客网 时间:2024/05/18 03:45

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.Driverpostgresql:#DB properties: spring.datasource.url = jdbc:postgresql://192.168.237.1:5432/postgresspring.datasource.username = postgresspring.datasource.password = postgresspring.jpa.properties.datasource.driver-class-name=org.postgresql.Driverspring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL9Dialect#JPA Configuration:spring.datasource.testWhileIdle = truespring.datasource.validationQuery = SELECT 1# Show or not log for each sql queryspring.jpa.show-sql = true# Hibernate ddl auto (create, create-drop, update)spring.jpa.hibernate.ddl-auto = update# Naming strategyspring.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层:

@Servicepublic 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);}
1 0
原创粉丝点击