一、Mybatis的启动流程
- 加载Mapper配置的映射文件或者注解相关sql内容
- 创建会话工厂,MyBatis通过读写配置文件中的数据源信息来构造会话工厂
- 创建会话,Mybatis通过会话工厂创建会话对象,会话对象是个接口,包含对数据库的增删改查方法
- 创建执行器,会话本身不能直接操作数据库,通过数据库执行器来帮它执行操作
- 封装Sql对象,执行器将代处理sql信息分到对象MappedStatement中,包括sql语句、输入输出、输出结果映射
- 操作数据库
二、Spring boot集成Mybatis
1.在项目pom文件引入Mybatis和数据库相关连接驱动 mysql
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2.application.property配置
#mapper.xml 配置文件的路径
mybatis.mapper-locations=classpath:/mapper/*.xml
mybatis.type-aliases-package=com.linsq.ngf.entity
#数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/ngf?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
3.启动类配置
@Spring BootApplication
@MapperScan("com.linsq.ngf")
public class Appliction{
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
4.applicationContext
定义datasource
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${db1.url}"/>
<property name="username" value="${db1.username}"/>
<property name="password" value="${db1.password}"/>
</bean>
定义SqlSessionFactory,关联MyBatis
bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--关联Mybatis-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="mapperLocations">
<array>
<value>classpath:META-INF/mapper/*.xml</value>
</array>
</property>
</bean>
5.测试(测试类无法自动获取上下文环境中的bean)
1.通过applicationcontext手动获取bean
public class PersonInfoServiceImplTest {
@Test
public void queryPersonList(){
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:META-INF/spring/applicationContext.xml");
IPersonInfoDao personInfoDao = (IPersonInfoDao) context.getBean("IPersonInfoDao");
//查询
PersonInfoEntity personInfoEntity=personInfoDao.selectPersonInfobyId("0001322310");
if(personInfoEntity !=null){
System.out.println("PersonID:"+personInfoEntity.getPersonId()+",Name:"+personInfoEntity.getName());
}
}
}
2.改变测试类的运行环境实现自动注入bean
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {AppStart.class})
public class PersonInfoServiceImplTest {
@Autowired
private IPersonInfoDao personInfoDao;
@Test
public void queryPersonList(){
//查询
PersonInfoEntity personInfoEntity=personInfoDao.selectPersonInfobyId("0001322310");
if(personInfoEntity !=null){
System.out.println("PersonID:"+personInfoEntity.getPersonId()+",Name:"+personInfoEntity.getName());
}
}
}