MyBatis知识点复习-13Mybatis注解开发

MyBatis知识点复习-13Mybatis注解开发

在开始讲解之前,如果你对注解不太熟悉,可以先看看这篇Java基础复习——注解对注解的讲解。由于注解其实与xml本质上是一样的,因此我们注解不会像前面那样还很多篇幅来讲解。
上一篇:MyBatis知识点复习-12mybatis逆向工程

在开始本章的讲解前,我们需要说明一下,现在我们的那些映射配置文件就不再有用了,而是依靠全局配置文件。其内容为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"></properties>
    <typeAliases>
        <package name="domain"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用dbcp连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis复习"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="mapper"/>
    </mappers>
</configuration>

除了配置数据库连接外,要想使用注解,上面的

<mappers>
        <package name="mapper"/>
    </mappers>
    <typeAliases>
        <package name="domain"/>
    </typeAliases>

是必要的,第一个指明返回值类所在位置,第二个指明接口所在包。还有一点就是使用注解开发时在接口同一目录下是不允许有他的xml配置文件的。

一.单表操作

1.CRUD操作

在mybatis中CRUD一共有四个注解

@Select
@Insert
@Update
@Delete

我们用UserMapper这个接口来演示,首先把它里面的方法全部删掉,我们重新来。
下面只演示前两个演示:
1.@Select
在UserMapper下面添加如下方法:

@Select("select * from  user")
    public List<User> findById(int user_id);

执行下面代码:

        SqlSession sqlSession1 = build.openSession();
        UserMapper mapper = sqlSession1.getMapper(UserMapper.class);
        List<User> byId = mapper.findById(1);
        for (User user : byId) {
            System.out.println(user);
        }
      sqlSession1.commit();//提交事务,否则会事务回滚

在这里插入图片描述
我们发现由于字段名是name,而属性名是username,他们并不对应导致查询到的结果username为null。后面我会讲注解来解决。
那么他是如何实现的呢?我们先来看看如果不用注解,用xml文件配置应该是这样的:

<mapper namespace="mapper.UserMapper">
	<select id="findById" resultType="user" parameterType="int">
		select * from user
	<\select>
<\mapper>

从上面我们可以看得到我们需要的信息为:namespace,id,resultType,parameterType
那么我们看这些信息在UserMapper里面都是有的。
在这里插入图片描述
2.>@Insert
在UserMapper下面添加如下方法:

@Insert("insert into user (name,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})")
    public int saveUser(User user);

执行下面代码:

 SqlSession sqlSession1 = build.openSession();
        UserMapper mapper = sqlSession1.getMapper(UserMapper.class);
        User user = new User();
        user.setUsername("jack");
        user.setSex("1");
        user.setAddress("湖北");
        user.setBirthday(new Date());
        int byId = mapper.saveUser(user);
        sqlSession1.commit();//提交事务,否则会事务回滚

在这里插入图片描述

2.属性别名

前面我们说了username查询结果为空,现在我们来解决。
我们能做如下修改:

    @Select("select * from  user")
    @Results(value={
            @Result(id=true,column="id",property = "id"),
            @Result(column="name",property = "username"),
            @Result(column="sex",property = "sex"),
            @Result(column="birthday",property = "birthday"),
            @Result(column="address",property = "address")
            })
    public List<User> findById(int user_id);

再次查询:
在这里插入图片描述
成功查到了username。
那么问题来了,这个@Results注解只是作用于findById一个方法,难道以后其他的方法也要再把上面的内容再写一遍?这显然是不合理的,于是我们可以给这个
Results起一个别名,操作如下:
在这里插入图片描述
关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。

二.多表操作

1.一对一

在前面查询user的时候我们没有把orders也查到。现在我们来为大家操作一下。
在这里插入图片描述
执行之前的查询代码有:
在这里插入图片描述

2.多对多

为方便演示,对orders表数据修改如下:
在这里插入图片描述
在这里插入图片描述
红框处是对一对一的修改。
我们发现张小明的结果确实查到了两个

User{id=16, username='张小明', sex='1', birthday=null, address='河南郑州', orders=[Orders 
[id=3, userId=null, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null,
 user=null, orderdetails=null], Orders [id=4, userId=null, number=1000011, createtime=Tue 
 Feb 03 13:22:41 CST 2015, note=null, user=null, orderdetails=null]]}

其实如果用一对多的方式查询也可以查到,不过效率会差一些。

三.缓存配置

由于一级缓存是默认开启的,我们就直接讲二级缓存。如果缓存忘记了可以再复习一下:MyBatis知识点复习-11一级缓存与二级缓存以及ehcache缓存
第一步当然是先在全局配置文件里开启二级缓存,步骤忘记的可以在复习一下上面这篇文章,这里我跳过。
在接口上面加上注解即可
在这里插入图片描述
关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。
剩下的演示还是参考上面的文章复习即可。

四.方法有多个参数

这种情况下我们需要使用@Param参数来指定参数名字
在这里插入图片描述
总结:终于把mybatis讲完了,不过我要说明的是,这些都只是一些浅层的CRUD,简单说,你会,别人也会,因此后面我会在抽空出一个mybatis的源码解读的的系列文章,来一个质的提升。敬请期待吧!

上一篇:MyBatis知识点复习-12mybatis逆向工程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值