0%

SpringBoot-数据访问

SpringBoot-数据访问

1、JDBC

1
2
3
4
5
6
7
8
9
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

application.yml

1
2
3
4
5
6
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jdbc
username: root
password: 123456

2、Druid

1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>

application.yml

其它配置见Druid

1
2
3
4
5
6
7
8
9
10
11
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/jdbc
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
druid:
stat-view-servlet:
login-username: admin
login-password: admin

3、MyBatis

步骤:

  1. 配置数据源相关属性
  2. 给数据库建表
  3. 创建JavaBean

注解版

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
29
30
/**
* @Mapper作用:指定这是一个操作数据库的mapper
*/
//
@Mapper
public interface UserMapper {
@Select("select * from user where id=#{id}")
public User getUserById(Integer id);

@Select("select * from user")
List<User> getUsers();

/**
* 返回影响多少行
* @param id
* @return
*/
@Delete("delete from user where id=#{id}")
Integer deleteUserById(Integer id);

/**
* 当添加操作需要返回自增主键时可以使用@Options注释。
* 添加属性useGeneratedKeys = true和keyProperty = "id"即可在数据添加后获取添加数据的ID值。
* @param user
* @return
*/
@Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into user(username) values(#{username})")
int insertUser(User user);
}
1
2
3
4
#开启驼峰命名匹配规则
mybatis:
configuration:
map-underscore-to-camel-case: true

可在Application上使用@MapperScan(value="com.zephon.mapper")进行批量扫描,避免写太多的@Mapper

配置文件版

1
2
3
4
5
mybatis:
# 指定全局配置文件的位置
config-location: classpath:mybatis/mybatis-config.xml
# 指定SQL映射文件的位置
mapper-locations: classpath:mybatis/mapper/*.xml
1
2
3
4
5
@Mapper
public interface UserMapper{
User getUserById(Integer id);
void insertUser(User user);
}
1
2
3
4
5
6
7
8
9
10
11
<!-- mybatis-config.xml -->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 驼峰命名法 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- UserMapper -->
<?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="com.zephon.mapper.UserMapper">
<select id="getUserById" resultType="com.zephon.bean.User">
select * from user where id=#{id}
</select>
<insert id="insertUser">
insert into user(username) values(#{username})
</insert>
</mapper>

4、SpringData JPA

特点

SpringData为我们提供使用统一的API来对数据访问层进行操作,这主要是Spring Data Commons项目来实现的。Spring Data Commons让我们在使用关系型或者非关系型数据访问技术时基于Spring提供的统一标准,标准包含了CRUD、查询、排序和分页的相关操作

步骤

  1. 编写一个实体类(bean)和数据表进行映射,并且配置好映射关系

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    /**
    * 使用JPA注解配置映射关系
    * @Entity:告诉JPA这是一个实体类(和数据表映射的类)
    * @Table(name="tbl_user"):指定和哪个数据表对应,
    * 如果省略默认表名是类名首字母小写
    */
    @Entity
    @Table(name="tbl_user")
    public class User {
    /**
    * @Id:标明主键
    * @GeneratedValue(strategy = GenerationType.IDENTITY):自增主键
    */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    /**
    * 使用@Column表明这是与表中某列对应
    * name注明表中对应列名,默认是属性名
    */
    @Column(name="user_name",length = 50)
    private String username;

  2. 编写一个Dao接口来操作实体类对应的数据表(Repository)

    1
    2
    3
    4
    5
    6
    7
    /**
    * 继承JpaRepository来完成对数据库的操作
    * 泛型中,分别是实体类和实体类对应的主键
    */
    public interface UserRepository extends JpaRepository<User,Integer> {

    }
  3. 基本的配置

    1
    2
    3
    4
    5
    6
    7
    8
    spring: 
    # jpa 配置
    jpa:
    hibernate:
    # 更新或创建数据表结构
    ddl-auto: update
    # 控制台显示SQL
    show-sql: true
  4. 在Controller中直接使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @RestController
    public class UserController {
    @Autowired
    UserRepository userRepository;

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable("id")Integer id){
    User user = userRepository.findById(id).get();
    return user;
    }
    @GetMapping("/user")
    public User insetUser(User user){
    User save = userRepository.save(user);
    return save;
    }
    }