二、搭建MyBatis
1、开发环境
IDE:idea 2019.2
构建工具:maven 3.6.3
MySQL版本:MySQL 8.0
MyBatis版本:MyBatis 3.5.7
2、创建maven工程
1)先创建一个空工程
2)在项目结构中配置SDK
3)在设置中配置本地maven的路径和maven仓库的镜像网站路径,以提高下载效率
4)新建模块"MyBatis-搭建MyBatis"
5)在Navicat中新建一张表t_user
6)
a>打包方式:jar
pom.xml文件中设置:
<groupId>com.atguigu.mybatis</groupId> <artifactId>MyBatis-搭建MyBatis</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!--设置打包方式-->
b>引入依赖
pom.xml文件中设置:
<!--引入依赖--> <dependencies> <!--MyBatis核心--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.7</version> </dependency> <!--junit测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!--MySQL驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> </dependencies>
3、创建MyBatis的核心配置文件
习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略,所以在操作时可以直接复制、粘贴。
核心配置文件主要用于配置连接数据库的环境以及MyBatis的全局配置信总
核心配置文件存放的位置是src/main/resources目录下
mybatis-config.xml文件设置:
<?xml version="1.0" encoding="UTF-8" ?> <!--用于声明该xml文件的版本号及编码方式--> <!--mybatis配置文件中的约束--> <!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"> <!--设置事务管理器的类型为JDBC--> <transactionManager type="JDBC" /> <!--设置数据源,作用是设置连接数据库的信息--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <!--引入映射文件--> <mappers> <!--引入配置好的mapper映射文件--> <mapper resource="mappers/UserMapper.xml" /> </mappers> </configuration>
4、创建mapper接口
MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,不需要提供实现类。
1)在java目录下创建com/atguigu/mybatis/pojo包,用于存放实体类。然后在pojo包下新建User类:
public class User { private Integer id; private String username; private String password; private Integer age; private String sex; private String email; //设置有参构造(快捷键:Alt+Insert) public User(Integer id, String username, String password, Integer age, String sex, String email) { this.id = id; this.username = username; this.password = password; this.age = age; this.sex = sex; this.email = email; } //设置无参构造(快捷键:Alt+Insert) public User(Integer id) { this.id = id; } //设置Setter和Getter方法(快捷键:Alt+Insert) 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 getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } //设置toString(快捷键:Alt+Insert) @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", email='" + email + '\'' + '}'; } }
2)在mybatis包下创建mapper包,代替dao。然后在mapper包下新建UserMapper接口:
package com.atguigu.mybatis.mapper; public interface UserMapper { /** * MyBatis面向接口编程的两个一致 * 1.mapper映射文件的namespace要和mapper接口的全类名保持一致 * 2.mapper映射文件中SQL语句的id要和mapper接口中的方法名一致 * * mybatis中的对应关系: * 表--->实体类--->mapper接口--->mapper映射文件 */ //添加用户信息 int insertUser(); }
5、创建MyBatis的映射文件
相关概念:ORM(Object Relationship Mapping)对象关系映射。
-
对象:Java的实体类对象
-
关系:关系型数据库
-
映射:二者之间的对应关系
Java概念 | 数据库概念 |
---|---|
类 | 表 |
属性 | 字段/列 |
对象 | 记录/行 |
1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表t_user,映时的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作(mapper接口相当于dao,而一张表的操作对应于一个dao,换句话来说一张表的操作对应于一个mapper接口和一个mapper映射文件,所以有几张表就对应有几个mapper接口和几个mapper映射文件)
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
2、MyBatis中可以面向接口操作数据,要保证两个一致:
a>mapper接口的全类名和mapper映射文件的命名空间(namespace)保持一致
b>mapper接口中的方法名和mapper映射文件中SQL语句的id保持一致
mapper接口中编写java语句的操作方法,mapper映射文件中编写SQL语句的操作方法。然后将mapper接口与mapper映射文件关联的目的是,实现调用mapper接口中的java语句时,运行与该mapper接口关联的mapper映射文件中的SQL语句,以实现对数据库的增删改查操作。
步骤:
1)在resources根目录下创建mappers目录,用于存放mapper映射文件。然后在mappers目录下新建UserMapper.xml文件并配置:
<?xml version="1.0" encoding="UTF-8" ?> <!--mybatis配置文件中的约束--> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--将该mapper映射文件与UserMapper接口关联--> <mapper namespace="com.atguigu.mybatis.mapper.UserMapper"> <!--添加用户信息,关联UserMapper接口中的insertUser()方法--> <insert id="insertUser"> insert into t_user values(null, 'admin', '123456', 23, '男', '12345@qq.com') </insert> </mapper>
2)创建晚mapper映射文件后,还需要在核心配置文件mybatis-config.xml中引入该映射文件:
<!--引入映射文件--> <mappers> <!--引入配置好的mapper映射文件--> <mapper resource="mappers/UserMapper.xml" /> </mappers>
6、通过junit测试增加功能
-
SqlSession:代表Java程序和数据库之间的会话(HttpSession是Java程序和浏览器之间的会话)。
-
SqlSessionFactory:是"生产"SqlSession的"工厂"。
-
工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都便用这个工厂类来"生产"我们需要的对象。
在test/java目录下新建com/atguigu/mybatis/test包,然后在test包下新建MyBatisTest测试类并配置:
/** * SqlSession默认不自动提交事务,若需要自动提交事务 * 可以使用SqlSessionFactory.openSession(true)来 * 设置 */ //测试插入用户信息功能 @Test public void testMyBatis() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //测试功能 //调用mapper接口的方法 int result = mapper.insertUser(); //提交事务 sqlSession.commit(); System.out.println("result:"+result); }
如果将SqlSession sqlSession = sqlSessionFactory.openSession();
设置为true,就不用总结手动提交事务了,例如:
/** * SqlSession默认不自动提交事务,若需要自动提交事务 * 可以使用SqlSessionFactory.openSession(true)来 * 设置 */ //测试插入用户信息功能 @Test public void testMyBatis() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //测试功能 //调用mapper接口的方法 int result = mapper.insertUser(); //提交事务 //sqlSession.commit(); System.out.println("result:"+result); }
-
遇到错误:
org.apache.ibatis.exceptions.PersistenceException: Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. The error may exist in mappers/UserMapper.xml The error may involve com.atguigu.mybatis.mapper.UserMapper.insertUser The error occurred while executing an update Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
原因:pom.xml文件中的“MySQL驱动”依赖版本与安装的MySQL80版本不兼容,导致连接数据库失败。
改进:将“MySQL驱动”依赖的版本改为8.0及以上就可以正常运行。
7、加入log4j日志功能
a>加入依赖
pom.xml文件中导入依赖:
<!--Log4j日志--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
b>加入log4j的配置文件
log4j的配置文件名为log4j.xml,存放的位置是src/main/resourcesml下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> <param name="Encoding" value="UTF-8" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" /> </layout> </appender> <logger name="java.sql"> <level value="debug" /> </logger> <logger name="org.apache.ibatis"> <level value="info" /> </logger> <root> <level value="debug" /> <appender-ref ref="STDOUT" /> </root> </log4j:configuration>
日志级别
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细
8、修改/删除功能
修改功能:
1)先在mapper接口文件UserMapper.java中编写好方法名:
//修改用户信息 void updateUser();
2)在mapper映射文件UserMapper.xml文件中编写SQL语句,以实现相应功能:
<!--修改用户信息,关联UserMapper接口中的updateUser()方法--> <update id="updateUser"> update t_user set username = '张三' where id = 4 </update>
3)编写测试类MyBatisTest.java:
//测试修改用户信息功能 @Test public void testUpdate() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //修改用户信息 mapper.updateUser(); }
删除功能:与修改功能同理
1)先在mapper接口文件UserMapper.java中编写好方法名:
//删除用户信息 void deleteUser();
2)在mapper映射文件UserMapper.xml文件中编写SQL语句,以实现相应功能:
<!--删除用户信息,关联UserMapper接口中的deleteUser方法--> <delete id="deleteUser"> delete from t_user where id = 5 </delete>
3)编写测试类MyBatisTest.java:
//测试删除用户信息功能 @Test public void testDelete() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //删除用户信息 mapper.deleteUser(); }
9、查询功能
9.1、查询实体类对象
1)先在mapper接口文件UserMapper.java中编写好方法名:
//根据id查询用户信息 User getUserById();
2)在mapper映射文件UserMapper.xml文件中编写SQL语句,以实现相应功能:
<!--根据id查询用户信息,关联UserMapper接口中的getUserById()方法 查询功能的标签必须设置为resultType或者resultMap resultType:设置默认的映射关系 resultMap:设置自定义的映射关系 此处resultType的作用是将查询到的结果转换为resultType所设置 的类型,然后再把结果作为最终的返回值,返回给getUserById()方法--> <select id="getUserById" resultType="com.atguigu.mybatis.pojo.User"> select * from t_user where id = 3 </select>
3)编写测试类MyBatisTest.java:
//测试根据id查询用户信息功能 @Test public void testGetUserById() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //根据id查询用户信息 User user = mapper.getUserById(); System.out.println(user); }
9.2、查询list集合
1)先在mapper接口文件UserMapper.java中编写好方法名:
//查询所有用户信息 List<User> getAllUser();
2)在mapper映射文件UserMapper.xml文件中编写SQL语句,以实现相应功能:
<!--查询所有用户信息,关联UserMapper接口中的getAllUser()方法--> <select id="getAllUser" resultType="com.atguigu.mybatis.pojo.User"> select * from t_user </select>
3)编写测试类MyBatisTest.java:
//测试查询所有用户信息功能 @Test public void testGetAllUser() throws IOException { //加载核心配置文件 InputStream is = Resources.getResourceAsStream("mybatis-config.xml"); //获取SqlSessionFactoryBuilder SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); //获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); //获取SqlSession。设置为true时,会自动提交事务 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); //查询所有用户信息 List<User> list = mapper.getAllUser(); for (User user : list){ System.out.println(user); } }
10、properties配置文件
1)在resources根目录下新建jdbc.properties文件,用来存放连接数据库的驱动、url、用户名和密码等信息:
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.username=root jdbc.password=123456
2)在核心配置文件mybatis-config.xml中引入jdbc.properties,并设置使用jdbc.properties文件中的信息来连接数据库:
引入jdbc.properties文件:
<!--引入jdbc.properties,用来设置连接数据库的信息--> <properties resource="jdbc.properties" />
设置使用jdbc.properties文件中的信息来连接数据库:
<!--设置连接数据库的驱动--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="driver" value="com.mysql.jdbc.Driver"/>--> <!--使用properties文件的信息连接数据库--> <property name="driver" value="${jdbc.driver}"/> <!--设置连接数据库的连接地址--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>--> <!--使用properties文件的信息连接数据库--> <property name="url" value="${jdbc.url}"/> <!--设置连接数据库的用户名--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="username" value="root"/>--> <!--使用properties文件的信息连接数据库--> <property name="username" value="${jdbc.username}"/> <!--设置连接数据库的密码--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="password" value="123456"/>--> <!--使用properties文件的信息连接数据库--> <property name="password" value="${jdbc.password}"/>
完整的mybatis-config.xml文件代码为:
<?xml version="1.0" encoding="UTF-8" ?> <!--用于声明该xml文件的版本号及编码方式--> <!--mybatis配置文件中的约束--> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--引入jdbc.properties,用来设置连接数据库的信息--> <properties resource="jdbc.properties" /> <!-- environments:配置多个连接数据库的环境(一个environments里可以 配置多个连接数据库的环境,即多个environment) 属性:default:设置默认使用的环境的id --> <!--配置连接数据库的环境--> <environments default="development"> <!-- environment:配置某个具体的环境 属性:id:是连接数据库的环境的唯一标识,不能重复 --> <environment id="development"> <!-- transactionManager:设置事务管理方式 属性:type="JDBC/MANAGED" JDBC:表示当前环境中,执行SQL时,使用的 是JDBC中原生的事务管理方式,事务的 提交或回滚需要手动处理。 MANAGED:被管理,例如Spring --> <!--设置事务管理器的类型为JDBC--> <transactionManager type="JDBC" /> <!-- dataSource:配置数据源 属性:type:设置数据源的类型。type="POOLED/UNPOOLED/JNDI" POOLED:表示使用数据库连接池缓存数据库连接 UNPOOLED:表示不使用数据库连接池 JNDI:表示使用上下文中的数据源 --> <!--设置数据源,作用是设置连接数据库的信息--> <dataSource type="POOLED"> <!--设置连接数据库的驱动--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="driver" value="com.mysql.jdbc.Driver"/>--> <!--使用properties文件的信息连接数据库--> <property name="driver" value="${jdbc.driver}"/> <!--设置连接数据库的连接地址--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>--> <!--使用properties文件的信息连接数据库--> <property name="url" value="${jdbc.url}"/> <!--设置连接数据库的用户名--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="username" value="root"/>--> <!--使用properties文件的信息连接数据库--> <property name="username" value="${jdbc.username}"/> <!--设置连接数据库的密码--> <!--不使用properties文件的信息,直接连接数据库--> <!--<property name="password" value="123456"/>--> <!--使用properties文件的信息连接数据库--> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--引入映射文件--> <mappers> <!--引入配置好的mapper映射文件--> <mapper resource="mappers/UserMapper.xml" /> </mappers> </configuration>
11、类型别名设置
可以在核心配置文件中设置类型别名,以便UserMapper.xml文件的resultType属性的编写。
类型别名的设置有两种方式:
1)使用typeAlias
标签
-
设置了
alias
属性:
核心配置文件中类型别名的设置:
<!--设置类型别名--> <typeAliases> <!-- typeAlias:设置某个类型的别名 属性:type:需要设置别名的类型 alias:设置type中类型的别名。如果不设置的话 默认类型别名为type中类的类名,且不区 分大小写 此类型别名为User或者user,使用时不区分大小写 --> <typeAlias type="com.atguigu.mybatis.pojo.User" alias="User" /> </typeAliases>
类型别名在UserMapper.xml文件中的使用:
<!--查询所有用户信息,关联UserMapper接口中的getAllUser()方法--> <!--resultType除了可以设置为User外,还可以设置为user,因为别名不区分大小写--> <select id="getAllUser" resultType="User"> select * from t_user </select>
注:类型别名不区分大小写。所以类型别名在UserMapper.xml文件中还可以写为user
。
在该核心配置文件中,typeAliases标签必须放在properties的后面。xml文件的配置中,标签的位置顺序为:
<!-- MyBatis核心配置文件中,标签的顺序: properties?,settings?,typeAliases?,typeHandlers?, objectFactory?,objectWrapperFactory?,reflectorFactory?, plugins?,environments?,databaseIdProvider?,mappers? -->
-
未设置
alias
属性:
此时别名默认为type
设置的类名且不区分大小写。
核心配置文件中类型别名的设置:
<!--设置类型别名--> <typeAliases> <!-- typeAlias:设置某个类型的别名 属性:type:需要设置别名的类型 alias:设置type中类型的别名。如果不设置的话 默认类型别名为type中类的类名,且不区 分大小写 此类型别名为User或者user,使用时不区分大小写 --> <typeAlias type="com.atguigu.mybatis.pojo.User" alias="User" /> </typeAliases>
类型别名在UserMapper.xml文件中的使用:
<!--查询所有用户信息,关联UserMapper接口中的getAllUser()方法--> <!--resultType除了可以设置为User外,还可以设置为user,因为别名不区分大小写--> <select id="getAllUser" resultType="User"> select * from t_user </select>
2)使用package
标签
该方法更常用
核心配置文件中类型别名的设置:
<!--设置类型别名--> <typeAliases> <!-- typeAlias:设置某个类型的别名 属性:type:需要设置别名的类型 alias:设置type中类型的别名。如果不设置的话 默认类型别名为type中类的类名,且不区 分大小写 此类型别名为User或者user,使用时不区分大小写 --> <!--<typeAlias type="com.atguigu.mybatis.pojo.User" alias="User" />--> <!--以包为单位,将包下所有类型设置为默认的类型别名,即类名,且不区分大小写。该方法更常用--> <package name="com.atguigu.mybatis.pojo"/> </typeAliases>
类型别名在UserMapper.xml文件中的使用:
<!--查询所有用户信息,关联UserMapper接口中的getAllUser()方法--> <!--resultType除了可以设置为User外,还可以设置为user,因为别名不区分大小写--> <select id="getAllUser" resultType="User"> select * from t_user </select>
注:该使用方法设置类型别名同样不区分大小写。所以类型别名在UserMapper.xml文件中还可以写为user
。
12、映射文件引入管理
核心配置文件中引入mapper映射文件有两种方式:
1)使用mapper
标签一次引入一个
核心配置文件中的设置:
<!--引入映射文件--> <mappers> <!--引入配置好的mapper映射文件--> <mapper resource="mappers/UserMapper.xml" /> </mappers>
2)使用package
标签一次引入多个
先在resources根目录下新建com/atguigu/mybatis/mapper子目录然后设置核心配置文件:
<!--引入映射文件--> <mappers> <!--引入配置好的mapper映射文件--> <!--<mapper resource="mappers/UserMapper.xml" />--> <!-- package:以包为单位引入映射文件,用该方法可以一次性引入多个映射文件, 而使用mapper标签的话,一次只能引入一个映射文件 package要求: 1.mapper接口所在的包要和映射文件所在的包一致 2.mapper接口要和映射文件的名称一致 --> <package name="com.atguigu.mybatis.xml"/> </mappers>
注:使用package
标签的要求: 1.mapper接口所在的包要和映射文件所在的包一致 2.mapper接口要和映射文件的名称一致