<dependencies> <!--导入单元测试jar--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--导入mybatis框架--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!--导入mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> </dependencies>
注意:在进行导入依赖时,建议也将资源文件导出到打包项目中的依赖进行导入
<!--保证在java和resources下的资源文件可以导出--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources>
数据库创建,创建mybatis数据库(省略)
数据库连接
连接到mybatis数据库
编写与数据库中标对应的实体类:ORM
在Mybatis官网获得xml文件的格式模板,在resources下编写一个配置文件。
模板xml代码:
<?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="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
修正我们模板,对应我们的数据库配置
<?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> <!--环境,可以配置多个 default="development":表示默认使用的环境--> <environments default="development"> <!--id="development":表示当前环境的id--> <environment id="development"> <!--transactionManager:表示事务管理 type="JDBC":表示类型为jdbc--> <transactionManager type="JDBC"/> <!--dataSource:表示数据源 type="POOLED":表示数据源类型--> <dataSource type="POOLED"> <!--property name="driver":数据库驱动名 value="${driver}":值--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!--property name="url":数据库url value="${url}"--> <!--时区与编码问题需要注意--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&charset=utf-8&serverTimezone=UTC"/> <!--property name="username":用户名 value="${username}"--> <property name="username" value="root"/> <!--property name="password":密码 value="${password}--> <property name="password" value="liyu297628"/> </dataSource> </environment> </environments> <!--每个mapper.xml文件都需要在mybatis的核心配置文件中进行绑定--> <mappers> <!--这里的配置需要在编写Dao的xml文件后配置--> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
我们需要获得sqlSession类(这里的sqlSession类可以将其比作Connection类,这个sqlSession封装了很多执行sql语句的方法),所以我们可以编写一个根据类,来获得sqlSession。
MybatisUtil工具类
package com.xiaoli.util; 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 MybatisUtil { private static SqlSessionFactory sessionFactory; static { //xml文件路径 String xmlPath = "mybatis-config.xml"; //获取xml文件的流 InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream(xmlPath); } catch (IOException e) { e.printStackTrace(); } //获取SqlSessionFactory工厂,用于获取SqlSession sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); } public static SqlSession getSqlSession(){ return sessionFactory.openSession(); } }
测试:
如果出现错误,我们需要先把mybatis-config.xml,中的mapper标签注释掉:
我们可以发现,上面的三个文件中,UserDao与UsereDaoImpl是我们所熟悉的,现在我们使用UserMapper.xml文件来代替实现类。
UserDao代码:
package com.xiaoli.dao; import com.xiaoli.pojo.User; import java.util.List; public interface UserDao { public List<User> getUserList(); }
UserMapper.xml文件的代码我们可以通过Mybatis官网获得模板,
模板代码:
<?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="org.mybatis.example.BlogMapper"> <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
我们修改模板代码,使其成为我们需要的代码:
<?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:即我们之前的dao namespace="org.mybatis.example.BlogMapper":填入我们需要绑定的接口 Dao/Mapper--> <mapper namespace="com.xiaoli.dao.UserDao"> <!--<select:需要执行sql语句 id="selectBlog":表示绑定的dao方法 resultType="Blog":表示返回的数据类型>--> <select id="getUserList" resultType="com.xiaoli.pojo.User"> select *from mybatis.user </select> </mapper>
xml代码:
<!--每个mapper.xml文件都需要在mybatis的核心配置文件中进行绑定--> <mappers> <!--这里的配置需要在编写Dao的xml文件后配置--> <mapper resource="com.xiaoli.dao/UserMapper.xml"/> </mappers>
测试代码:
package com.xiaoli.dao; import com.xiaoli.pojo.User; import com.xiaoli.util.MybatisUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; //测试sql语句执行结果 public class UserDaoTest { @Test public void test(){ //获取SqlSession对象 SqlSession sqlSession = MybatisUtil.getSqlSession(); //获取UserMapper.xml所对应的接口 UserDao mapper = sqlSession.getMapper(UserDao.class); //执行sql语句,获取执行结果集(相当于ResultSet) List<User> userList = mapper.getUserList(); //遍历 for (User user : userList) { System.out.println(user); } } }
运行结果:(可能会成功,也可能会出错)----resource加载文件必须使用 /
重新配置,运行:
移动目录:
修改mybatis-config.xml文件的mapper标签:
运行:
具体细节:
为什么mapper.xml文件需要保存在resources文件下?---------------------resource加载文件必须用 /
链接: