标签:word dao 获取路径 ret 导致 private asics 表数据 list
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参数的作用主要用于:自动创建|更新|验证数据库表结构,有四个值:
create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。
validate :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
dialect
主要是指定生成表名的存储引擎为InneoDBshow-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进行测试接口
springboot+springcloud+vue学习(二)
标签:word dao 获取路径 ret 导致 private asics 表数据 list
原文地址:https://www.cnblogs.com/zhangxiaan/p/10219222.html