MyBatis入门
2021/11/27 6:12:34
本文主要是介绍MyBatis入门,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一心同学主要在这篇文章介绍MyBatis的安装,以及简单使用。
环境
IDEA
Maven:3.3.9
MyBatis:3.5.6
MySql:8.0.23
数据库准备
CREATE DATABASE `mybatis_blog`; USE `mybatis_blog`; DROP TABLE IF EXISTS `blog`; CREATE TABLE `blog` ( `id` int(20) NOT NULL, `name` varchar(30) DEFAULT NULL, `pwd` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; insert into `blog`(`id`,`name`,`pwd`) values (1,'yixin','123456'),(2,'张三','111222'),(3,'李四','135790');
第一步
创建一个Maven项目,并在其pom.xml导入mybatis和mysql的依赖,并刷新maven
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>
第二步
编写MyBatis核心配置文件mybatis-config.xml,并将其放在resources目录下
注意:属性的顺序不能调换!,这个文件大有讲究,由于本节博客只是讲授MyBatis的简单入门使用,这里一心同学将会在下一个博客详解。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--进行数据库的配置--> <configuration> <properties resource="db.properties"><!--将数据库的相关信息导入进来,以方便数据连接调用--> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/><!--采用JDBC连接方式--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers><!--设置映射器,需要告诉 MyBatis 到哪里去找到这些语句。--> <mapper resource="com/yixin/dao/BlogMapper.xml"/> </mappers> </configuration>
db.properties是记录你要连接的数据库的相关信息
driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/mybatis_blog?useSSL=true&useUnicode=true&characterEncoding=UTF-8\ &autoReconnect=true&failOverReadOnly=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username=root password=123456
注意:这两个文件是放在同一个目录下,如果不想要db.properties,也可以将以上的${driver},${url},${username},${password}替换成你数据库相应的信息即可:
第三步
创建实体类,而且在创建包路径时希望大家可以规范创建,这是一个良好的习惯,目录如下:
在pojo路径下编写实体类Blog
package com.yixin.pojo; public class Blog { private int id; private String name; private String pwd; //get、set方法 //有参,无参方法 }
第四步
在dao路径下编写Mapper接口类
package com.yixin.dao; import com.yixin.pojo.Blog; import java.util.List; public interface BlogMapper { public List<Blog> selectBlogAll(); }
第五步
在dao路径下编写BlogMapper.xml配置文件,是放置SQL语句的文件(重要!!!),通常为了规范,命名跟其接口类一样
<?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.yixin.dao.BlogMapper"><!---与其接口类相映射---> <select id="selectBlogAll" resultType="com.yixin.pojo.Blog"><!---resultType:是返回结果类型----> select * from blog </select> </mapper>
其中的id名,分为两种情况:
1.如果我们的调用方式是希望通过接口来调用相应的方法操作数据库,那么在BlogMapper.xml文件中,所有的id名都应当与BlogMapper接口的方法名一致。
特点:该命名就可以直接映射到在命名空间中同名的映射器类,并将已映射的 select 语句匹配到对应名称、参数和返回类型的方法。
这种方式有很多优势,首先它不依赖于字符串字面值,会更安全一点;其次,如果你的 IDE 有代码补全功能,那么代码补全可以帮你快速选择到映射好的 SQL 语句。
BlogMapper mapper= sqlSession.getMapper(BlogMapper.class); List<Blog> blogList=mapper.selectBlogAll();
2.如果我们的调用方式是希望通过SqlSession实例来直接执行已映射的 SQL 语句,因为SqlSession提供了在数据库执行 SQL 命令所需的所有方法。那么BlogMapper.xml中id的名字可以选择和MapperBlog接口不一致,因为既然选择了这种方式,也就意味不需要MapperBlog接口了。
List<Blog> blogList=sqlSession.selectList("com.yixin.dao.BlogMapper.selectBlogAll"); //也可以不选择全限定名 //List<Blog> blogList=sqlSession.selectList("selectBlogAll");
到这一步我们就已经将MyBatis配置得差不多了,我们先来了解如何使用MyBatis
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession(); BlogMapper mapper= sqlSession.getMapper(BlogMapper.class); List<Blog> blogList=mapper.selectBlogAll(); for (Blog blog : blogList) { System.out.println(blog); } sqlSession.close();
以上代码会发现以下这四行代码的配置是固定的,那么我们就来为MyBatis编写一个工具类
String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession=sqlSessionFactory.openSession();
package com.yixin.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }
到这里我们就已经完全配置好了,开始测试:
@Test public void test(){ SqlSession sqlSession= MybatisUtils.getSession(); BlogMapper mapper= sqlSession.getMapper(BlogMapper.class); List<Blog> blogList=mapper.selectBlogAll(); for (Blog blog : blogList) { System.out.println(blog); } sqlSession.close(); }
输出结果:
说明就已经成功了。
在运行过程中,可能因为配置不匹配会出现以下问题:
问题1:
解决:这是因为Maven静态资源过滤问题
只需要在pom.xml下添加以下代码并重新刷新maven,解决静态资源过滤
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
问题2:
解决:
如果看到这个错误,说明你的数据库配置错误,注意:MySQL8.0及以上的版本,url需要在后面加一个时区serverTimezone
结语
到这里,一心同学对MyBatis的简单使用讲解就结束了,下一个博客将会详细讲解配置文件以及MyBatis之间的调用关系。
这篇关于MyBatis入门的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-29RocketMQ底层原理资料详解:新手入门教程
- 2024-11-29RocketMQ源码资料解析与入门教程
- 2024-11-29[开源]6.1K star!这款电视直播源神器真的太赞啦!
- 2024-11-29HTTP压缩入门教程:轻松提升网页加载速度
- 2024-11-29JWT开发入门指南
- 2024-11-28知识管理革命:文档软件的新玩法了解一下!
- 2024-11-28低代码应用课程:新手入门全攻略
- 2024-11-28哪些办公软件适合团队协作,且能够清晰记录每个阶段的工作进展?
- 2024-11-28全栈低代码开发课程:零基础入门到初级实战
- 2024-11-28拖动排序课程:轻松掌握课程拖动排序功能