MyBatis
是一款优秀的持久层框架,用于简化 JDBC
的开发
Dao
),是用来操作数据库的
简单来说 MyBatis
是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库工具。
# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
.yml
文件中[!quote] 企业建表规范:
MyBatis
的使用
MyBatis
依赖、MySQL
驱动# 数据库连接配置
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
Mapper
@Mapper
public interface UserInfoMapper {
@Select("select * from userinfo") //接口方法的实现(通过注解)
List<UserInfo> getUserInfoAll(); //方法定义
}
常见问题:
SQL
语句写错
这个信息是从 MySQL
报过来的
SQL
的问题,就把 SQL
语句复制出来,放到 SQL
客户端中运行一下,看能否运行Mapper
中的方法名不能重复首先我们要根据表创建对象,mybatis
才能把查询到的结果给我们
在 MyBatis
中,我们可以借助日志,查看到 SQL
语句的执行、执行传递的参数以及执行结果在配置文件中进行配置即可
mybatis:
configuration: # 配置打印 MyBatis⽇志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
重新运行程序,可以看到 SQL
执行内容,以及传递参数和执行结果:
需求:查找 id=4
的用户,对应的 SQL
就是:select * from userinfo wherer id = 4
@Select("select * from userinfo where id = 4")
List<UserInfo> queryById(Integer id);
但是这样的话,智能查找 id=4
的数据,所以 SQL
语句中的 id
值不能写成固定数值,需要变为动态的数值
解决方案: 在 queryById
方法中添加一个参数 id
,将方法中的参数,传给 SQL
语句
#{}
的方式获取方法中的参数@Select("select * from userinfo where id = #{id}")
List<UserInfo> queryById(Integer id);
Mapper
接口方法形参只有一个普通类型的参数,#{}
里面的属性名可以随便写,如:#{id}、#{value}
。建议和参数名保持一致添加测试用例:
@Test
void getUserInfoByDelete() {
System.out.println(userInfoMapper.queryById(4));
运行结果:
@Param
,设置参数的别名,如果使用 @Param
设置别名,#{...}
里面的属性名必须和 @Param
设置的一样@Select("select * from userinfo where id = #{userid}")
List<UserInfo> queryById(@Param("userid") Integer id);
不过我们一般都让参数名保持一致