Mybatis学习笔记(六)

注解开发的简介及配置

注解是可以代替映射文件(如IUserDao.xml等等),主配置文件(SqlMapConfig.xml)还是要写的。

在进行注解开发之前,新建一个maven工程。在pom.xml文件下将如下内容复制进去:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis_annotation</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

新建用户实体类,如下图所示:
在这里插入图片描述
创建IUserDao接口,如下图所示:
在这里插入图片描述
新建主配置文件SqlMapConfig.xml,把以下内容贴进去:

<?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">
<!--mybatis的主配置文件-->
<configuration>
    <!--    引入外部配置文件-->
    <properties resource="jdbcConfig.properties"></properties>
    <!--    配置别名-->
    <typeAliases>
        <package name="com.zzq.domain"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--    指定带有注解的dao接口所在位置-->
    <mappers>
        <package name="com.zzq.dao"/>
    </mappers>
</configuration>

最后在IUserDao接口当中进行注解的填写。
在这里插入图片描述
注意事项:
1、注解和映射配置文件(如IUserDao.xml)不能共存,否则会报错。
2、拿到了注解就拿到了泛型(即返回值类型)。注解所在的位置隐含类名、包名和方法名信息。

注解开发的CURD操作

一、添加:
1、在IUserDao接口类当中添加如下内容:

    /**
     * 保存用户
     *
     * @param user
     */
    @Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
    void saveUser(User user);

2、进行测试。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、更新
1、在IUserDao接口类当中添加如下内容:

    @Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}")
    void updateUser(User user);

2、测试。
在这里插入图片描述
三、删除
1、在IUserDao接口类当中添加如下内容:

    @Delete("delete from user where id=#{id}")
    void deleteUser(Integer userId);

2、测试在这里插入图片描述
四、查询一个用户
1、在IUserDao接口类当中添加如下内容:

    @Select("select * from user where id=#{id}")
    User findById(Integer userId);

2、测试
在这里插入图片描述
五、模糊查询
1、在IUserDao接口类当中添加如下内容:

    @Select("select * from user where username like #{username}")
    List<User> findUserByName(String name);

或者
在这里插入图片描述

2、测试
在这里插入图片描述
或者
在这里插入图片描述
六、查询用户总数
1、在IUserDao接口类当中添加如下内容:

    @Select("select count(*) from user")
    int findTotalUser();

2、测试
在这里插入图片描述

注解建立实体类属性和数据库表中列的对应关系

当实体类的属性跟数据库的列名不一致时,无法查询出所需的结果。
解决办法:
1、加入以下注解完成实体类属性和数据库列名的映射。以查询所有用户为例:

    @Select("select * from user")
    @Results(value = {
            @Result(id = true, column = "id", property = "userId"),
            @Result(column = "username", property = "userName"),
            @Result(column = "address", property = "userAddress"),
            @Result(column = "sex", property = "userSex"),
            @Result(column = "birthday", property = "userBirthday"),
    })
    List<User> findAll();

2、对于新的方法,必须还得新添加映射。为了使得映射适用于所有的方法,可以给刚才的注解加上id属性,让其他方法去引用它:
在这里插入图片描述

一对一的查询配置

1、在上述的基础上新建一个Account实体类,实现序列化接口。
在这里插入图片描述
2、创建一个IAccount接口,添加下列内容:

    /**
     * 查询所有账户,并且获取每个账户所属的用户信息
     *
     * @return
     */
    @Select("select * from account")
    List<Account> findAll();

3、Account实体类中添加一对一关系映射:
在这里插入图片描述
4、建立查询的映射(对应关系)。在IAccountDao中添加如下内容:

    /**
     * 查询所有账户,并且获取每个账户所属的用户信息
     *
     * @return
     */
    @Select("select * from account")
    @Results(id = "accountMap", value = {
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "uid", property = "uid"),
            @Result(column = "money", property = "money"),
            @Result(property = "user", column = "uid", one = @One(select = "com.zzq.dao.IUserDao.findById", fetchType = FetchType.EAGER))
    })
    List<Account> findAll();

其中@Result中各个内容的含义如下:
id:为true时表示主键
column:查出的account的id
select:配置根据主键查询的方法名的路径
fetchType:配置延迟加载/立即加载

一对多的查询配置

1、在User实体类当中添加一对多的关系映射。
在这里插入图片描述
2、在IAccount接口中添加如下内容:
在这里插入图片描述
3、IUserDao接口中增加注解,如下所示:

    @Select("select * from user")
    @Results(id = "userMap", value = {
            @Result(id = true, column = "id", property = "userId"),
            @Result(column = "username", property = "userName"),
            @Result(column = "address", property = "userAddress"),
            @Result(column = "sex", property = "userSex"),
            @Result(column = "birthday", property = "userBirthday"),
            @Result(property = "accounts", column = "id", many = @Many(select = "com.zzq.dao.IAccountDao.findAccountByUid", fetchType = FetchType.LAZY))
    })

在这里插入图片描述

使用二级缓存

一级缓存系统自动开启,我们无需进行手动配置。
二级缓存需要在SqlMapConfig.xml中添加如下内容:
在这里插入图片描述
在IUserDao中添加如下内容:
在这里插入图片描述

blocking的默认值是不使用二级缓存,需要改成true。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值