Mybatis的基础使用方法

Mybatis的基础使用方法

普通的使用Mybatis框架,我总结为四个部分:
1.实体类的定义,这部分主要是为了方便参数的输入和结果的输出,也可以有别的方法代替。
2.Mapper接口的定义,这里是定义了需要使用的方法。
3.mapper.xml里SQL语句的编写,Mybatis的SQL语句需要自己写入,可以和接口结合,下面会详细介绍。
4.服务层的方法调用,这里是解决实际问题的地方,按照业务要求来调用不同方法。

1.实体类的定义

这里按照已有的数据库做数据源:定义了一个实体类StudentInfo,简单的创建get,set方法和三个构造方法。

	public class StudentInfo {
    private Integer id;
    private Integer classId;
    private String stuName;
    private Integer stuGender;
    private String province;
    private String city;
    private String district;

    public StudentInfo() {
    }

    public StudentInfo(Integer id, Integer classId, String stuName, Integer stuGender, String province, String city, String district) {
        this.id = id;
        this.classId = classId;
        this.stuName = stuName;
        this.stuGender = stuGender;
        this.province = province;
        this.city = city;
        this.district = district;
    }

	//做添加操作时的构造方法
    public StudentInfo(Integer classId, String stuName, Integer stuGender, String province, String city, String district) {
        this.classId = classId;
        this.stuName = stuName;
        this.stuGender = stuGender;
        this.province = province;
        this.city = city;
        this.district = district;
    }

    public Integer getId() {
        return id;
    }

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

    public Integer getClassId() {
        return classId;
    }

    public void setClassId(Integer classId) {
        this.classId = classId;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public Integer getStuGender() {
        return stuGender;
    }

    public void setStuGender(Integer stuGender) {
        this.stuGender = stuGender;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDistrict() {
        return district;
    }

    public void setDistrict(String district) {
        this.district = district;
    }


    public StudentInfo(Integer id){
        this.id = id;
    }

    @Override
    public String toString() {
        return "StudentInfo{" +
                "id=" + id +
                ", classId=" + classId +
                ", stuName='" + stuName + '\'' +
                ", stuGender=" + stuGender +
                ", province='" + province + '\'' +
                ", city='" + city + '\'' +
                ", district='" + district + '\'' +
                '}';
   		 }

	}

2.Mapper接口的定义

先创建好实体类是为了方便在接口中直接使用。首先在接口中定义一个查询所有表中数据的方法:

List<StudentInfo> findAll();

然后再在xml文件中编写SQL语句,但是Mybatis有一个比较方便的地方,在SQL语句比较简单的时候可以直接在接口方法上使用注解来写SQL语句。
常用的SQL注解:
@Select:查询,@Insert:添加,@delete:删除,@Update:修改。
但是使用注解有一定的限制:必须是简单的SQL语句,不能有循环(mybatis框架在xml中编写SQL语句可以用到循环),判断。和一些复杂的语句。
具体的使用方法;

@Select("select * from studentinfo")
    List<StudentInfo> findAll();

    @Delete("delete from studentinfo where id=#{id}")
    int deleteAll(int id);

复杂的方法,如更新信息:

int modify(StudentInfo score);

这种直接使用注解不太可行就要到xml文件中编写。

3.xml文件中SQL语句的定义

xml文件创建的相关事项在上一篇博客中已经介绍过了,这里就直接使用。

在编写SQL语句之前首先要介绍一下,这里常用的一些标签,他们都有一些特定的功能:
select标签

<select id =”Mapper接口方法名称” resultType=”返回自定义类型”/resultMap=””>...</select>

特别的:当数据库字段名称,类型和java实体类的属性名称,类型不匹配时需要使用resultMap,将数据库和java连起来,一般在编写java语句时就要尽量避免这种情况的发生

常用的增删改标签:

	<insert id=”Mapper接口中方法名称”>...</insert>
	<delete id=”Mapper接口中方法名称”>...</delete >
	<update id=”Mapper接口中方法名称”>...</update >

循环标签

<foreach collection=”array list map” item = “alias” open=”开始符号” close=”结束符号” seperator = “分隔符”>...</foreach>

条件的where标签

<where></where> 去掉第一个and,以 where代替

赋值和判断标签

<set></set> 去掉最后一个“,”
	<if test”null!= field”>...</if>判断标签,一般和set会结合使用

下面介绍一下具体的使用方法,首先是简单的SQL语句:

<select id="findAll">//这里的id必须是和接口方法名一致!
    select * from studentinfo
</select>

复杂的SQL语句:更新数据:

<update id="modify">//id与接口方法名一致
    update studentinfo
    <set>
        <if test="null!=classId">
        //判断更新的数据中,该属性有没有被修改,如果有才会执行下面的操作
            classId=#{classId},//将给的数据赋值给该属性,完成修改
        </if>
        <if test="null!=stuName">
            stuName=#{stuName},
        </if>
        <if test="null!=stuGender">
            stuGender=#{stuGender},
        </if>
        <if test="null!=province">
            province=#{province},
        </if>
        <if test="null!=city">
            city=#{city},
        </if>
        <if test="null!=district">
            district=#{district},
        </if>
    </set>
    where
    //(where和set标签都是可以不用使用标签的,但使用标签的话会运用到标签的一些特性。上面唷介绍过)
    id=#{id}
	</update>
	
4.服务层的方法调用

服务层就是直接调用接口中的方法来解决实际的问题
这里就使用单元测试来完成简单的调用:
首先在使用之前要创建一个Mapper对象来完成调用前的配置:

	private VStuScoreMapper mapper;//设置为全局变量

    @Before//在所有test方法运行前执行该方法
    public void init() throws IOException {
        InputStream config = Resources.getResourceAsStream("mybatis.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(config);
        SqlSession sqlSession = build.openSession(true);
        mapper = sqlSession.getMapper(VStuScoreMapper.class);
    }

查询所有数据的方法的调用:

   @Test
    public void testFindAll() throws IOException{
        List<StudentInfo> list = mapper.findAll();
        for (StudentInfo vss : list) {
            System.out.println(vss);
        }
    }
   

修改的方法:

 @Test
 public void testUpdate(){
     int add = mapper.modify(
             new StudentInfo(91,5,"牛一一",2,"安徽省","合肥市","经开区"));
     System.out.println(add);
 }

mybatis还有很多更高阶的使用方法,比如存储过程和事务的使用,这以后有机会再介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值