一、MyBatis介绍
- MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。
持久层(Dao层):数据访问层(数据库相关)
- MyBatis本是Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
- 官网:https://mybatis.org/mybatis-3/zh/index.html
二、MyBatis入门
1.使用Mybatis查询所有用户数据
- 准备工作(创建springboot工程、数据库表user、实体类User);
- 引入Mybatis的相关依赖,配置Mybatis:
//在application.properties文件中配置下列信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=1234
- 编写SQL语句(注解/XML):
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> list();
}
- 在springboot的测试类中进行测试:
@SpringBootTest //springboot 整合单元测试的注解
class SpringBootMybatisQuickstarApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testListUser() {
List<User> userList=userMapper.list();
userList.stream().forEach(user -> {
System.out.println(user);
});
}
}
2.在上述Java中的@select
注解里的的SQL语句配置提示
- 选中SQL语句,右键
Show Context Actions
; - 继续选择
lnject language or reference
; - 选择mysql(SQL)。
编写SQL语句时对表名没有提示:
- 产生原因:ldea和数据库没有建立连接,不识别表信息
- 解决方式:在ldea中配置MySQL数据库连接
三、JDBC介绍
1.介绍
- JDBC: (Java DataBase Connectivity ),就是使用Java语言操作关系型数据库的一套APl。
2.原始JDBC的连接
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
String url = "jdbc:mysql://localhost:3306/mybatis ";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
//3.获取执行SQL的对象Statement,执行SQL
String sql = "select * from user";
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
List<User> userList = new ArrayList<>();
while(resultSet.next())
{
int id = resultSet.getlnt("id");
String name = resultSet.getString("name");
short age = resultSet.getShort("age");
short gender = resultSet.getShort("gender");
String phone = resultSet.getString("phone");
User user = new User(id, name, age, gender, phone);
userList.add(user);
//4.释放资源
statement.close();
connection.close();
}
3.存在的问题
- 硬编码:用户名,密码等数据库四要素在Java连接程序中都是写死的,若更换则需要修改,重新编译,运行,代码的灵活性不强;
- 繁琐:对每个从数据库获取的数据的字段需要进行封装,真实环境中操作的字段会很多,则效率低下;
- 资源浪费性能降低:每次JDBC连接数据库,会得到连接,最后释放连接,多次运行会导致性能降低,资源的浪费。
4.解决:在MyBatis中进行JDBC
- 配置:将数据库配置的四要素直接写在一个单独的文件中:
application.properties
,方便操作。 - 封装:在MyBatis中没有解析结果,在
@Mapper
注解的类中,自动将查询的结果封装到集合中,查询封装的每一条对象都会封装成一个User对象,而所有的User对象又会封装到一个List集合中,整个过程自动化进行。 - 连接:在程序执行SQL语句之前会初始化一定数量的连接池,
spring.datasource
连接到数据库连接池中,用完之后有归还到连接池里,做到连接的复用,就不用单行频繁的连接和释放连接所造成的资源的浪费(类似于线程池)。
四、数据库连接池
1.数据库连接池
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)。
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
- 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
优点:资源重复使用,提升系统响应速度,避免数据库连接遗漏。
2.连接技术
- 标准接口:
DataSource
- 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。
- 功能:获取连接
Connection getConnection () throws SQLException;
- 常见产品
- Hikari(springboot默认),Druid,C3PO,DBCP
- Druid(德鲁伊)
- Druid连接池是阿里巴巴开源的数据库连接池项目
- 功能强大,性能优秀,是Java语言最好的数据库连接池之一
3.切换Druid数据库连接池(在官网有详细说明)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
- 在
application.properties
文件中的配制:
spring.datasource.driver-class-name=com.mysqL.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.dataspurce.password=1234
- 配制法二:或者在
application.properties
文件中的配制:
spring.datasource.druid.driver-class-name=com.mysqL.cj.jdbc.Driver
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.druid.username=root
spring.dataspurce.druid.password=1234
五、lombok
1.Lombok介绍:
Lombok
是一个实用的Java类库,能通过注解的形式自动生成构造器
、getter/setter
、equals
、hashcode
、toString
等方法,并可以自动化生成品志变量,简化java开发、提高效率。
注解 | 作用 |
---|---|
@Getter/@Setter | 为所有的属性提供get/set方法 |
@ToString | 会给类自动生成易阅读的toString方法 |
@EqualsAndHashCode | 根据类所拥有的非静态字段自动重写equals方法和hashcode方法 |
@Data | 提供了更综合的生成代码功能(@Getter +@Setter +@ToString +@EqualsAndHashCode) |
@NoArgsConstructor | 为实体类生成无参的构造器方法 |
@AllArgsConstructor | 为实体类生成除了static修饰的字段之外带有各参数的构造器方法。 |
2.引入lombok依赖
<!-- lombok依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
注意:Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea只要不是太老版本,自带)。