栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis使用

一、接口绑定实现方式

mybatis中接口绑定主要有两种实现方式

● 通过注解绑定:就是在接口的方法上加上@Select、@update等注解,里面包含SQL语句进行绑定

● 通过XML里面写SQL进行绑定,需要指定xml映射文件里的namespace必须为接口的全路径
语句比较简单时,使用注解绑定,当SQL语句比较复杂是,用xml绑定,一般使用xml比较多

二、XML方式的用法

mybatis的强大之处在于自定义SQL语句,映射器的xml文件方式相比JDBC简单,节省代码量

2.1使用步骤
  1. 创建Mapper.Java接口文件
public interface StudentMapper {     
Student selectStudentById(Integer sid); 
}
  1. 创建Mapper.xml配置文件
 

 
     

        select * from student
 

不管是返回一个结果还是多个结果集,返回类型和结果数量是无关的。

resultMap和resultType的区别?
resultMap和resultType都是指定返回参数类型,类型可以是pojo类全限定名或别名
resultType可以完成自动映射过程,但是对于字段不一致时是无法完成字段映射的,如果字段完全一致优先选取resultType
resultMap是可以显性完成映射过程,对于字段不一致时能够完成映射,字段不一致优先选取resultMap进行映射

如果数据库属性名和Java的字段名不一致时还能创建出映射对象吗?不可以
如果数据库属性名和Java的字段名只存在一个相同的,可以创建出对象吗?都可以创建

2.3.2 insert标签
//插入数据
    
    int insertStudent(Student student);

    
        insert into
        student(SID,Sname,Sage,Ssex)
        values
        (#{SID},#{name},#{Sage},#{Ssex})
    
2.3.3 多个参数的接口问题

给定需求:通过id来修改name
接口:

 //更新用户姓名
    int updateNameByID(Integer id,String name);

        update Student set Sname = #{name} where SID= #{id}
    

直接调用抛出BindingException异常:

这个错误表示,XML可用的参数只有0,1,param1,param2,没有id和name。0和1,param1和param2都是mybatis根据参数位置自定义名字,如果将参数中#{name}参数修改为#{0}或者#{param1},将#{id}参数改为#{1}或者#{param2},这个方法即可调用,但是这样的参数不易立即建立它们之间关系。
解决方案:通过给参数配置@Param注解,mybatis会自动将参数封装为Map类型,@Param注解值作为map中的key,其对应的参数实际值作为value,这样SQL中会通过解析map来获取值

修改如下:

//更新用户姓名
    int updateNameByID(@Param("id") Integer id, @Param("name") String name);
三、注解方式的用法

注解形式是直接将SQL写在接口方法上
优势:效率较高
缺点:SQL有变动时需要重新编译代码
在mybatis注解的SQL中,基本的注解:@Select、@Update、@Delete、@Insert

以user表为例讲解

注解实现步骤

1、给定pojo类

public class User {
    private Integer id;
    private String name;
    private String password;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}

2、给定mapper.java接口

public interface UserMapper {    
}

3、在配置文件中指定文件映射位置


验证注解 @select注解

@select注解类似于xml中的select标签
当字段无法映射时,通过@Result注解完成显性映射

    
    @Results(id = "userMap",value = {
            @Result(property = "id",column = "id",id = true),
            @Result(property = "name",column = "name"),
            @Result(property = "password",column = "password")
    })
@Insert注解
    @Options(useGeneratedKeys = true,keyColumn = "id")
    @Insert("insert into user(name,password) values(#{name},#{password})")
    int insertUser(User user);
@Update注解 @Delete注解
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/838669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号