Mybatis学习记录(2)

1.mybatis与hibernate不同

   Mybatis和hibernate,mybatis不完全是一个ORM框架,因为Mybatis需要程序员自己编写sql语句。mybatis可以通过xml或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行结果再映射生成java对象。

  Mybatis可严格控制sql执行性能,灵活度高,但是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

   Hibernate对象关系映射能力好,数据库无关性好,对于关系模型要求高的软件,采用hibernat开发可以节省很多代码,提高效率,但是灵活性很低。 

 

2.原生Dao开发

 (1)新建Dao包

  

   UserDao.java

   

import com.javaweb.mybatis.model.User;

public interface UserDao {
    public User selectUserById(String id);
}

 userDaoImpl.java

 

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.javaweb.mybatis.dao.UserDao;
import com.javaweb.mybatis.model.User;

/**
 * Dao
 * @author fyk
 *
 */
public class UserDaoImpl implements UserDao {
    
    //注入
    private SqlSessionFactory sqlSessionFactory;
    
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
        this.sqlSessionFactory=sqlSessionFactory;
        
    }
    /*
*根据id查询用户
*
*/
public User selectUserById(String id){ SqlSession sqlSession=sqlSessionFactory.openSession(); return sqlSession.selectOne("test.findUserById", id); } public SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; } public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } }

Junit单元测试

 

public class MybatisDaoTest {
    
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void before() throws Exception {
        //加载核心配置文件
        String resource="sqlMapConfig.xml";
        InputStream in=Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    }
    
    @Test
    public void testDao() throws Exception{
        UserDao userDao=new UserDaoImpl(sqlSessionFactory);
        
        User user = userDao.selectUserById("2");
        System.out.println(user);
    }

}

 

3.使用Mapper动态代理方式

Mapper接口开发方法只需要编写Mapper接口(相当于Dao接口),有Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接口实现类方法。

Mapper.xml映射文件

Mapper.xml配置文件

 

 

 

 UserMapper.java

 

import com.javaweb.mybatis.model.User;

//与dao是一个意思
public interface UserMapper {
    /**
     * 遵循四个原则
     * 1.接口方法名 ==User.xml中的id名
     * 2.返回值类型与Mapper.xml的返回值类型一致
     * 3.方法的入参类型与Mapper.xml中的入参类型一致
     * 4.命名空间绑定此接口,即Mapper.xml的namespace是此接口的路径
     */
public class MybatisMapperTest {

    @Test
    public void testMapper() throws Exception{
        //加载核心配置文件
        String resource="sqlMapConfig.xml";
        InputStream in=Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //创建SqlSession
        SqlSession sqlSession=sqlSessionFactory.openSession();
        
        //SqlSession帮我生成一个实现类
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
        
        User user=userMapper.findUserById("3");
        System.out.println(user);
    }
}

 

    public User findUserById(String id);
}

 

 Junit单元测试

 

posted @ 2018-01-22 20:40  MichaelKai  阅读(110)  评论(0编辑  收藏  举报