下面我将介绍Spring整合Mybatis的具体代码实现流程。
首先,需要在项目的pom.xml文件中添加Spring和Mybatis相关的依赖。具体的依赖可以根据使用的版本和需求进行选择。
<dependencies>
<!--Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.6.RELEASE</version>
</dependency>
<!--Mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
</dependencies>
在Spring中配置数据源,可以使用Spring内置的数据源,也可以使用第三方的数据源。这里以使用Druid数据源为例进行配置。
@Configuration
public class DataSourceConfig {
@Bean(initMethod = "init", destroyMethod = "close")
public DruidDataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("123456");
return dataSource;
}
}
在Spring中使用Mybatis需要配置SqlSessionFactory,SqlSession等bean。这里使用Mybatis-spring提供的SqlSessionFactoryBean进行配置。
@Configuration
@MapperScan(basePackages = "com.example.mapper")
public class MybatisConfig {
@Autowired
private DataSource dataSource;
@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath*:mapper/*.xml"));
return sessionFactory;
}
@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
这里需要注意的是,需要指定Mapper接口所在的包路径,在本例中为com.example.mapper
。同时还需要指定mapper文件的位置,这里使用通配符表示所有mapper文件都在classpath*:mapper/
目录下。
在Spring中使用事务需要配置TransactionManager和@EnableTransactionManagement注解。
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Autowired
private DataSource dataSource;
@Bean
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
在项目中编写相关的Mapper接口和对应的Mapper.xml文件,以实现对数据库的CRUD操作。这里给出一个示例。
UserMapper.java
public interface UserMapper {
User getById(Long id);
List<User> getAll();
void insert(User user);
void update(User user);
void delete(Long id);
}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.example.model.User">
<id column="id" property="id" jdbcType="BIGINT"/>
<result column="name" property="name" jdbcType="VARCHAR"/>
<result column="age" property="age" jdbcType="INTEGER"/>
</resultMap>
<select id="getById" resultMap="BaseResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getAll" resultMap="BaseResultMap">
SELECT * FROM user
</select>
<insert id="insert">
INSERT INTO user(name,age) VALUES (#{name},#{age})
</insert>
<update id="update">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="delete">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
上述配置完成后,就可以进行测试了。这里给出一个简单的测试示例。
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void getByIdTest() {
User user = userMapper.getById(1L);
Assert.assertNotNull(user);
Assert.assertEquals(Long.valueOf(1L), user.getId());
System.out.println(user);
}
@Test
public void getAllTest() {
List<User> users = userMapper.getAll();
Assert.assertNotEquals(0, users.size());
}
@Test
public void insertTest() {
User user = new User();
user.setName("Lucy");
user.setAge(18);
userMapper.insert(user);
Assert.assertNotNull(user.getId());
}
@Test
public void updateTest() {
User user = userMapper.getById(1L);
user.setName("Tom");
user.setAge(20);
userMapper.update(user);
User updatedUser = userMapper.getById(1L);
Assert.assertEquals(user.getName(), updatedUser.getName());
Assert.assertEquals(user.getAge(), updatedUser.getAge());
}
@Test
public void deleteTest() {
List<User> users = userMapper.getAll();
int count = users.size();
userMapper.delete(1L);
users = userMapper.getAll();
Assert.assertEquals(count - 1, users.size());
}
}
该测试类中使用了@Transactional
注解,用于标识当前的测试方法在执行完毕后需要回滚事务。这样,就可以保证测试数据不会对数据库产生影响。
至此,Spring整合Mybatis的具体代码实现流程就完成了,您可以根据您的需求进行相应的修改和调整。
本文链接:http://task.lmcjl.com/news/7953.html