Spring Boot 下配置SpringDataJpa

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值