目录
1.MyBatis概述
2.MyBatis简单入门
3.JDBC(了解即可)
4.数据库连接池
5.lombok
6.MyBatis基本操作
7.XML映射文件
8.动态SQL
8.1 if标签
8.2 foreach标签
8.3 sql/include标签
1.MyBatis概述
MyBatis是一款优秀的持久层(DAO)框架,用于简化JDBC的开发,和数据库打交道。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
比如说如果想要查询所有用户的数据,普通SQL语句是select * from users;而MyBatis就是通过java语句操作数据库查询
2.MyBatis简单入门
Day08-14. Mybatis-入门-快速入门程序_哔哩哔哩_bilibili
下面是SpringBoot的MyBatis项目创建后pom.xml配置文件中的常见依赖:
<!-- springboot父工程 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.5</version><relativePath/> <!-- lookup parent from repository --></parent><!-- mybatis起步依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency><!-- mysql驱动包,一般默认是最新版本 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><!-- springboot单元测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
在Spring Boot项目中,pojo文件夹通常用来存放“Plain Old Java Objects”,也就是简单的Java对象,比如简单的User类对象
#配置数据库的连接信息——四要素
#驱动类名称
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=1234
接着在mapper文件夹中新建对应的mapper接口,加上Mapper注解,表示是MyBatis中的Mapper接口,@Mapper注解的作用是在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理,在使用时只需要依赖注入即可
import com.mzz.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//加上Mapper注解,表示是MyBatis中的Mapper接口
//注解作用:在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
//在使用时只需要依赖注入即可
@Mapper
public interface UserMapper {@Select("select * from user")public List<User> list();
}
在test测试类中依赖注入,使用@AutoWired注解
import com.mzz.mapper.UserMapper;
import com.mzz.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 //springboot整合单元测试的注解
class MybatisDemoApplicationTests {@Autowired //依赖注入注解private UserMapper userMapper; //依赖注入@Testpublic void testListUser(){List<User> userList = userMapper.list();userList.stream().forEach(System.out::println);}}
3.JDBC(了解即可)
JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API,Java程序想要操作MySQL、Oracle等数据库就得通过JDBC这套API实现,但是各个数据库厂商的底层实现是不同的,所以JDBC仅仅只是提供了接口,由各个厂商去实现,封装在一起也就是驱动
JDBC的缺点:不方便,资源浪费,相比之下SpringBoot+MyBatis效率高很多,写在配置文件中
现在都是用MyBatis,不会去用原始的JDBC
4.数据库连接池
需要学习如何切换数据库连接池
5.lombok
Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。
使用场景:数据库配套的use类,明明只需要tostring方法但却需要生成一个完整的Javabean类,很麻烦,此时就可以使用lombok的注解优化
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.time.LocalDate;
import java.time.LocalDateTime;@Data //提供get()和set()方法
@NoArgsConstructor //提供无参构造
@AllArgsConstructor //提供全参构造
public class Emp {private Integer id;private String username;private String password;private String name;private Short gender;private String image;private Short job;private LocalDate entrydate;private Integer deptId; //部门IDprivate LocalDateTime createTime;private LocalDateTime updateTime;
}
6.MyBatis基本操作
public interface EmpMapper {//根据主键删除数据@Delete("delete from emp where id = #{id}")public int delete(Integer id);//返回值是影响的记录数,也可以不需要返回值//新增员工@Insert("insert into emp(username, name, gender, image, job, entrydate, dept_id, create_time, update_time)" + " values (#{username}, #{name}, " +"#{gender}, #{image}, #{job}, #{entrydate}, #{dept_id}, #{create_time}, #{update_time} )");public void insert(User emp);//更新员工//查询员工
}
7.XML映射文件
使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL语句更加混乱不堪,因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句
8.动态SQL
随着用户的输入或外部条件的变化而变化的SQL语句,我们称为动态SQL,也就是学习各种动态SQL 标签,以下面的SQL语句为例,即使搜索栏只输入一个条件,也会根据三个条件进行查询,比较死板,所以就引出了动态SQL
8.1 if标签
<if></if>
<select id="list" resultType="com.mzz.pojo.Emp">select *from emp<where><if test = "name != null">name like concat('%', #{name},'%')</if><if test = "gender != null">and gender = #{gender}</if><if test = "begin != null and end != null">and entrydate between #{begin} and #{end}</if></where>order by update time desc</select>
8.2 foreach标签
<foreach></foreach>
批量删除员工信息