注解方式整合Spring和MyBatis
注解方式整合Spring和MyBatis
- 写在前面
- 一、整合工作
-
-
- 1、导入 mybatis 和 spring 整合包
- 2、创建jdbc.properties文件,配置数据库信息
- 3、创建JdbcConfig类,配置数据源DataSource
- 4、创建MyBatisConfig配置类
- 5、创建 Spring 的配置类
-
- 二、测试
-
-
- 1、前期准备
-
-
- 1)User实体类
- 2)mapper 接口
- 3)service接口
- 4)service实现类
-
- 2、编写测试方法
- 3、查询结果
-
写在前面
- 在整合 Spring 和 MyBatis 之前,我们需要对 Spring 和 MyBatis 相关知识有一定的了解,不了解的小伙伴也不必担心,可以先查阅博主 Spring 和 MyBatis 两个专栏中的相关文章,有一定了解后再来整合 Spring 和 MyBatis ,理解会更加的深刻。
一、整合工作
1、导入 mybatis 和 spring 整合包
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.7</version></dependency>
除此之外,还需要提供 Spring 框架所需jar包,连接数据库所需jar包,如:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.16</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.17</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version></dependency><dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.16</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version></dependency>
2、创建jdbc.properties文件,配置数据库信息
jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/ssmjdbc.username=rootjdbc.password=123456
3、创建JdbcConfig类,配置数据源DataSource
public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource dataSource(){ DruidDataSource druidDataSource = new DruidDataSource(); druidDataSource.setDriverClassName(driver); druidDataSource.setUrl(url); druidDataSource.setUsername(username); druidDataSource.setPassword(password); return druidDataSource; }}
- 因为使用了纯注解开发的方式,所以 DataSource 数据源对象,需要通过方法返回。
- 不清楚如何使用注解方式管理第三方 bean 对象的小伙伴可以移步到 注解方式管理第三方bean 查看。
4、创建MyBatisConfig配置类
public class MyBatisConfig { @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setTypeAliasesPackage("pojo"); ssfb.setDataSource(dataSource); return ssfb; } @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); msc.setBasePackage("mapper");; return msc; }}
xml 配置与注解配置间的对应关系
- MyBatis 使用流程如下,详细内容见文章 MyBatis 搭建流程。
// 1、读取MyBatis核心配置文件mybatis-config.xmlInputStream input = Resources.getResourceAsStream("mybatis-config.xml");// 2、创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3、创建SqlSessionFactory对象SqlSessionFactory factory = builder.build(input);// 4、创建sqlSession对象,传入true开启事务自动提交SqlSession sqlSession = factory.openSession(true);// 5、获取到UserMapper对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 6、测试定义的方法......
5、创建 Spring 的配置类
@Configuration@PropertySource({"jdbc.properties"})@ComponentScan({"mapper","pojo","service"})@Import({JdbcConfig.class,MyBatisConfig.class})public class SpringConfig {}
二、测试
1、前期准备
1)User实体类
public class User { private Integer id; private String username; private Integer age; private String password;// 省略了构造器方法、set和get方法以及toString方法}
2)mapper 接口
@Repositorypublic interface UserMapper { @Select("select * from user where id = #{id}") public User selectById(Integer id);}
- 定义了一个通过 id 获取用户信息的查询方法。
- 使用注解完成 SQL 语句的编写映射,不再提供对应的 xml 方法。
3)service接口
public interface UserService { public User selectById(Integer id);}
4)service实现类
@Servicepublic class UserServiceImpl implements UserService { @Autowired UserMapper userMapper; public User selectById(Integer id) { User user = userMapper.selectById(id); return user; }}
2、编写测试方法
public class App { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); UserService bean = context.getBean(UserService.class); User user = bean.selectById(3); System.out.println(user); }}
- 查询user表中,id为3的数据。
3、查询结果
User{id=3, username='qdxorigin', age=22, password='123456'}