Mybatis快速入门
文章目录
- 1. 简介
- 2. 快速入门
- 2.1 前置准备
- 2.2 要点解析
- 3. 辅助配置
- 3.1 配置 SQL 提示
- 3.2 配置 Mybatis 日志输出
- 4. 增删改查操作 (注解)
- 4.1 删除 (@Delete)
- 4.2 增加 (@Insert)
- 4.3 修改 (@Update)
- 4.4 查询 (@Select)
- 5. XML 映射配置
- 5.1 概念
- 5.2 使用方法
- 6. 为什么使用 Mybatis
1. 简介
- MyBatis 是一款优秀的 持久层 框架,用于简化 JDBC 的开发
- MyBatis 是 Apeche 的一个开源项目 iBatis,2010 年迁移到了 google code,改名为 MyBatis,2013 年迁移到 Github
- 官网:点击进入
2. 快速入门
2.1 前置准备
-
(1 )准备工作:
- 创建 SpringBoot 工程、引入 Mybatis 相关依赖 (SQL/MyBatis Framework 和相关数据库)
-
( 2 ) 准备对应的用户表对象
- 在引导类所在包下创建一个
pojo
包 - 创建 User 实体类,放在 pojo 包下,对标 SQL 表
- 实体类:实体类的属性名与表中的字段名一一对应。实体类放在
pojo
包下。
- 在引导类所在包下创建一个
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer id; //ID
private String username; //用户名
private String password; //密码
private String name; //姓名
private Integer age; //年龄
}
- ( 3 ) 重点:编写 Mybatis :编写 Mybatis 的持久层接口,定义 SQL (注解/XML)
- 在引导类所在包下创建一个
mapper
包,在该包下创建接口UserMapper
- 命名规范:XxxMapper,也成为 Mapper 接口
- 在引导类所在包下创建一个
@Mapper
public interface UserMapper {
@Select("select * from user")
public List<User> findAll();
}
- (4 ) 重点:配置 Mybatis (在 application. Properties 中数据库连接信息)
- 以 MySQL 为例 (端口号 3306)
#数据库访问的url地址
spring.datasource.url=jdbc:mysql://localhost:3306/‘数据库名’
#数据库驱动类类名
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#访问数据库-用户名
spring.datasource.username=root
#访问数据库-密码
spring.datasource.password=root@1234
- ( 5 ):单元测试
- 在
src
底下的test
目录下,已经创建好了测试类,改造即可
- 在
@SpringBootTest
class SpringbootMybatisQuickstartApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll(){
List<User> userList = userMapper.findAll();
for (User user : userList) {
System.out.println(user);
}
}
}
2.2 要点解析
编写 Mybatis 中
- @Mapper 注解:表示是mybatis中的Mapper接口
- 程序运行时,框架会自动生成接口的实现类对象(代理对象),并给交Spring的IOC容器管理
- @Select 注解:代表的就是select查询,用于书写select查询语句
单元测试中
- @SpringBootTest:表示的是已经与 SpringBoot 整合
- 测试类运行时,会自动加载 IOC 容器,所以我们直接通过@Autowired 注解注入,即可进行测试
3. 辅助配置
- 在 Mybatis 中,有两个普遍的辅助配置,一个是配置 SQL 提示 (提示 SQL 语句),一个是配置 Mybatis 日志输出 (运行时查看 SQL 语句执行日志)
3.1 配置 SQL 提示
注意:新版本 idea 已经自动配置,如果为新版,请自行跳过
-
打开右边的 Database,选择创建一个数据源
-
连接对应数据库
-
选择让 idea 给出提示
3.2 配置 Mybatis 日志输出
在 application.properties
加入配置, 即可在控制台查看日志
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
4. 增删改查操作 (注解)
- 在 mybatis 中,有两种使用方法,一种是通过注解,一种是通过 XML 配置,注解一般是完成一些简单的增删改查功能
- 注解主要通过在 Mapper 接口方法通过参数占位符
#{ }
占位来实现 SQL 预编译,在单元测试中编写具体逻辑来实现
- 以下将增删改查的例子作为示例
4.1 删除 (@Delete)
- 需求:根据 ID 删除用户信息
- Mapper 接口
@Delete("delete from user where id =#{id}")
public void deleteById(Integer id);
- 单元测试类
@Test
public void testDeleteById(){
userMapper.deleteById(36);
}
4.2 增加 (@Insert)
- 需求:添加一个用户
- Mapper 接口
@Insert("insert into user(username,password,name,age) values(#{username},#{password},#{name},#{age})")
public void insert(User user);
- 单元测试类
@Test
public void testInsert(){
User user = new User();
user.setUsername("admin");
user.setPassword("123456");
user.setName("管理员");
user.setAge(30);
userMapper.insert(user);
}
4.3 修改 (@Update)
- 需求:根据 ID 更新用户信息
- Mapper 接口
@Update("update user set username = #{username},password = #{password},name = #{name},age = #{age} where id = #{id}")
public void update(User user);
- 单元测试类
@Test
public void testUpdate(){
User user = new User();
user.setId(6);
user.setUsername("admin666");
user.setPassword("123456");
user.setName("管理员");
user.setAge(30);
userMapper.update(user);
}
4.4 查询 (@Select)
- 需求:根据用户名和密码查询用户
- Mapper 接口
@Select("select * from user where username = #{username} and password = #{password}")
public User findByUsernameAndPassword(@Param("username") String username, @Param("password") String password);
- 单元测试类
@Test
public void testFindByUsernameAndPassword(){
User user = userMapper.findByUsernameAndPassword("admin666", "123456");
System.out.println(user);
}
细节:在 Mapper 接口中,我们通过 @Param
注解来指定参数的名称,是因为在字节码文件中,变量名不能保存,#{ }
查询不到信息。
- 在官方骨架创建的 springboot 项目中,@Param 注解可以省略
5. XML 映射配置
5.1 概念
Mybatis 的开发的两种方式,第一种是注解,第二种就是 XML
XML 主要用于完成复杂的 SQL 功能
XML 配置文件规范
- XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
- XML映射文件的namespace属性为Mapper接口全限定名一致
- XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。
5.2 使用方法
- 创建 XML 映射文件 (遵守规范 1 ,都在
com. backend. mapper
包下,都叫Usermapper
,只是为 xml 文件)
- 编写并配置 XML 映射文件 (官方网站)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="">
</mapper>
- 配置 XML 映射文件 (以编写 select 方法为例)
namescpace
里面是UserMapper
的全限定名<select>
标签:用于编写 select 查询语句
-id
里面是UserMapper
里的方法名
-resuletType
里面是User
的全限定名
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.backend.mapper.UserMapper">
<!-- resultTyle : 查询返回的单条数据所封装的类型-->
<select id="findAll" resultType="com.backend.pojo.User">
select id,username,name,age from user
</select>
</mapper>
- 此时 Mapper 演示
//这里没有注解
List<User> findAll();
- 全限定名的获取方法:选中方法名,右键,选择 Copy->Copy Reference 即可复制
6. 为什么使用 Mybatis
先看一下 JDBC 程序的缺点:
- Url、username、password 等相关参数全部硬编码在 java 代码中。
- 查询结果的解析、封装比较繁琐。
- 每一次操作数据库之前,先获取连接,操作完毕之后,关闭连接。频繁的获取连接、释放连接造成资源浪费。
再看以下 Mybatis 是如何解决这些问题
- 数据库连接四要素 (驱动、链接、用户名、密码),都配置在 springboot 默认的配置文件 application. Properties 中
- 查询结果的解析及封装,由 mybatis 自动完成映射封装,我们无需关注
- 在 mybatis 中使用了数据库连接池技术,从而避免了频繁的创建连接、销毁连接而带来的资源浪费。
这篇文章到此结束,感谢观看