持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天
Mybatis
使用前的配置
-
创建maven工程
-
在maven的pom.xml配置文件中进行坐标配置
<!--Mybatis核心--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.11</version> </dependency> <!--junit测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--MySQL驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.19</version> </dependency> -
创建mybatis-config.xml,mybatis的核心配置文件,在文档中复制配置信息进去,把四个property标签配置好
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://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"/> <!--temp替换成你自己的数据库名称--> <property name="url" value="jdbc:mysql://localhost:3306/temp?serverTimezone=UTC&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="hexing"/> </dataSource> </environment> </environments> <mappers> </mappers> </configuration>相应地,{password}要改成自己电脑对应的mysql用户名以及密码
-
创建映射类,就是表中数据需要转化为的实体类,命名例如User
-
创建mapper接口(相当于以前的dao,区别在于,mapper仅仅是接口,不需要提供实现类),命名例如UserMapper
public interface UserMapper { void selectUser(); } -
创建mybatis的映射文件,在这里进行映射的配置,命名例如UserMapper.xml,其中mapper标签的namespace值要与我们第五步中的的接口全类名保持一致,这样他们之间就完成了绑定
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.hexiaoxing.mybatis.mapper.UserMapper"> </mapper>在mapper标签中就可以通过标签来定义对应数据库的增删改查操作,其中select标签的id要和第五步中的接口内的对应方法名保持一致,resultType对应实现类,完成数据库操作与对应接口方法的绑定
<select id="selectUser" resultType="User"> select * from User </select>往后我们增删改查操作都在接口中定义方法,在映射文件中绑定,通过面向接口编程达到操作数据库的目的
-
最后,我们在mybatis-config文件的mappers中引入映射文件,配置完成
<mappers> <mapper resource="mappers/UserMapper.xml"/> </mappers>
使用前的准备
-
在test下创建对应包及测试类,第一步:在类中创建测试方法,并加@test注释
@Test public void testMyBatis(){ } -
在方法体中加载核心配置文件,括号内传入的是配置第三步时创建的核心配置文件
@Test public void testMyBatis(){ //加载核心配置文件 Resources.getResourceAsStream("mybatis-config.xml"); } -
获取sqlSessionFactoryBuilder对象,Bilder,顾名思义,用来创建sqlSessionFactory对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); -
这里创建sqlSessionFactory对象,Factory,顾名思义,用来生产创建sqlSession
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is); -
通过工厂方法创建SqlSession对象,这里的SqlSession就代表了java程序和数据库之间的会话,传入true表示自动向数据库提交事务
SqlSession sqlSession = sqlSessionFactory.openSession(true); -
接下来就通过SqlSession获取mapper接口对象,这里getMapper会帮我们创建传入接口的实现类并返回
UserMapper mapper = sqlSession.getMapper(UserMapper.class); -
全部代码:
package com.hexiaoxing.mybatis.test; import com.hexiaoxing.mybatis.mapper.UserMapper; 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 org.junit.Test; import java.io.IOException; import java.io.InputStream; public class MybatisTest { @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 SqlSession sqlSession = sqlSessionFactory.openSession(true); //获取mapper接口对象 UserMapper mapper = sqlSession.getMapper(UserMapper.class); } }
补充:
工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象