Mapper代理开发案例及MyBatis核心

引入

总结,使用mapper代理开发的好处就是可以解决开发中硬编码的问题和简化后期的SQL执行。使用这种方式可以不用写接口的实现类,免除了复杂的方法,使得代码更加清晰易懂按照以前的DAO 开发模式 ,我们有一个写了一个接口类 然后需要写这接口的实现类,现在就是MyBATis 通过帮我们生成了这个实现了。而我们要做的就是配置好这实现类的 XML。

在不使用mapper开发时,我们需要将名称空间和SQL的id传入到sqlSession的参数里面去,而且我们发现里面的参数是写死的,这就是硬编码问题:

SqlSession sqlSession = sqlSessionFactory.openSession();
List users = sqlSession.selectList("test.selectAll");//这里的参数

在Mapper的配置文件里,将来写了很多SQL语句时你还需要一个个查找其id,相当麻烦。




    

如果使用mapper代理开发,则如下代码替换为:

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List users = userMapper.selectAll();//这里的方法

UserMapper会成为一个接口,一旦获取mapper之后,则可以直接调用其SQL方法。

Mapper代理开发要求

  • 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

  • 设置SQL映射文件的namespace属性为Mapper接口全限定名

  • 在Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

  • 通过SqISession的getMapper方法获取Mapper接口的代理对象并调用对应方法完成sql的执行

解析要求

第一步完成之后的开发目录:

Mapper代理开发案例及MyBatis核心_第1张图片

设置属性名:

这里的namespace的路径名应该改成接口的路径



//这里的路径
    

在接口里面返回一个User实体类对象,并且是List类型的(我们这里的案例是查询所有,故必须要返回一个集合类型)。

所以Mapper接口里面的代码应为:

public interface UserMapper {

    List selectAll();
}

配置工作都已完成,我们新建一个main方法测试一下。

package sdut.jsjxy;

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 sdut.jsjxy.mapper.UserMapper;
import sdut.jsjxy.pojo.User;

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

public class MyBatisDemo2 {
    public static void main(String[] args) throws IOException {

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List users = userMapper.selectAll();//前面提到的


        System.out.println(users);
        sqlSession.close();

    }
}

输出结果为:

Mapper代理开发案例及MyBatis核心_第2张图片

MyBatis核心

核心配置文件

我们回归头来分析一下mybatis的配置文件




    
        
            
            
                
                
                
                
                
            
        
    

    

        
    

环境信息

这里是配置数据库信息的地方,我们可以在里面配置多种数据库的连接信息,例如在实际开发中会有生产库和测试库。添加新的环境只需要修改里面信息即可,比如基本的修改数据库的名称等。通过default属性切换不同的environment。

类型别名

在mybatsi的范围内为某一个具体的类型设置一个别名,并可以用别名来表示。


    

这里面的type属性就是设置起别名的类型,其中还有一个aligs属性是设置别名的名称,例如aligs="abc"的含义就是把type里的类型名称用"abc"来替代。这个属性大多数情况下是不用写的如果不写的话,那别名启动设置为他的类名切不区分大小写,这里就是"user"或"User"。这是映射文件里的SQL语句的代码就是:

即替换了resultType的属性值为别名,不用写一串路径了。

映射文件的引入

这里可以用包的方式引入映射文件。之前我们是用的方式引入,当我们的映射文件一多就需要一个个找了,是十分麻烦的。我们使用包扫描方式引入映射文件,就可以利用IDE的自动补全功能快速引入。


    //使用包扫描自动补全

但使用包扫描的前提是mapper接口和映射文件所在的包必须一致,mapper接口的名字和映射文件的名字必须一致,这一点我们之前创建文件时就做好了。(见上面的目录图片)所以以后我们把映射文件都创建在resources的mapper包下就好了。

设置核心配置的模板

到这里mapper的核心配置文件已经讲解完了,那么之后在创建时也拥有了相应的模板,我们在idea里创建一个模板即可。这里给大家展示一下我的模板(注意我的mysql是8.0以上的版本,其他版本写法有所不同),其中[]里的内容是可以换的,大家换成自己的即可,还有数据库账号密码啥的。

Mapper代理开发案例及MyBatis核心_第3张图片




    
        
    

    
        
            
            
                
                
                
                
                
            
        
    

    
        
    

你可能感兴趣的:(java,java,web,ssm,mybatis,java,数据库)