springboot+springcloud+vue学习(二)

json 接口开发:

@DeleteMapping
@PostMapping    获取body中的实体(@RequestBody)
@GetMapping("/assent/{name}")     获取路径中的参数(@PathVariable)

log日志配置:

logging.path=/user/local/log

logging.level.com.favorites=DEBUG

logging.level.org.springframework.web=INFO

logging.level.org.hibernate=ERROR

mysql 和jpa的使用:

想要使用mysql 和jpa 需要在pom.xml中加入相关的包

<dependency>        

  <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>    

<dependency>        

  <groupId>mysql</groupId>        

  <artifactId>mysql-connector-java</artifactId>    

</dependency>

在配置文件中需要配置数据库连接,和jpa

spring.datasource.url=jdbc:mysql://localhost:3306/test

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver  //此项可检查数据库驱动是否正常

spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

spring.jpa.show-sql= true

其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值:

  1. create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

  2. create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

  3. update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

  4. validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

dialect 主要是指定生成表名的存储引擎为InneoDB
show-sql 是否打印出自动生产的SQL,方便调试的时候查看(这里给true 使用jpa自定义接口时方便检查)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

接下来就是创建实体,继承jpa接口 ,service层逻辑处理,controller对外接口访问

例:

@Entity
@Table(name = "T_SYS_USER") //数据库表名
public class Users implements Serializable{

   private static final long serialVersionUID = 1L;

@Id
@Column(name = "ID", nullable = false, length = 100) //@GeneratedValue 主键自增长
private String id;

@Column(name = "ROLE_ID", nullable = true, length = 100)
private String role_id;

@Column(name = "ORG_ID", nullable = true, length = 100)
private String org_id;

@Column(name = "NAME", nullable = true, length = 30)
private String name;

@Column(name = "PASSWORD", nullable = true, length = 30)
private String password;

@Column(name = "EMAIL", nullable = true, length = 100)
private String email;

@Column(name = "TEL", nullable = true, length = 12)
private String tel;

@Column(name = "NICKNAME", nullable = true, length = 20)
private String nickname;

@Column(name = "CREATE_USER" , nullable = true, length = 30)
private String createUser;

@Column(name = "CREATE_DATE")
private Date createDate;

@Column(name = "UPDATE_USER" , nullable = true, length = 30)
private String updateUser;

@Column(name = "UPDATE_DATE")
private Date updateDate;
对于在数据库不想生成的字段添加 @Transient 注解,数据库就不会生成相应的列

dao接口层只要继承JpaRepository类就可以

例:

public interface AssentBasicRepository extends JpaRepository<AssentBasic, String> {}  //AssentBasic为实体类,String为实体类主键的类型

继承jpa之后可以使用jpa封装好的接口 ,也可以根据jpa的约定定义方法名,jpa会根据方法名生成相应的接口

如:findByUserName jpa就会认为这个接口是一个以UserName字段为参数的全查询接口

getUsersByNameAndPassword  jpa会认为这是一个以Name和Password为参数获取Users实体的方法(具体相关定义规则,请自主查询)
另外要提的就是他的修改添加操作,走save()方法
除此之外jpa 还有它分页查询自动排序等功能 (此处先空着......后期补上)
还有就是自定义sql语句:接口名不能和jpa规则要求一样
//    @Query(value="SELECT * FROM T_MAP_UA WHERE UID=?1", nativeQuery=true)
// List<UsersAssents> selectByUid(String uid);

//    @Transactional     
// @Modifying
// @Query(value = "delete from T_ASSENT_BASIC where id =?1", nativeQuery = true)
// boolean deleteAssents(String id);

除查询之外,其他操作需要开启事物,在sql语句之上需要添加 @Transactional @Modifying 否则自定义sql语句会失败!

service层 定义需要调用的接口(完全自定义,供controller层调用)
public interface AssentBasicService {
List<AssentBasic> getAssentBasicList();

Object delAssentBasic(String id);

AssentBasic postAssentBasic(AssentBasic assent);
}
定义impl类:
@Service
public class AssentBasicImpl implements AssentBasicService {
@Autowired
AssentBasicRepository assentBasicRepository; //注入dao层继承jpa的方法
@Override
public List<AssentBasic> getAssentBasicList(){
return assentBasicRepository.findAll(); //调用jpa封装好的方法
}
}
定义controller类:
@RestController  //以json形式返回数据
@CrossOrigin //解决跨域问题
@RequestMapping("/v1") //前缀路径
public class AssentBasicController {
@Autowired
AssentBasicService assentBasicService; //注入service层
@GetMapping("/assent")   //get请求方式
@ResponseBody
public List<AssentBasic> getAssentsList() {
return assentBasicService.getAssentBasicList(); //调用service 层中的方法返回json数据
}

@DeleteMapping("/assent/{assentId}")
@ResponseBody
public Object delAssentBasic(@PathVariable String assentId) { //@PathVariable 获取请求路径中的参数
    return assentBasicService.delAssentBasic(assentId);
}

@PostMapping("/assent")
@ResponseBody
public AssentBasic postAssentBasic(@RequestBody AssentBasic assent) { //@RequestBody 获取body主体中的实体对象(通常以json形式传递)
    if(assent.getId() ==null){
assent.setId(generatePrimaryKey.generatePrimaryKey());
}
return assentBasicService.postAssentBasic(assent);
}
}
后台接口逻辑处理完毕,启动项目访问地址即可获得数据,也可通过Postman进行测试接口
 


猜你喜欢

转载自www.cnblogs.com/zhangxiaan/p/10219222.html