目录
MyBatis是一款优秀的 持久层Dao层 框架,用于简化JDBC的开发。
MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了 google code,并且改名为 MyBatis。2013年11月迁移到 Github。
一、快速入门程序
使用MyBatis查询所有用户数据:
- 准备工作(创建springboot工程、数据库表user、实体类User)
- 引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)
- 编写SQL语句(注解/XML)
- 单元测试
@SpringBootTest //springboot整合单元测试的注解
class SpringbootMybatisQuickstartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testListUser(){
List<User> userList = userMapper.list();
userList.stream().forEach(user ->{
System.out.println(user);
});
}
}
@Mapper //在运行时,自动生成该接口实现类对象(代理对象),并且将该类对象交给IOC容器管理
public interface UserMapper {
//查询全部用户信息
@Select("select * from user")
public List<User> list();
}
二、配置SQL提示
默认在mybatis中编写SQL语句是不识别的。可以做如下配置:
自动提示无法提示表名:
- 产生原因:Idea和数据库没有建立连接,不识别表信息。
- 解决方式:在 Idea 中配置MySQL数据库连接。
三、JDBC
① JDBC: (Java DataBase Connectivity ),就是使用Java语言操作关系型数据库的一套API。
② 本质:
- sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
- 各个数据库厂商去实现这套接口,提供数据库驱动 jar 包。
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar包中的实现类。
③ 原始JDBC程序:
@Test
public void testJdbc() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取连接对象
String url = "jdbc:mysql://localhost:3306/mybatis";
String username = "root";
String password = "123456";
// 连接对象
Connection connection = DriverManager.getConnection(url, username, password);
//3. 获取执行SQL的对象Statement,执行SQL,返回结果
String sql = "select * from user";
Statement statement = connection.createStatement();
// 结果集
ResultSet resultSet = statement.executeQuery(sql);
//4. 封装结果数据
List<User> userList = new ArrayList<>();
while (resultSet.next()){
int id = resultSet.getInt("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);
}
//5. 释放资源
statement.close();
connection.close();
// 6.遍历查询结果
userList.stream().forEach(user ->{
System.out.println(user);
});
}
存在弊端:
- 硬编码:注册驱动、获取连接发生变动,原始JDBC是写死Java程序的,所以需要重写编码再打包。
- 繁琐:解析结果、封装结果需要一个字段一个字段进行,但是实际开发字段数很多。
- 资源浪费、性能降低:在执行SQL语句前先要获取连接,执行完毕后又马上关闭连接,在实际开发过程中就会频繁获取和关闭连接。
所以我们还是更推荐 SpringBoot + MyBatis 整合进行数据库操作。
四、数据库连接池
① 介绍:
- 数据库连接池 是个容器,负责分配、管理数据库连接(Connection)。
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
- 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
② 优势:
- 资源重用
- 提升系统响应速度
- 避免数据库连接遗漏
③ 实现:标准接口:Datasource
- 官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。
- 功能:获取连接
Connection getConnection () throws SQLException;
- 常见产品:
C3P0、DBCP 老版本不再使用 Druid(德鲁伊) - Druid连接池是阿里巴巴开源的数据库连接池项目。
- 功能强大,性能优秀,是Java语言最好的数据库连接池之一。
Hikari SpringBoot 默认
④ 切换Druid数据库连接池:
官网地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
五、lombok工具包
在上述快速入门程序的学习中,我们编写的User实体类。
虽然只有五个属性,但是我们还是要为每一个属性提供对应的 get / set 方法以及重写 toString 方法,如果还有需求还需要提供无参构造和有参构造 ,甚至是 hashCode 和 equals 等方法。虽然可以快捷键生成,但是还需要去手动做,显得代码臃肿。
通过lombok注解: |
① 介绍:Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。
② 常用注解:
注解 | 作用 |
@Getterl / @Setter | 为所有的属性提供get/set方法 |
@Tostring | 会给类自动生成易阅读的toString方法 |
@EqualsAndHashcode | 根据类所拥有的非静态字段自动重写equals 方法和hashcode方法 |
@Data | 提供了更综合的生成代码功能(@Getter +@Setter +@ToString +@EqualsAndHashCode) |
@NoArgsConstructor | 为实体类生成无参的构造器方法 |
@AllArgsConstructor | 为实体类生成除了static修饰的字段之外带有各参数的构造器方法。 |
@Data
@NoArgsConstructor //无参构造
@AllArgsConstuctor //有参构造
public class User {
private Integer id;
private String name;
private short age;
private short gender;
private String phone;
}
③ 要想使用lombok需要引入lombok依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
注意事项:Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)。