zoukankan      html  css  js  c++  java
  • 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单元测试

  • 相关阅读:
    如何利用InstallShield for Delphi7打包Oracle9i客户端制作C/S数据库应用程序?
    delphi 保存 和 打开 TREE VIEW的节点已经展开的状态
    在Delphi中的TreeView中保存多个数据
    FastReport经验
    农码一生博文索引
    再讲IQueryable<T>,揭开表达式树的神秘面纱
    你知道C#中的Lambda表达式的演化过程吗?
    先说IEnumerable,我们每天用的foreach你真的懂它吗?
    Linq表达式、Lambda表达式你更喜欢哪个?
    你必须知道的EF知识和经验
  • 原文地址:https://www.cnblogs.com/FanJava/p/8331043.html
Copyright © 2011-2022 走看看