传统的数据库操作在后端开发应用中会很繁琐,需要编写数据连接池等等,会降低开发的效率
例如:
传统的JDBC程序
import com.itheima.pojo.User;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class JdbcTest {
@Test
public void testJdbc() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取数据库连接
String url="jdbc:mysql://127.0.0.1:3306/mybatis";
String username = "root";
String password = "ydp202756";
Connection connection = DriverManager.getConnection(url, username, password);
//3. 执行SQL
Statement statement = connection.createStatement(); //操作SQL的对象
String sql="select id,name,age,gender,phone from user";
ResultSet rs = statement.executeQuery(sql);//SQL查询结果会封装在ResultSet对象中
List<User> userList = new ArrayList<>();//集合对象(用于存储User对象)
//4. 处理SQL执行结果
while (rs.next()){
//取出一行记录中id、name、age、gender、phone下的数据
int id = rs.getInt("id");
String name = rs.getString("name");
short age = rs.getShort("age");
short gender = rs.getShort("gender");
String phone = rs.getString("phone");
//把一行记录中的数据,封装到User对象中
User user = new User(id,name,age,gender,phone);
userList.add(user);//User对象添加到集合
}
//5. 释放资源
statement.close();
connection.close();
rs.close();
//遍历集合
for (User user : userList) {
System.out.println(user);
}
}
}
传统的封装类:
public class User {
private Integer id;
private String name;
private short age;
private short gender;
private String phone;
public User() {
}
public User(Integer id, String name, short age, short gender, String phone) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public short getAge() {
return age;
}
public void setAge(short age) {
this.age = age;
}
public short getGender() {
return gender;
}
public void setGender(short gender) {
this.gender = gender;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
", phone='" + phone + '\'' +
'}';
}
}
看上去代码量就会很多。而且不易后期维护!
而当我们用Mybatis来的是就会很方便,几个依赖几行注释就搞定了:
1.首先第一步,倒入项目依赖:
<dependencies>
<!-- mybatis起步依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!-- mysql驱动包依赖 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- spring单元测试 (集成了junit) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第二步,数据准备:
-- 用户表
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','19191435236');
insert into user(id, name, age, gender, phone) VALUES (null,'李四',45,'1','18808345629');
insert into user(id, name, age, gender, phone) VALUES (null,'王麻子',38,'1','18813731891');
insert into user(id, name, age, gender, phone) VALUES (null,'小明',42,'2','13977043096');
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','18181242398');
第三步,在resuorces目录下的application.properties文件里配置数据库连接信息:
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=ydp202756
封装实体类:
在这里呢还需要一个Java的类库lombok:
添加依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id;
private String name;
private short age;
private short gender;
private String phone;
}
//省去了Get、Set、toString等方法,以及有参构造和无参构造
(在这里,我们就省去了几十行代码,此时就想说两个字“wc”!!!)
UserMapper接口:
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User>list();
}
测试类:
@SpringBootTest
class MybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void tesListUser() {
List <User> userList = userMapper.list();
userList.stream().forEach(user -> {
System.out.println(user);
});
}
运行结果:
-
MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。
-
持久层:指的是就是数据访问层(dao),是用来操作数据库的。
-
Mybatis其实就是对原始JDBC程序的封装,使之更加方便快捷,大大提高了开发效率
所以学会框架对提高开发效率是很有帮助的!!!!