SpringBoot2零基础到精通之数据库专项精讲

网友投稿 274 2022-08-18


SpringBoot2零基础到精通之数据库专项精讲

目录1 数据库连接1.1 配置数据库连接信息1.2 整合Druid数据源2 SpringBoot整合MyBatis2.1 配置文件开发2.2 纯注解开发3 SpringBoot整合MyBatis-Plus3.1 普通的CRUD方法3.2 MyBatis-plus的分页实现

1 数据库连接

1.1 配置数据库连接信息

如果想要使用数据库连接池连接数据库进行SQL操作的话,在SpringBoot中需要经过如下三个步骤: 第一步: 导入jdbc开发的启动场景

org.springframework.boot

spring-boot-starter-jdbc

第二步: 导入数据库驱动 之所以框架底层没有自动导入数据库的驱动,是因为不同的数据库使用的驱动不同,这需要用户根据自己的需要来进行选择。虽然框架没有对指定数据库驱动进行自动导入,但是对不同数据库驱动的版本都进行了版本仲裁,也就是说我们可以直接导入无需定义版本号。当然也可以自定义版本号,maven会根据自身的就近依赖原则导入自定义的版本

mysql

mysql-connector-java

5.1.32

第三步: 配置数据库连接的配置文件

# 设置数据库spring:  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://localhost:3306/test    username: root    password: "123456"

1.2 整合Druid数据源

SpringBoot框架中默认使用的是Hikari数据源,这也就意味着如果要是想要修改数据源的话,无非就是两种方法:自定义配置类、引入相应的启动器依赖再配置配置文件

第一步: 引入Druid的启动器依赖

com.alibaba

druid-spring-boot-starter

1.1.17

第二步: 配置配置文件(选学,框架一般都有默认的配置)

spring:

datasource:

url: jdbc:mysql://localhost:3306/db_account

username: root

password: 123456

driver-class-name: com.mysql.jdbc.Driver

druid:

aop-patterns: com.atguigu.admin.* #监控SpringBean

filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙)

stat-view-servlet: # 配置监控页功能

enabled: true

login-username: admin

login-password: admin

resetEnable: false

web-stat-filter: # 监控web

enabled: true

urlPattern: /*

exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'

filter:

stat: # 对上面filters里面的stat的详细配置

slow-sql-millis: 1000

logSlowSql: true

enabled: true

wall:

enabled: true

config:

drop-table-allow: false

2 SpringBoot整合MyBatis

mybatis开发的时候有两种开发模式:使用配置文件进行开发、纯注解开发,二者各有优点。使用配置文件进行开发在处理更加复杂的SQL语句的时候逻辑更加清晰,纯注解开发比较适合简单的SQL语句,于是我们可以在开发的时候混合使用两种方法,这样可以大大提升开发效率。

2.1 配置文件开发

第一步: 引入启动器依赖 小知识:SpringBoot官方的所有技术启动器的命名都是spring-boot-starter-xxx而第三方技术的启动器命名则是xxx-spring-boot-starter。值得注意的是:MyBatis的启动器内部引用了dbc开发的启动场景,所以无需重复引用

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.4

第二步: 编写mapper接口并标注@Mapper注解

@Mapper

public interface StuMapper {

Stu queryBySid(int sid);

}

第三步: 编写映射文件并绑定mapper接口

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

select * from stu where sid=#{sid}

第四步: 在配置文件中指定之前MyBatis配置文件的各种信息

# mybatis的所有配置mybatis:mapper-locations: classpath:com.xiaochen.mapper/*.xml# 所有的全局配置文件的配置项在这下面配置configuration:# 开启驼峰命名数据库中字段值的下划线‘_’加字母会被认为是大写map-underscore-to-camel-case: true

2.2 纯注解开发

第一步: 引入启动器依赖

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.4

第二步: 编写mapper接口并标注@Mapper注解,使用对应的注解进行SQL语句操作

@Mapper

public interface StuMapper {

@Select("select * from stu where sid=#{sid}")

Stu queryBySid(int sid);

}

3 SpringBoot整合MyBatis-Plus

3.1 普通的CRUD方法

MyBatis-plus的启动器内部不止引用了dbc开发的启动场景,还导入了MyBatis的启动器,所以这两个都无需再重复引用 第一步: 引入启动器依赖

com.baomidou

mybatis-plus-boot-starter

3.4.1

mapper层:

编写mapper接口标注@Mapper注解,并继承BaseMapper类。这是MyBatis-plus的独有方式,这样做的好处是继承之后直接使用父类中已经写好的简单CRUD方法,但是一些复杂的SQL业务还是需要使用映射文件来实现的,进一步提高了代码开发的效率

@Mapper

public interface StuMapper extends BaseMapper {

}

MyBatis-plus进行数据库表的增删改查的时候,默认把继承BaseMapper类时传进去的泛型名称当做表名去查找,如果泛型与数据库中的表名不对应的话,可以在实体类使用注解标识,除此之外注解还可以用来标识主键和非表中字段属性

@NoArgsConstructor

@AllArgsConstructor

@Data

@TableName("stu")

public class Stu {

// 表名该字段是定义的临时变量,并不存在于数据库的表中

@TableField(exist = false)

private String gender;

// 标明表的主键

@TableId

private int sid;

private String sname;

private String age;

private String course;

private int cardid;

}

编写映射文件并绑定mapper接口(如果有的话)。MyBatis-plus自动配置好了默认的mapper-locations,也就是映射文件的存放位置为classpath:/mapper/**/*.xml,于是我们就按照它的默认规则在静态资源路径下mapper文件夹下。本案例中没有映射文件,于是就不创建

如果有需要的话,还可以在配置文件中指定MyBatis-plus配置文件的各种信息

service层:

service接口继承IService类

public interface StuService extends IService {

}

service的实现类先是继承ServiceImpl并传两个泛型(mapper接口,实体类),然后实现service接口

@Service

public class StuServiceImpl extends ServiceImpl implements StuService {

}

controller层: 直接使用service继承类的简单方法

@Controller

public class TableController {

@Autowired

StuServiceImpl stuService;

/**

* 点击Advanced table按钮,进行页面转发,并携带一个表格数据

* @param model 用于存储数据

* @return 页面转发forward 到 /table/dynamic_tablenbNTXG.html

*/

@GetMapping("/dynamic_table")

public String dynamic_table(Model model) {

// 从数据库中查出user表进行展示

List list = stuService.list();

model.addAttribute("stus", list);

return "/table/dynamic_table";

}

}

3.2 MyBatis-plus的分页实现

MyBatis-plus的分页功能实现需要先自定义一个配置类,向容器中注册一个Interceptor

@Configuration

public class MyBatisConfig {

@Bean

public MybatisPlusInterceptor mybatisPlusInterceptor() {

MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnbNTXGnerInterceptor();

paginationInnerInterceptor.setOverflow(true);

paginationInnerInterceptor.setMaxLimit(500L);

interceptor.addInnerInterceptor(paginationInnerInterceptor);

return interceptor;

}

}

然后就可以像普通的CRUD操作一样,直接使用service继承类的分页的相关方法即可

@GetMapping("/dynamic_table")

public String dynamic_table(@RequestParam(value = "pn", defaultValue = "1")Integer pn, Model model) {

// 分页从数据库中查出stu表的所有数据,当前页、总页数、总条数……

Page stuPage = new Page<>(pn, 1);

Page page = stuService.page(stuPage);

model.addAttribute("page", page);

return "/table/dynamic_table";

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MybatisPlus EntityWrapper如何自定义SQL
下一篇:关于EntityWrapper的in用法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~