SpringBoot 的一些常用注解
调用数据库的几种方式
1.Spring Data JPA 方式
- 作用及目的
Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库。 此模块处理对基于JPA的数据访问层的增强支持。 它使构建使用数据访问技术。Spring驱动应用程序变得更加容易。在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。 必须编写太多样板代码来执行简单查询以及执行分页和审计。 Spring Data JPA旨在通过减少实际需要的工作量来显著改善数据访问层的实现。 - 如何使用
- 创建时引入
- 依赖添加
<!--mysql相关-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--Spring Data JPA相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
- application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/sql_table?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
server:
port: 8181
- 实体类注释使用
@Data //Lombook插件
@Entity
@Id
- 持久层
//持久层中的方法
public interface UserDao extends JpaRepository<User,Integer> {
}
//继承类JpaRepository中的方法
@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
List<T> findAll();
List<T> findAll(Sort var1);
List<T> findAllById(Iterable<ID> var1);
<S extends T> List<S> saveAll(Iterable<S> var1);
void flush();
<S extends T> S saveAndFlush(S var1);
void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch();
T getOne(ID var1);
<S extends T> List<S> findAll(Example<S> var1);
<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
2 MyBatis方式
- 理解
mybatis 方式有注解和配置文件的方式,我个人比较喜欢配置文件的方式,同时还有mybatis-plus 可以逆向构建实体类。我认为mybatis就类似于配对这种还有套娃,重要的是仔细,认真 - 如何使用
- 依赖的引入
<!--mybatis相关-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
- yml文件的配置
(为了之后使用就一起放上来俩个yml文件)
spring:
profiles:
active: dev
## springboot 1.X
resources:
static-locations:
# - classpath:resources
- classpath:static/css
- classpath:css
mvc:
static-path-pattern: /**
http:
multipart:
enabled: true
max-file-size: 50MB
max-request-size: 50MB
## springboot 2.X
servlet:
multipart:
enabled: true
max-file-size: 50MB
max-request-size: 50MB
- -dev.yml
server:
port: 8089
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/sql_table?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
thymeleaf:
cache: false
jpa:
database: mysql
show-sql: true
hibernate:
ddl-auto: update
resources:
static-locations: classpath:/templates/,classpath:/static/css,classpath:/static/js,classpath:/static/img,classpath:/static/images,classpath:/static/fonts,classpath:/static/dist,classpath:/view/,classpath:/public,classpath:/resources,classpath:/META-INF/resources
mybatis:
mapper-locations: classpath:mapping/*.xml
type-aliases-package: nuc.edu.mybatis.entity
logging:
file:
name: lab.log
level:
# root: info
nuc.edu.mybatis.Dao: DEBUG
# springboot 1.X
- 持久层
- 实体类中一对一关系,不用写@Entity @Id
- 持久层和mapping(yml中设置后可以叫mapping否则和dao层结构一致)中的名字一样。
- 其中方法名也要一致
- 代码
// 持久层代码
@Repository
public interface AdminDao {
List<Orders> findAllOrders();
}
// 配置文件 AdminDao.xml代码
//一对一 一对多关系
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="nuc.edu.mybatis.dao.AdminDao">
<resultMap id="findAllOrderMap" type="nuc.edu.mybatis.entity.Orders">
<id property="id" column="id"></id>
<result property="user_id" column="user_id"></result>
<result property="number" column="number"></result>
<result property="status" column="status"></result>
<result property="creat_time" column="creat_time"></result>
<association property="user" column="user_id" javaType="nuc.edu.mybatis.entity.User">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="password" column="password"></result>
<result property="email" column="email"></result>
</association>
<collection property="orderdetails" ofType="nuc.edu.mybatis.entity.OrderDetail">
<id property="id" column="id"></id>
<result property="orders_id" column="orders_id"></result>
<result property="items_id" column="items_id"></result>
<result property="items_num" column="items_num"></result>
<association property="goods" column="items_id" javaType="nuc.edu.mybatis.entity.Goods">
<id property="id" column="id"></id>
<result column="name" property="name"></result>
<result column="price" property="price"></result>
<result column="pic" property="pic"></result>
</association>
</collection>
</resultMap>
<select id="findAllOrders" resultMap="findAllOrderMap">
SELECT
orders_id,
number,
creat_time,
items_num,
username,
name,
price
FROM
user,
orders,
orderdetail,
items
where orders.status =1
and orders.user_id = user.id
and orderdetail.items_id = items.id
and orders.id = orderdetail.orders_id
and orders.number is NOT NULL
and orders.number!=""
ORDER BY orders.id DESC
</select>
</mapper>
这就是我比较常用的两种方式,共勉!!!!