【Mybatis】Mybatis 魔法世界探秘:从配置起航,开启数据持久化的奇幻入门之旅
目录
📚️1.JDBC回顾
1.1JDBC编程
在应⽤分层学习时, 我们了解到web应⽤程序⼀般分为三层,即:Controller、Service、Dao .
之前的案例中,请求流程如下: 浏览器发起请求, 先请求Controller, Controller接收到请求之后, 调⽤
Service进⾏业务逻辑处理, Service再调⽤Dao, 但是Dao层的数据是Mock的, 真实的数据应该从数据库中读取.
此时我们在之前学习了关于JDBC的编程,我们能够了解到JDBC编程的复杂的特点,除了配置环境以外还有很多的操作,使得我们的操纵数据库比较麻烦;
具体的代码如下所示:
public static void main(String[] args) throws SQLException {
//建立数据源
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java109?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("642364");
//和数据库服务器建立连接 后序才有请求和响应交互
Connection connection=dataSource.getConnection();
//构造SQL
String sql="update student set name='猪八戒' where id=1";
//进行预处理
PreparedStatement statement=connection.prepareStatement(sql);
//把SQL发送给服务器
int n=statement.executeUpdate();//影响的行数
System.out.println("n="+n);
System.out.println(statement);
//最后释放资源,最后获取的资源先释放
statement.close();
connection.close();
}
}
解释:
可以看到这里的操作可以分为一下几类:
1. 创建数据库连接池 DataSource
2. 通过 DataSource 获取数据库连接 Connection
3. 编写要执⾏带 ? 占位符的 SQL 语句
4. 通过 Connection 及 SQL 创建操作命令对象 Statement
5. 替换占位符:指定要替换的数据库字段类型,占位符索引及要替换的值
6. 使⽤ Statement 执⾏ SQL 语句
7. 查询操作:返回结果集 ResultSet,更新操作:返回更新的数量
8. 处理结果集
9. 释放资源
总结:
从上述代码和操作流程可以看出,对于 JDBC 来说,整个操作⾮常的繁琐,我们不但要拼接每⼀个参数,⽽且还要按照模板代码的⽅式,⼀步步的操作数据库,并且在每次操作完,还要⼿动关闭连接等,⽽所有的这些操作步骤都需要在每个⽅法中重复书写.
所以就有了一种更高效的方法,工具mybatis;
📚️2.Mybatis使用
2.1什么是Mybatis
• MyBatis是⼀款优秀的 持久层 框架,⽤于简化JDBC的开发。
• MyBatis本是 Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis 。2013年11⽉迁移到Github
• 持久层:指的就是持久化操作的层, 通常指数据访问层(dao), 是⽤来操作数据库的
如下图所示:
简单来说MyBatis 是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具
那么直接开始mybatis的环境的配置吧~~~
2.2Mybatis环境配置
1.引入依赖
首先我们在创建项目的时候点击选择mysql驱动包以及它的farmwork如下图所示:
注意:
除了这里的数值之外还有两个依赖:spring web以及lombok如下所示:
这里的两个是基本的springboot所需要引入的依赖;
2.lombok的操作
注意的是,在新版的spring中进行了spring的升级,可能在实现@Data的时候不会帮我们重写这里的get与set函数,所以这里要进行注释的删除的操作:
解释:
当我们完成这里的操作后可以在类中进行@Data对于变量的注解的操作,运行后再target中看到@Data反编译的文件,这里就可以看到我们@Data对于我们申明的变量的方法的重写;
2.3Mybatis编程
1.数据库创建
首先创建一个数据库,对数据进行操作;
USE mybatis_test;
-- 创建表[⽤⼾表]
DROP TABLE IF EXISTS user_info;
CREATE TABLE `user_info` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`username` VARCHAR ( 127 ) NOT NULL,
`password` VARCHAR ( 127 ) NOT NULL,
`age` TINYINT ( 4 ) NOT NULL,
`gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认',
`phone` VARCHAR ( 15 ) DEFAULT NULL,
`delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除',
`create_time` DATETIME DEFAULT now(),
`update_time` DATETIME DEFAULT now() ON UPDATE now(),
PRIMARY KEY ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4;
然后进行数据的插入的操作,但是这里小编就不再进行操作了;
最终的表的结果如下所示:
2.创建实体类
这里的初始化的属性,要和数据库中的代码是一一对应的,具体的代码如下所示:
@Data
public class UserInfo {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer gender;
private String phone;
private Integer deleteFlag;
private Date createTime;
private Date updateTime;
}
解释:
解释通过lombok包中的@Data进行响应函数的重写的操作;
3.配置数据库
此时我们应该在配置文件中进行数据库的配置:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 642364
driver-class-name: com.mysql.cj.jdbc.Driver
解释:
这里的URL就是连接我们自己配置的数据库,然后用户名是什么,我们自己设置的密码是什么,小编这里的密码就是“642364”,然后驱动包时什么;
注意:
如果使⽤ MySQL 是 5.x 之前的使⽤的是"com.mysql.jdbc.Driver",如果是⼤于 5.x 使⽤的
是“com.mysql.cj.jdbc.Driver
4.Mapper持久层编写
这里就是编写我们要对于数据库进行一定的增删改查的sql语句的编写的操作:
@Mapper
public interface UserInfoMapper {
@Select("select username,password,age,gender from user_info")
public List<UserInfo> queryAllUser();
}
解释:
这里就是进行数据库操作sql语句编写,这里用列表进行接收;
5.单元测试
这里就是在test包中进行测试的操作,如何进行直接生成呢?
操作如下:
点击鼠标右键,点击Generate,然后点击test最后点击生成我们需要测试的sql的操作;
然后再test类中进行数据的获取:
class UserInfoMapperTest {
@Autowired
private UserInfoMapper userInfoMapper;
@Test
void queryAllUser() {
List<UserInfo> userInfoList=userInfoMapper.queryAllUser();
System.out.println(userInfoList);
}
此时我们进行数据的打印,但是很是不好看,如下所示:
所以这里就要进行打印日志的配置文件的配置的操作:
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
所以此时我们再次进行打印的操作可以看到如下的数据显示:
解释:
第一部分就是sql的语句对于数据库的操作;
第二部分就是传递参数的类型;
第三部分就是最后的数据库的内容的展示;
此时就很明显可以进行对比,第二种展示的方式更加的美观并且更加具有可读的特性
2.4常见的问题日志
1.密码错误
如下所示:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mybatis_test?characterEncoding=utf8&useSSL=false
username: root
password: 64236
driver-class-name: com.mysql.cj.jdbc.Driver
此时小编已经将配置文件中的数据进行了修改,此时的密码就是错误的,那么错误的日志如下所示:
解释:
可以看到此时就是通过连接数据库就是存在password的错误,大致可以判断出我们在配置文件中mysql的用户的密码是错误的;
2.SQL语句错误
@Select("select * fro user_info where id=#{id}")
public UserInfo selectID(@Param("id") Integer id);
可以看到此时select * from出现了错误;那么对应的错误的日志如下所示:
解释:
就是说,“你有一个错误,在你的SQL语句中”,请检查SQL语句“在fro user_info where id=3”附近,可以看到我们写错的sql语句;
3.数据库中表不存在
此时我们将这里的数据库中表的名字进行更改:
@Select("select username,password,age,gender from user_info1")
public List<UserInfo> queryAllUser();
此时就不存在这个表,对应的错误日志就是如下所示:
解释:
就是说我们这里在数据库中“mybatis_test”没有找到这个错误,不存在的表;
4.方法名重复
具体的错误代码实例如下所示:
@Select("select username,password,age,gender from user_info")
public List<UserInfo> queryAllUser();
@Select("select * from user_info where id=#{id}")
public UserInfo queryAllUser(@Param("id") Integer id);
可以看到此时的两个方法的名称是一样的,那么就会出现一下的错误日志:
解释:
BeanCreationException
表示在 Spring 框架(通常在使用 MyBatis 与 Spring 集成时遇到该情况)创建 Bean 的过程中出现了错误。
java.lang.IllegalArgumentException 异常:
说明在 MyBatis 的映射语句(Mapped Statements)集合中已经存在了相同标识(key)的映射语句。
在 MyBatis 里,每一个 select、insert、update、delete 等操作在底层都会被当作一个映射语句来管理,并且会有一个唯一的标识,对应就是mapper的方法名;
📚️3.总结
本期小编主要总结了关于Mybatis的简单的环境的配置,以及实现简单的Mybatis的编程操作,还分析了在编程中常见的错误日志;
🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!
💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。
😊😊 期待你的关注~~~
原文地址:https://blog.csdn.net/GGBond778/article/details/144399825
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!