MyBatis环境配置
MyBatis是一款优秀的持久层框架,她是半自动的化的ORM(Object Relationship Mapping)框架。
1.准备工具
- jdk 13.0.2
- maven 3.6.3
- MyBatis 3.5.4
- junit 4.13
- logback 1.2.3
- MySQL-connector-java 8.0.20
- slf4j 1.7.25
2.创建一个空的maven项目
- 可以使用IDE创建,比如IDEA或者Eclipse之类的;
- 也可以使用命令行创建
mvn archetype:generate -DgroupId=com.kestiny -DartifactId=mybatis -Dversion=0.1.0
3.导入MyBatis依赖包
MyBatis相关依赖包主要是MySQL驱动,都可在maven仓库中查找到;
org.mybatismybatis3.5.4
mysqlmysql-connector-java8.0.20runtime
4.编写MyBatis核心配置文件
MyBatis的配置和使用都可参见MyBatis官方文档
注意: 1. MyBatis的xml配置文件标签是有顺序的,顺序和官方定位的不符时,是无法正确的使用的,当前版本时的顺序为:properties=>settings=>typeAliases=>typeHandlers=>objectFactory=>objectWrapperFactory=>reflectorFactory=>plugins=>environments=>databaseIdProvider=>mappers 2. 变量的引用需要使用${},变量的配置文件需要在properties resource标签中指定,当然也可以使用代码的方式读取; 3. environment中可以配置多个环境,但是可以生效的只有一个,需要在default中指定; 4. 数据源类型默认为POOLED,目前一共有三种内置数据源类型:UNPOOLED、POOLED和JNDI;
5.准备代码和PersonMapper.xml文件
准备代码,参见mybatis模块
编写PersonMapper.xml文件
6.执行测试
@Test
public void testPerson() {try {String resource = "mybatis-config.xml";InputStream inputStream = inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = build.openSession();PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);List personList = mapper.selectAll();logger.info("查找数据:" + personList.size());for (Person person : personList) {logger.info(person.toString());}sqlSession.close();} catch (IOException e) {e.printStackTrace();}
}
注意: 1. 需要从前面的配置文件中,获取MyBatis的连接; 2. 从已有连接中获取一次SqlSession,每次使用完成后,需要把SqlSession释放; 3. 使用前,需要先从session中获取mapper。
7. 获取SqlSession的优化
每次都从头创建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 personList = mapper.selectAll();logger.info("查找数据:" + personList.size());for (Person person : personList) {logger.info(person.toString());}sqlSession.close();
}