MyBatis相关依赖包主要是MySQL驱动,都可在maven仓库中查找到;
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> <scope>runtime</scope> </dependency>MyBatis的配置和使用都可参见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="application.porperties"/> <typeAliases> <package name="com.kestiny.mybatis.entities"/> </typeAliases> <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="mapper/PersonMapper.xml"/> <mapper resource="mapper/SchoolMapper.xml"/> </mappers> </configuration>注意:
MyBatis的xml配置文件标签是有顺序的,顺序和官方定位的不符时,是无法正确的使用的,当前版本时的顺序为:properties=>settings=>typeAliases=>typeHandlers=>objectFactory=>objectWrapperFactory=>reflectorFactory=>plugins=>environments=>databaseIdProvider=>mappers变量的引用需要使用**${}**,变量的配置文件需要在properties resource标签中指定,当然也可以使用代码的方式读取;environment中可以配置多个环境,但是可以生效的只有一个,需要在default中指定;数据源类型默认为POOLED,目前一共有三种内置数据源类型:UNPOOLED、POOLED和JNDI;准备代码,参见mybatis模块
编写PersonMapper.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.kestiny.mybatis.mapper.PersonMapper"> <resultMap id="BaseResultMap" type="Person"> <id column="nid" jdbcType="INTEGER" property="id"/> </resultMap> <select id="selectAll" resultMap="BaseResultMap"> select * from person </select> </mapper>注意:
需要从前面的配置文件中,获取MyBatis的连接;从已有连接中获取一次SqlSession,每次使用完成后,需要把SqlSession释放;使用前,需要先从session中获取mapper。每次都从头创建SqlSessionFactory,在获取SqlSession,十分不便,并且会导致SqlSessionFactory多次创建,一次启动SqlSessionFactory只需要一个就可以了。
编写一个MyBatis工具类
public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }测试代码简化为
@Test public void testPerson() { SqlSession sqlSession = MybatisUtils.getSqlSession(); PersonMapper mapper = sqlSession.getMapper(PersonMapper.class); List<Person> personList = mapper.selectAll(); logger.info("查找数据:" + personList.size()); for (Person person : personList) { logger.info(person.toString()); } sqlSession.close(); } r.info("查找数据:" + personList.size()); for (Person person : personList) { logger.info(person.toString()); } sqlSession.close(); }