1. 集成 MyBatis

首先,需要在 pom.xml 文件中添加 MyBatis 和 MyBatis-Spring 的依赖:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>

然后,在 Spring 的配置文件中,配置数据源和 MyBatis 的 SqlSessionFactoryBean:

<bean id='dataSource' class='org.springframework.jdbc.datasource.DriverManagerDataSource'>
    <property name='driverClassName' value='com.mysql.jdbc.Driver'/>
    <property name='url' value='jdbc:mysql://localhost:3306/test'/>
    <property name='username' value='root'/>
    <property name='password' value='root'/>
</bean>

<bean id='sqlSessionFactory' class='org.mybatis.spring.SqlSessionFactoryBean'>
    <property name='dataSource' ref='dataSource'/>
    <property name='typeAliasesPackage' value='com.example.domain'/>
    <property name='configLocation' value='classpath:mybatis-config.xml'/>
</bean>
  1. 工具类的设计

在 MyBatis 中,每个 Mapper 接口都需要对应一个 Mapper XML 文件,而每个 Mapper 接口的实现类都需要通过 SqlSession 来获取 Mapper 对象。为了简化操作,可以提供一个工具类,封装了常用的数据操作。

首先,定义一个 BaseMapper 接口,包含常用的增删改查方法:

public interface BaseMapper<T> {
    int insert(T entity);
    int update(T entity);
    int deleteById(Long id);
    T selectById(Long id);
    List<T> selectAll();
}

然后,定义一个 BaseDao 类,用来实现 BaseMapper 接口中的方法:

public abstract class BaseDao<T> implements BaseMapper<T> {
    private SqlSession sqlSession;

    public void setSqlSession(SqlSession sqlSession) {
        this.sqlSession = sqlSession;
    }

    @Override
    public int insert(T entity) {
        return sqlSession.insert(getNamespace() + ".insert", entity);
    }

    @Override
    public int update(T entity) {
        return sqlSession.update(getNamespace() + ".update", entity);
    }

    @Override
    public int deleteById(Long id) {
        return sqlSession.delete(getNamespace() + ".deleteById", id);
    }

    @Override
    public T selectById(Long id) {
        return sqlSession.selectOne(getNamespace() + ".selectById", id);
    }

    @Override
    public List<T> selectAll() {
        return sqlSession.selectList(getNamespace() + ".selectAll");
    }

    protected abstract String getNamespace();
}

这个 BaseDao 类是一个抽象类,其中的 getNamespace() 方法需要在子类中实现,用来返回对应的 Mapper XML 文件中的 namespace。

最后,定义一个具体的 Dao 类,继承 BaseDao 类,并实现 getNamespace() 方法:

public class UserDao extends BaseDao<User> {
    @Override
    protected String getNamespace() {
        return 'com.example.mapper.UserMapper';
    }

    public List<User> selectByPage(int pageNum, int pageSize) {
        Map<String, Object> params = new HashMap<>();
        params.put('offset', (pageNum - 1) * pageSize);
        params.put('limit', pageSize);
        return getSqlSession().selectList(getNamespace() + ".selectByPage", params);
    }
}

这个 UserDao 类中还添加了一个 selectByPage 方法,用来实现分页查询。

  1. 测试代码

最后,编写一个测试类,测试 BaseDao 类和 UserDao 类中的方法是否能正常工作:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = 'classpath:applicationContext.xml')
public class UserDaoTest {
    @Autowired
    private UserDao userDao;

    @Test
    public void testInsert() {
        User user = new User();
        user.setName('张三');
        user.setAge(20);
        userDao.insert(user);
        Assert.assertNotNull(user.getId());
    }

    @Test
    public void testUpdate() {
        User user = userDao.selectById(1L);
        user.setName('李四');
        userDao.update(user);
        user = userDao.selectById(1L);
        Assert.assertEquals('李四', user.getName());
    }

    @Test
    public void testDeleteById() {
        userDao.deleteById(1L);
        User user = userDao.selectById(1L);
        Assert.assertNull(user);
    }

    @Test
    public void testSelectById() {
        User user = userDao.selectById(1L);
        Assert.assertEquals('张三', user.getName());
    }

    @Test
    public void testSelectAll() {
        List<User> userList = userDao.selectAll();
        Assert.assertEquals(1, userList.size());
    }

    @Test
    public void testSelectByPage() {
        List<User> userList = userDao.selectByPage(1, 10);
        Assert.assertEquals(1, userList.size());
    }
}

在这个测试类中,分别测试了插入、修改、删除、查询、查询所有和分页查询这些方法。如果测试通过,说明工具类的设计是正确的。

Spring 4.3.29 集成 MyBatis:数据库操作工具类

原文地址: https://www.cveoy.top/t/topic/ogDZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录