Mybatis使用手册

264 阅读1分钟

在dao层使用注解

如果在dao使用了注解,那么SqlMapConfig.xml配置就应该指定class,而不是resources

<mappers>
    <mapper class="com.jserm.dao.UserDao"></mapper>
</mappers>
// 而不是resources
<mappers>
    <mapper resource="com/jserm/dao/UserDao.xml"></mapper>
</mappers>

另外,如果使用了注解,那么resources目录下不用创建对应的xml配置,可以删除

image.png

也可以自己写实现类

如果自己不想使用mybatis封装好的功能,也可以自己写实现类,但是完全没有必要

  • 自己写实现类
package com.jserm.dao.impl;

import com.jserm.dao.UserDao;
import com.jserm.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements UserDao {
    private SqlSessionFactory factory;

    public UserDaoImpl(SqlSessionFactory factory) {
        this.factory = factory;
    }

    @Override
    public List<User> findAll() {
        // 1.使用工厂创建sqlsession对象
        SqlSession session = factory.openSession();
        // 2.使用session执行查询,通过UserDao.xml的namespace找到com.jserm.dao.UserDao下的findAll方法
        List<User> users = session.selectList("com.jserm.dao.UserDao.findAll");
        session.close();
        // 3.返回查询结果
        return users;
    }
}


// 在测试类中执行
package com.jserm.test;

import com.jserm.dao.UserDao;
import com.jserm.dao.impl.UserDaoImpl;
import com.jserm.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

/**
 * @author zhouwen
 * @createDate 2021/5/20 13:17
 * mybatis的入门案例
 */
public class MybatisTest {
    public static void main(String[] args) throws Exception {
        // 1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3.使用代理对象执行方法
        UserDaoImpl userDao = new UserDaoImpl(factory);
        // 4.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        in.close();
    }
}

  • 直接使用mybatis的功能
package com.jserm.dao.impl;

import com.jserm.dao.UserDao;
import com.jserm.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class UserDaoImpl implements UserDao {
    @Override
    public List<User> findAll() {
    }
}

// 在测试类中直接使用
package com.jserm.test;

import com.jserm.dao.UserDao;
import com.jserm.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

/**
 * @author zhouwen
 * @createDate 2021/5/20 13:17
 * mybatis的入门案例
 */
public class MybatisTest {
    public static void main(String[] args) throws Exception {
        // 1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        // 3.使用工厂生产sqlsession对象
        SqlSession session = factory.openSession();
        // 4.使用sqlsession创建DAO接口的代理对象
        UserDao userDao = session.getMapper(UserDao.class);
        // 5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        // 6.释放资源
        session.close();
        in.close();
    }
}