- Spring整合MyBatis的三种方式
在使用Spring整合MyBatis时,有三种常见的方式:
- 方式一:使用注解配置
- 方式二:使用XML配置
- 方式三:使用Java配置
接下来,将分别对这三种方式进行详细讲解。
- 方式一:使用注解配置
使用注解配置整合MyBatis非常简单,只需要在Spring配置文件中添加以下代码:
<!-- 配置MyBatis扫描Mapper接口包 -->
<mybatis-spring:scan base-package="com.example.mapper" />
<!-- 配置MyBatis SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
其中,com.example.mapper
是你的Mapper接口所在的包名。
接下来可以通过注解来配置Mapper接口,例如:
@Repository
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
public User getUserById(@Param("id") Integer id);
}
上述代码中,@Select
注解用于配置SQL语句,@Param
注解用于指定参数名。
这种方式配置简单、代码量少,但是缺点是不够灵活。
- 方式二:使用XML配置
使用XML配置方式整合MyBatis比较灵活,以下是整合的步骤:
- 配置Mapper接口扫描路径
<bean id="mapperScannerConfigurer"
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
- 配置MyBatis SqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath*:com/example/mapper/*.xml" />
</bean>
上述代码中,mybatis-config.xml
是MyBatis的配置文件,所有Mapper接口的XML文件在com.example.mapper
下。
- 编写Mapper接口
public interface UserMapper {
public User getUserById(Integer id);
}
- 编写SQL语句
<!-- com.example.mapper.UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<resultMap id="userMap" type="com.example.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
</mapper>
使用XML配置方式灵活,能够满足各种需求,但是代码复杂度较高。
- 方式三:使用Java配置
使用Java配置方式整合MyBatis也可行,以下是整合的步骤:
- 配置数据源
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName(DRIVER_NAME);
dataSource.setJdbcUrl(JDBC_URL);
dataSource.setUsername(USER_NAME);
dataSource.setPassword(PASSWORD);
return dataSource;
}
- 配置MyBatis SqlSessionFactory
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath*:com/example/mapper/*.xml"));
return sessionFactory.getObject();
}
这里使用了资源文件匹配器来查找Mapper接口的XML文件。
- 编写Mapper接口
public interface UserMapper {
public User getUserById(Integer id);
}
- 编写SQL语句
<!-- com.example.mapper.UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<resultMap id="userMap" type="com.example.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
</mapper>
使用Java配置方式简单易懂,能够提高代码的可读性和可维护性,但是需要了解Spring的Java配置方式。
- 示例
这里提供一个使用XML配置方式整合MyBatis的示例。
- 配置MySQL数据源
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
- 配置MyBatis SqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<property name="mapperLocations" value="classpath*:com/example/mapper/*.xml" />
</bean>
- 配置Mapper接口扫描路径
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper" />
</bean>
- 编写Mapper接口和SQL语句
public interface UserMapper {
public User getUserById(Integer id);
}
<!-- com.example.mapper.UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<resultMap id="userMap" type="com.example.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</resultMap>
</mapper>
- 编写Service类
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Integer id) {
return userMapper.getUserById(id);
}
}
- 编写Controller类
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user/{id}")
@ResponseBody
public User getUserById(@PathVariable("id") Integer id) {
return userService.getUserById(id);
}
}
最后,启动服务器,访问http://localhost:8080/user/1
即可获取id为1的用户信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring整合MyBatis的三种方式 - Python技术站