uc網(wǎng)站怎么做鄭州網(wǎng)絡(luò)營銷公司哪個好
目錄
一、JDBC規(guī)范【了解】
1. JDBC介紹
2. JDBC示例
3. JDBC的問題
二、MyBatis入門【重點】
1. Mybatis是什么
2. Mybatis使用步驟
3. Mybatis入門案例
1.創(chuàng)建SpringBoot工程
2.創(chuàng)建Mapper
3.功能測試
三、連接池【了解】
1. 什么是連接池
2. 有哪些數(shù)據(jù)庫連接池
3. 如何在項目里使用Druid連接池
四、Lombok【重點】
1. Lombok介紹
2. Lombok用法
3. 使用示例
一、JDBC規(guī)范【了解】
1. JDBC介紹
Java DataBase Connectivity,是Java連接數(shù)據(jù)庫,是Sun公司提供的的API規(guī)范,用于執(zhí)行SQL語句。是一切Java操作數(shù)據(jù)庫的基礎(chǔ)技術(shù)。
Java里的“規(guī)范”,通常指的是接口
JDBC的作用:實現(xiàn)Java程序?qū)Σ煌瑪?shù)據(jù)庫的統(tǒng)一訪問
數(shù)據(jù)庫驅(qū)動:由數(shù)據(jù)庫廠商提供的,實現(xiàn)了JDBC接口規(guī)范的一些API實現(xiàn)類,這些類打成jar包,我們稱為驅(qū)動包
-
操作什么數(shù)據(jù)庫,就要有什么驅(qū)動包
-
如果要操作MySQL,就必須有MySQL驅(qū)動包:我們有maven坐標(biāo)
<dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version>
</dependency>
2. JDBC示例
準(zhǔn)備數(shù)據(jù)庫表
create database if not exists db3;
use db3;
create table user(id int unsigned primary key auto_increment comment 'ID',name varchar(100) comment '姓名',age tinyint unsigned comment '年齡',gender tinyint unsigned comment '性別, 1:男, 2:女',phone varchar(11) comment '手機號'
) comment '用戶表';insert into user(id, name, age, gender, phone) VALUES (null,'白眉鷹王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛獅王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龍王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');
準(zhǔn)備實體類
public class User {private Integer id;private String name;private Integer age;private Integer gender;private String phone;//get 和 set方法,略//toString方法,略
}
JDBC示例
package com.itheima;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;public class DemoJdbc {public static void main(String[] args) throws Exception {//1. 注冊驅(qū)動Class.forName("com.mysql.cj.jdbc.Driver");//2. 獲取連接Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");//3. 創(chuàng)建SQL執(zhí)行平臺PreparedStatement pstmt = conn.prepareStatement("select * from user");//4. 執(zhí)行SQLResultSet resultSet = pstmt.executeQuery();//5. 處理結(jié)果List<User> userList = new ArrayList<>();while (resultSet.next()) {User user = new User();int id = resultSet.getInt("id");user.setId(id);String name = resultSet.getString("name");user.setName(name);int age = resultSet.getInt("age");user.setAge(age);int gender = resultSet.getInt("gender");user.setGender(gender);String phone = resultSet.getString("phone");user.setPhone(phone);userList.add(user);}//6. 釋放資源resultSet.close();pstmt.close();conn.close();userList.forEach(System.out::println);}
}
3. JDBC的問題
-
硬編碼問題:數(shù)據(jù)庫連接信息等等參數(shù),都在Java源碼里寫死了。如果將來部署到生產(chǎn)環(huán)境后,需要調(diào)整配置,就不得不修改源碼
Mybatis整合SpringBoot,把所有參數(shù)寫到了配置文件,可以很方便的修改,而不用修改源碼
-
操作太繁瑣:執(zhí)行一條SQL語句,要寫十幾行甚至幾十行代碼
Mybatis對JDBC做了再封裝,執(zhí)行一條SQL只需要很少的代碼就能實現(xiàn)
-
性能不夠強:每次操作數(shù)據(jù)庫,Java程序都會與數(shù)據(jù)庫建立連接、創(chuàng)建Connection對象;操作完成要釋放關(guān)閉掉。在數(shù)據(jù)庫操作高峰期,會有頻繁的對象創(chuàng)建與銷毀,非常消耗性能
Mybatis使用了連接池技術(shù)解決這個問題
二、MyBatis入門【重點】
1. Mybatis是什么
MySQL是持久層Dao層的框架,它用于簡化JDBC的操作。
拓展:目前持久層的框架,常見的有:
Mybatis:目前國內(nèi)最流行的Dao層框架
Hibernate:國內(nèi)使用的少了,國外使用的很多。國內(nèi)的一些老項目,可能使用的是Hibernate
SpringData JPA:對持久層的技術(shù)再封裝,比如對Hibernate再封裝,提供了更簡便的操作
2. Mybatis使用步驟
-
準(zhǔn)備數(shù)據(jù)庫和表:前邊JDBC里已經(jīng)準(zhǔn)備過了,略
-
準(zhǔn)備一個maven工程:
創(chuàng)建一個SpringBoot工程,添加依賴、配置文件、引導(dǎo)類
-
使用Mybatis操作數(shù)據(jù)庫
準(zhǔn)備實體類:一張表通常要準(zhǔn)備一個類。類的屬性和表的字段要對應(yīng)
修改配置文件:準(zhǔn)備數(shù)據(jù)庫的連接信息,包括驅(qū)動類名、地址、帳號、密碼
編寫一個接口,接口里寫一個方法,方法上配置SQL語句
調(diào)用這個接口的方法,就可以了
3. Mybatis入門案例
1.創(chuàng)建SpringBoot工程
如果要創(chuàng)建空的maven工程,改造成SpringBoot工程,只需要三件事:
-
依賴:SpringBoot父工程坐標(biāo)和起步依賴
<!-- SpringBoot父工程坐標(biāo) --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version></parent><dependencies><!--mybatis的起步依賴--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!-- mysql驅(qū)動包, 剛剛發(fā)布的最新版本的驅(qū)動包--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><!--springboot單元測試--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies>
-
配置:創(chuàng)建一個名稱為
application.properties
的文件,放到src\main\resources
目錄里 -
引導(dǎo)類:創(chuàng)建一個引導(dǎo)類,固定寫法
@SpringbootApplication
public class 引導(dǎo)類名{public static void main(String[] args){SpringApplication.run(引導(dǎo)類.class, args);}
}
準(zhǔn)備配置文件
修改application.properties
文件,添加如下配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db3
spring.datasource.username=root
spring.datasource.password=root
準(zhǔn)備實體類
前邊JDBC部分已經(jīng)創(chuàng)建了User類,直接復(fù)制過來使用即可
2.創(chuàng)建Mapper
package com.itheima.mapper;import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** 1. Mapper接口,名稱通常是XxxMapper,比如UserMapper、DeptMapper* 2. Mapper接口,上邊加@Mapper注解,目的是讓SpringBoot掃描這個注解,生成它的對象放到IoC容器里。類似于@Controller、@Service*/
@Mapper
public interface UserMapper {/*** 查詢所有用戶,得到List<user>*/@Select("select * from user")List<User> queryAll();
}
3.功能測試
注意:
-
單元測試類上需要加
@SpringBootTest
,然后才可以在測試類里使用@Autowired注入
package com.itheima;import com.itheima.mapper.UserMapper;
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class MybatisTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testQueryAll(){List<User> userList = userMapper.queryAll();userList.forEach(System.out::println);}
}
三、連接池【了解】
1. 什么是連接池
池化思想,用于提供有限數(shù)量的資源對象,重復(fù)利用,可以減少頻繁創(chuàng)建對象與銷毀對象的開銷。
-
創(chuàng)建池子:在池子里初始化一堆對象,備用
-
使用的時候:如果需要使用,就從池子里取出一個進(jìn)行使用;使用完成,再把對象交還到池子里
-
例如:線程池,數(shù)據(jù)庫連接池
數(shù)據(jù)庫連接池:
-
只需要池子里準(zhǔn)備少量的Connection連接對象,就可以支持海量的數(shù)據(jù)庫操作。因為這些對象是可以循環(huán)使用的
-
避免頻繁創(chuàng)建Connection與數(shù)據(jù)庫建立連接所造成的資源開銷,從而大大提升性能
2. 有哪些數(shù)據(jù)庫連接池
-
DBCP:比較早的連接池,早期Tomcat內(nèi)置的有這種連接池
-
C3P0:使用相對廣泛的連接池
-
Druid:德魯伊,Alibaba提供的連接池技術(shù),它以豐富的功能著稱,除了連接池的基本功能,還具備數(shù)據(jù)庫的監(jiān)控能力
-
HikariCP:以性能著稱的連接池,SpringBoot官方內(nèi)置了HikariCP連接池,默認(rèn)使用的
所有連接都有相同的使用規(guī)范:
-
所有連接池類都必須實現(xiàn)
javax.sql.DataSource
接口 -
從任意連接池里獲取連接的方法,都是
getConnection()
3. 如何在項目里使用Druid連接池
1.添加druid的起步依賴
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.8</version>
</dependency>
2.配置一下,指定使用Druid連接池:只要修改application.properties文件
#沒有指定使用哪種連接池,默認(rèn)使用的是HikariCP
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_homework
#spring.datasource.username=root
#spring.datasource.password=root
#如果想指定使用Druid連接池
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis_homework
spring.datasource.druid.username=root
spring.datasource.druid.password=root
四、Lombok【重點】
1. Lombok介紹
Lombok是一個插件,目前已經(jīng)被idea內(nèi)置進(jìn)去了。
用于在代碼編譯過程中,幫我們生成一些代碼。從而讓我們的代碼更簡潔
2. Lombok用法
-
添加lombok的依賴坐標(biāo)
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency>
2.使用Lombok簡化代碼:通過注解實現(xiàn)的
-
@Data
:加在實體類上,Lombok會幫我們給實體類生成無參構(gòu)造、所有成員變量的get和set方法、toString、equals、hashCode等等方法 -
@NoArgsConstructor
:加在實體類上,Lombok會幫我們生成無參構(gòu)造 -
@AllArgsConstructor
:加在實體類上,Lombok會幫我們生成全參構(gòu)造 -
@Getter
:生成get方法的??梢约釉陬惿?#xff0c;也可以加在某個成員變量上 -
@Setter
:生成set方法的??梢约釉陬惿?#xff0c;也可以加在某個成員變量上
3. 使用示例
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {private Integer id;private String username;private String password;private String name;private Integer gender;private String image;private Integer job;
}