7月31号

昨天忙着写一整套crud业务代码了,没顾得上debug看公司业务流程

视图

  • 建立视图,主键 主表选择,数据库脚本,

表关联,一对一关联 一对多关联。增加字段

  • 界面视图,
  • 智能搜索app
  • 数据库对接 mongdb

开发手册

DO / BO / DTO / VO / AO / PO / UID

  • DO (Domain Object): 邻域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

  • BO (business object):业务对象,从业务模型的角度看,见UML元件领域模型中的领域对象。封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。

  • DTO (Data Transfer Object): 数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象

  • VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

log4jdbc

Spring Data JPA默认采用Hibernate实现。Hibernate的showSql配置只打印SQL,但并不打印SQL参数、执行时间等信息,如果需要这些信息,可以使用第三方工具log4jdbc来完成

JDBC:Java Database Connectivity, 有四种连接的方式

主要用途是与数据库建立连接,发送sql语句,处理结果

可以直接调用sql命令,并与其他的数据库连接API易于使用,低级接口

公司接的大杯咖啡☕️,好评,没糖喝着喝着也习惯了

log4jdbc是一个JDBC驱动器,能够记录SQL日志SQL执行时间等信息。log4jdbc使用SLF4J(Simple Logging Facade)作为日志系统。

特性

  • 完全支持JDBC3和JDBC4
  • 配置简单,一般情况下你只需要将你的DriverClass改为:net.sf.log4jdbc.DriverSpy,并在你的jdbcUrl之前拼接jdbc:log4
  • 自动将占位符(?)替换为实际的参数
  • 能够及时方便地显示SQL的实际执行时间
  • 显示SQL Connection的数量的信息
  • 能在JDK1.4+和SLF4J1.X上和大多数常见的JDBC驱动协同工作
  • 支持现有大部分JDBC驱动。
  • 能够自动把SQL变量值加到SQL输出日志中,改进易读性和方便调试。
  • 能够快速标识出应用程序中执行比较慢的SQL语句
  • 能够生成SQL连接数信息帮助识别连接池/线程问题。
  • open source
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.googlecode.log4jdbc</groupId>
<artifactId>log4jdbc</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>

Jpa

jpa拥有哪些注解

1
2
3
4
5
6
7
@Entity  声明类为实体或表,跟数据库是一一映射的,springboot启动的时候会扫描
@Table 声明表名字
@Id 指定的类的属性,用于识别一个表中的主键
@Transient 指定的属性 它是不持久的,即该值永远不会存储在数据库中
@Column 指定持久属性栏属性,用来标识实体类中属性与数据表中字段的对应关系,name=数据库中表字段的名字


配置

依赖

1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置文件yml

1
2
3
4
5
6
7
8
9
10
11
12
spring:
datasource:
url: jdbc:mysql://localhost:3306/mytest
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver //驱动
jpa:
hibernate:
ddl-auto: update //自动更新
show-sql: true //日志中显示sql语句

Hibernate是一个开放源代码对象关系映射框架(不需要写SQL),它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,(我的理解是后台对数据进行操作,然后他自动写入数据库,而写入数据库是需要sql语句的,他这边是自动生成的)自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是我们MVC中的数据持久层->在编写程序中的DAO层…

首先,我们来回顾一下我们在DAO层写程序的历程吧:

  1. 在DAO层操作XML,将数据封装到XML文件上,读写XML文件数据实现CRUD
  2. 在DAO层使用原生JDBC连接数据库,实现CRUD
  3. 嫌弃JDBC的Connection\Statement\ResultSet等对象太繁琐,使用对原生JDBC的封装组件–>DbUtils组件

Controller注解

@RequestMapping注解是用来映射请求的,指明处理器可以处理哪些URL请求,可以用在类和方法上,

并且可以通过@PathVariable注解获取作为方法的参数,也可以上通配符筛选请求地址。

1
2
3
4
5
6
7
8
9
@Controller
  @RequestMapping("/user")
  public class UserController{

  @RequestMapping("/users")
  public String users() {
  return "users";
  }
  }

此时请求users方法的URL方法的URL路径就是…/user/users

@PreAuthorize 注解 方法前拦截判断是否有权限

@OrderBy

1
2
3
4
5
6
7
@Table(name = "MAPKEY_PERSON")
public class Person {

@OneToMany(targetEntity = Book.class, cascade = CascadeType.ALL, mappedBy = "person")
@OrderBy(name = "isbn ASC, name DESC")
private List books = new ArrayList();

Transient

@Transient表示该属性并不是一个到数据库表的字段的映射,

指定的这些属性不会被持久化,ORM框架将忽略该属性。

如果一个属性并非数据库表的字段映射。就务必将其标示为@Transient。

否则,ORM框架默认其注解为@Basic

Menu