本文最后更新于:May 13, 2023 pm
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
目录 MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html
1.创建项目
首先建一个空工程(Empty Project)。
新建一个 Module ,选择 Maven(快速创建 org.apache.maven.archetypes:maven-archetype-quickstart
)。
在 main 下新建一个 resources
文件。(右键 main 选择 new -> Directory
,创建(选择)resources 即可)。如果创建后图标只是一个单纯的文件夹(没有其他东西),右键该文件夹,选择 Mark Directory as -> Resources Root
。(注意:如果是 Test Resources Root 则不需要点。如果点了后,再按照同样的步骤点一遍即可。)
整理 pom.xml
文件
2.添加依赖 打开 pom.xml
文件。在 dependencies
中添加依赖。
2.1 MyBatis 依赖 <dependency > <groupId > org.mybatis</groupId > <artifactId > mybatis</artifactId > <version > 3.5.1</version > </dependency >
报错先不要急!
2.2 MySQL 驱动 <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 5.1.9</version > </dependency >
处理
右键 pom.xml
文件,选择 Maven
-> Reload project(刷新图标)
。
在右侧的 Maven 中可以看见添加的依赖。
📢注意:这里使用的是mysql 5.1 版本的,可能会报错如下,只需要将 5.1 换成8.0 版本的即可。
3.创建实体类 在 main 中(src/main/java/com/loong/test) 下创建 USER 实体类。要求属性与列名一样。快速创建get 、 set 和 toString()方法 Alt + Insert
。
USER.class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package com.loong.test;public class USER { private Integer id; private String username; private String tele; public Integer getId () { return id; } public void setId (Integer id) { this .id = id; } public String getUsername () { return username; } public void setUsername (String username) { this .username = username; } public String getTele () { return tele; } public void setTele (String tele) { this .tele = tele; } @Override public String toString () { return "USER{" + "id=" + id + ", username='" + username + '\'' + ", tele='" + tele + '\'' + '}' ; } }
4.创建DAO接口 在 main 中(src/main/java/com/loong/dao)下 创建 MybatisStudyDao接口
。
USERDao
package com.loong.Dao;import com.loong.test.USER;import java.util.List;public interface MybatisStudyDao { public List<USER> alluser () ; }
5.SQL映射文件 **需要放在与接口同一目录下,即 src/main/java/com/loong/dao 目录下。文件名称与接口名称一样。 **
创建 MybatisStudyDao.xml
文件。
<?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.loong.Dao.MybatisStudyDao" > <select id ="alluser" resultType ="com.loong.test.USER" > select * from test; </select > </mapper >
SQL映射文件:用来写SQL语句的。MyBatis会执行这些SQL。 其中,
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
这个是指定约束文件。mybatis-3-mapper.dtd
是约束文件的名称。约束文件用来限制和检查在当前文件中出现的标签、属性是否符合MyBatis的要求。
mapper
:是当前文件的根标签,且是必须的。namespace
:是命名空间,唯一值,可以是自定义的字符串,但必须是使用 dao 接口的全限定名称。如:com.loong.dao.USERDao
<select>
:执行查询语句。<update>
:更新数据库操作。<insert>
:插入。<delete>
:删除。
<select id ="alluser" resultType ="com.loong.test.USER" > select * from test;</select >
id
:要执行的SQL语句的唯一标识,MyBatis会使用这个id的值来找到要执行的SQL语句。可以自定义,但是要求使用接口中的方法名称。resultType
:表示结果类型。是SQL语句执行后得到 ResultSet ,遍历这个 ResultSet 得到 Java 对象的类型。值是类型的全限定名称。
6.数据库连接 在resources
中新建 mybatis.xml
文件。
mybatis.xml;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?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 > <environments default ="development" > <environment id ="development" > <transactionManager type ="JDBC" /> <dataSource type ="POOLED" > <property name ="driver" value ="com.mysql.cj.jdbc.Driver" /> <property name ="url" value ="jdbc:mysql://localhost:3306/teamc?useSSL=false & serverTimezone=UTC" /> <property name ="username" value ="root" /> <property name ="password" value ="loong" /> </dataSource > </environment > </environments > <mappers > <mapper resource ="com/loong/Dao/MybatisStudyDao.xml" /> </mappers > </configuration >
mybatis 的主配置文件:主要定义了数据库的配置信息,SQL映射文件的位置。
约束文件。
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
configuration
:是根标签。environments
:是环境配置,就是数据库的连接信息。default 表示默认连接哪一个数据库,必须和某个 environment 的 id 值一样,告诉mybatis使用哪一个数据库的连接信息。environment
:一个数据库信息的配置。id 是表示环境的名称transactionManager
:表示事务的类型。 type :jdbc(表示使用jdbc中的Connection对象的commit、rollback做事务处理。)dataSource
:表示数据源,用来连接数据库的。type 表示数据源的类型,而 pooled 表示使用连接池。property
:表示数据库的具体信息。
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?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 > <environments default ="development" > <environment id ="development" > <transactionManager type ="JDBC" /> <dataSource type ="POOLED" > <property name ="driver" value ="com.mysql.jdbc.Driver" /> <property name ="url" value ="jdbc:mysql://localhost:3306/teamc" /> <property name ="username" value ="root" /> <property name ="password" value ="12345" /> //密码 </dataSource > </environment > </environments > <mappers > <mapper resource ="com/loong/dao/USERDao.xml" /> </mappers > </configuration >
其中的 mappers 中写sql映射文件的位置。 一个mapper标签指定一个文件的位置。从类路径开始的路径信息(target/classes),其中classes就是类路径。这里的 target 文件需要在编译后才能看到。 在右侧的 Maven中, Lifecycle -> compile 。
但在默认情况下,target 中没有xml 文件。需要安装maven插件(也可以不用安装)。
在 pom.xml
文件的 build
中添加如下代码。
<resources > <resource > <directory > src/main/java</directory > <includes > <include > **/*.properties</include > <include > **/*.xml</include > </includes > <filtering > false</filtering > </resource > </resources >
加好之后,可以 Rload project ,再编译一遍。
7.运行 在main 下的 loong 目录下新建一个 java文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public static void main (String[] args) throws IOException { String config = "mybatis.xml" ; InputStream in = Resources.getResourceAsStream(config); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); SqlSession sqlsession = factory.openSession(); String sqlid = "com.loong.Dao.MybatisStudyDao" +"." +"alluser" ; List<USER> us = sqlsession.selectList(sqlid); us.forEach(stu->System.out.println(stu)); sqlsession.close(); }
完整代码 1.项目目录
2.代码实现 1.1 MyBatisStudyDao(接口) package com.loong.Dao;import com.loong.test.USER;import java.util.List;public interface MybatisStudyDao { public List<USER> alluser () ; }
1.2 MyBatisStudyDao.xml <?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.loong.Dao.MybatisStudyDao" > <!-- <select id="selectBlog" resultType="Blog" >--> <!-- select * from Blog where id = #{id}--> <!-- </select>--> <select id="alluser" resultType="com.loong.test.USER" > select * from test; </select> </mapper>
2.1 USER 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package com.loong.test;public class USER { private Integer id; private String username; private String tele; public Integer getId () { return id; } public void setId (Integer id) { this .id = id; } public String getUsername () { return username; } public void setUsername (String username) { this .username = username; } public String getTele () { return tele; } public void setTele (String tele) { this .tele = tele; } @Override public String toString () { return "USER{" + "id=" + id + ", username='" + username + '\'' + ", tele='" + tele + '\'' + '}' ; } }
3.1 myapp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.loong;import com.loong.test.USER;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;import java.util.List;public class myapp { public static void main (String[] args) throws IOException { String config = "mybatis.xml" ; InputStream in = Resources.getResourceAsStream(config); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); SqlSession sqlsession = factory.openSession(); String sqlid = "com.loong.Dao.MybatisStudyDao.alluser" ; List<USER> us = sqlsession.selectList(sqlid); us.forEach(stu->System.out.println(stu)); sqlsession.close(); } }
4.1 mybatis.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <?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 > <environments default ="development" > <environment id ="development" > <transactionManager type ="JDBC" /> <dataSource type ="POOLED" > <property name ="driver" value ="com.mysql.cj.jdbc.Driver" /> <property name ="url" value ="jdbc:mysql://localhost:3306/teamc?useSSL=false & serverTimezone=UTC" /> <property name ="username" value ="root" /> <property name ="password" value ="loong" /> </dataSource > </environment > </environments > <mappers > <mapper resource ="com/loong/Dao/MybatisStudyDao.xml" /> </mappers > </configuration >
5.1 pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 <?xml version="1.0" encoding="UTF-8"?> <project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion > 4.0.0</modelVersion > <groupId > com.loong</groupId > <artifactId > MyBatis_Study</artifactId > <version > 1.0-SNAPSHOT</version > <properties > <project.build.sourceEncoding > UTF-8</project.build.sourceEncoding > <maven.compiler.source > 1.8</maven.compiler.source > <maven.compiler.target > 1.8</maven.compiler.target > </properties > <dependencies > <dependency > <groupId > junit</groupId > <artifactId > junit</artifactId > <version > 4.11</version > <scope > test</scope > </dependency > <dependency > <groupId > org.mybatis</groupId > <artifactId > mybatis</artifactId > <version > 3.5.1</version > </dependency > <dependency > <groupId > org.mybatis</groupId > <artifactId > mybatis</artifactId > <version > 3.4.0</version > </dependency > <dependency > <groupId > mysql</groupId > <artifactId > mysql-connector-java</artifactId > <version > 8.0.16</version > </dependency > </dependencies > <build > <resources > <resource > <directory > src/main/java</directory > <includes > <include > **/*.properties</include > <include > **/*.xml</include > </includes > <filtering > false</filtering > </resource > </resources > </build > </project >
报错问题
报错原因:没有找到资源文件。(但自己明明写了,但为什么报错没有资源文件。)
这是因为在build后的文件夹中没有build上(看target文件夹),对照图片。
解决办法一:直接将缺少的配置文件复制粘贴到对应的位置即可。
解决办法二:将以下代码加入pom中的build
标签下。
<resources > <resource > <directory > src/main/java</directory > <includes > <include > **/*.properties</include > <include > **/*.xml</include > </includes > <filtering > false</filtering > </resource > </resources >
然后删除之前的target文件夹,再重新Rebuild Project 即可。
如果在resource目录出现相同情况,只需要再多写一个针对resource目录的即可,即:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <resources > <resource > <directory > src/main/java</directory > <includes > <include > **/*.properties</include > <include > **/*.xml</include > </includes > <filtering > false</filtering > </resource > <resource > <directory > src/main/resource</directory > <includes > <include > **/*.properties</include > <include > **/*.xml</include > </includes > <filtering > false</filtering > </resource > </resources >