ssss如果想学好一门技术,当然要去看官方文档。myBatis-starter 配置分析是:myBatis官方文档
整合MyBatis
myBatis-starter 配置分析
sdsdsss引入starter:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
sdsdsddsddsdsdsds
ssss①、自动配置分析
ssdsdsdsdsdsdsdsdsdss
sdsdsss分析1:myBatis自动配置前所需的组件:
@Configuration
@ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) //自动配置了 SqlSessionFactory
@ConditionalOnSingleCandidate(DataSource.class) // 容器中有且仅有一个数据源
@EnableConfigurationProperties({MybatisProperties.class}) // 绑定配置项 @ConfigurationProperties(prefix = "mybatis")
@AutoConfigureAfter({DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class})
public class MybatisAutoConfiguration implements InitializingBean {
sdsdsss分析2:myBatis自动配置了 SqlSessionTemplate,SqlSessionTemplate 继承了 SqlSession
sdsdss
sdsdsdsdsddsdsdss
sdsdsss分析3:@Import(AutoConfiguredMapperScannerRegistrar.class) .通过这个类我们可以直到,只要我们写的操作MyBatis的接口标注了 @Mapper 就会被自动扫描进来
sdssdsddss
纯配置模式的myBatis使用:
ssss①、创建接口和所需操作的表对应的类 ssssdsdsdsdsdss
ssdsdsddsddsdsdsdsss
@Mapper
public interface AdminMapper { public Admin getAcct(Long id); //操作方法}
===================================================================================
@Data
public class Admin {
private Long id;
private String username;
private String password;
}
ssss②、创建全局配置文件和sql映射文件
ssdsdsddsdsdsdddsdsdsdsdsdss
<?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>
</configuration>
================================================================================================================
<?xml version="1.0" encoding="UTF-8" ?> //sql映射文件
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.webadmin.mapper.AdminMapper">
<!-- public Admin getAcct(Long id); -->
<select id="getAcct" resultType="com.atguigu.webadmin.bean.Admin">
select * from admin where id=#{id}
</select>
</mapper>
ssss③、创建Service层调用DAO和Controller层测试sdsss
@Service
public class AdminService {
@Autowired
AdminMapper adminMapper;
public Admin getAcctById(Long id){
return adminMapper.getAcct(id);
}
}
===============================================================================================
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
AdminService adminService;
@ResponseBody
@GetMapping("/admin")
public Admin getById(@RequestParam("id") Long id){
return adminService.getAcctById(id);
}
ssss④、以上都是传统myBatis操作步骤,现在需要结合SpringBoot:
#配置ybatis规则
mybatis:
config-location: classpath:mybatis/mybatis-config.xml #xml 全局配置文件位置
mapper-locations: classpath:mybatis/mapper/*.xml #sql映射文件位置
ssss⑤、测试发送:http://localhost:8080/admin?id=1
,结果显示:
sdsdsss【注】:通过SpringBoot配置文件修改全局配置(推荐使用):
sdsddssss配置 mybatis.configuration下面的所有,就是相当于改mybatis全局配置文件中的值
sdsddssss通过SpringBoot配置文件修改全局配置就不用再单独创建mybatis的全局配置文件mybatis-config.xml:
#配置ybatis规则
mybatis:
# config-location: classpath:mybatis/mybatis-config.xml #xml 全局配置文件位置
mapper-locations: classpath:mybatis/mapper/*.xml #sql映射文件位置
# 指定mybatis全局配置文件中的相关配置
configuration:
map-underscore-to-camel-case: true
纯注解模式
ssssLet’s create a MyBatis Spring Boot Application quickly using the SPRING INITIALIZR.
ssd
ssss代码实现:
@Mapper
public interface CityMapper {
@Select("select * from city where id=#{id}")
public City getById(Long id);
@Insert(" insert into city (`name`,`state`,`country`) values(#{name}, # {state }, #{country})")
@Options(useGeneratedKeys = true,keyProperty = "id")
public void insert(City city);
}
ssss混合模式:
sssdsdsdsdss①、简单方法直接注解方式ssss②、复杂方法编写mapper.xml进行绑定映射
myBatis的最佳使用:
ssss①、引入mybatis-starter
ssss②、配置application.yaml中,指定mapper-location位置即可
ssss③、编写Mapper接口并标注@Mapper注解
ssss④、简单方法直接注解方式
ssss⑤、复杂方法编写 xxxxmapper.xml 进行绑定映射
sdss【注】:在主配置类上添加@MapperScan(“com.njupt.admin.mapper”) 简化,其他的接口就可以不用标注@Mapper 注解
@MapperScan("com.atguigu.webadmin.mapper")
@SpringBootApplication
public class Boot06MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(Boot06MybatisApplication.class, args);
}
}