什么是Mybatis?
数据层又叫做持久层
MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。
Mybatis入门
mybatis快速入门
使用Mybatis查询所有用户数据
Mapper层:mybatis的接口层。加mapper注释,数据访问层dao层的接口,
要执行语句那句select语句时,只需要使用list方法,就会默认的调用这个语句,sql语句的访问结果就会默认的封装到这个方法里
step1:准备数据库
运行sql语句创建数据库
step3:连接数据库
step4:创建实体类pojo
可以直接用mybatis-generator生成
step5:创建mapper接口层
@Mapper//在运行时,会自动生成该接口的实现类对象(代理对象),并且将该对象交给IOC容器管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package com.ljy.demo5.mapper;
import com.ljy.demo5.Pojo.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper public interface UserMapper {
@Select("select * from user") public List<User> list(); }
|
step6:测试
在test项目里测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| @SpringBootTest class Demo5ApplicationTests {
@Autowired private UserMapper userMapper;
@Test public void testListUser(){ List<User> list = userMapper.list(); list.stream().forEach(user -> { System.out.println(user); }); }
}
|
输出结果
JDBC介绍
java database connectivity,就是使用java语言操作关系型数据库的一套API,这是一套规范,sun公司提供的
各个厂商提供jdbc的实现,这个叫做jdbc的驱动、数据库的驱动
数据库连接池
数据库连接池是一个容器,负责分配、管理数据库连接(connection)
它允许应用程序重复使用一个现有的数据库连接,而不是再重新创建一个新的
释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏。
切换Druid数据库连接池
1 2 3 4 5 6
| <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.8</version> </dependency> pom.xml
|
1 2 3 4
| 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.datasource.druid.password=1234
|
小结
1.数据库连接池
l是一个容器,负责分配、管理数据库连接(Connection)
l优势:资源复用、提升系统响应速度
l接口:DataSource
l产品:C3P0、DBCP、Druid、Hikari
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修饰的字段之外带有各参数的构造器方法。 |
Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)。
Mybatis基础增删改查
准备
按照之前的准备
删除
按照ID删除数据
@Delete注释
占位符 #{id}
1 2
| @Delete("delete from emp where id = #{id}") public void delete(Integer id);
|
1 2 3 4 5 6 7 8
| @Mapper public interface EmpMapper {
@Delete("delete from emp where id = #{id}") public int delete(Integer id);
}
|
日志
预编译sql语句
SQL注入
通过操作输入的数据来修改事先定义好的SQL语句,以达到执行代码对服务器进行攻击的方法。
插入
1 2 3 4
| @Insert("insert into emp(username,name ,gender,image,job,entrydate,dept_id,create_time,update_time)"+ " values (#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})") public void insert(Emp emp);
|
1 2 3 4 5 6 7
| @Test public void testInsert(){ Emp emp = new Emp(); emp.setUsername("Tom"); emp.setName("汤姆");
}
|
主键返回@Options(keyProperty=”id”)
描述:在数据添加成功后,需要获取插入数据库数据的主键。如:添加套餐数据时,还需要维护套餐菜品关系表数据。
更新(修改)
1 2 3 4
| @Update("update emp set username = #{username}, name = #{name}, gender = #{gender}, image = #{image}," + " job = #{job}, entrydate = #{entrydate}, dept_id = #{deptId},update_time = #{updateTime} where id = #{id}") public void update(Emp emp);
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Test public void testUpdate(){ Emp emp = new Emp(); emp.setId(18); emp.setUsername("Tom1"); emp.setName("汤姆1"); emp.setImage("1.jpg"); emp.setGender((short)1); emp.setJob((short)1); emp.setEntrydate(LocalDate.of(2000,1,1)); emp.setUpdateTime(LocalDateTime.now()); emp.setDeptId(1);
empMapper.update(emp); }
|
查询
1 2 3
| @Select("select * from emp where id = #{id}") public Emp getById(Integer id);
|
1 2 3 4 5
| @Test public void testGetById(){ Emp emp = empMapper.getById(18); System.out.println(emp); }
|
数据封装
解决一
1 2 3 4
|
@Select("select * from emp where id = #{id}") public Emp getById(Integer id);
|
MybatisXML映射文件
xml映射文件
Mybatis动态SQL
随着用户的输入或者外部的变化而变化SQL语句,我们称为动态SQL
if
1 2 3
| <if>:用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接SQL。
<where>:where 元素只会在子元素有内容的情况下才插入where子句。而且会自动去除子句的开头的AND 或OR。
|
foreach
Springboot案例
分页参数
文件上传
表单项
文件上传