Mybatis注解开发(单表及多表注解使用)

近几年,注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。

下面我们来了解一下该如何使用Mybatis注解?


环境搭建:

使用IDEA编译器,创建Maven工程后,配置pom.xml如下:

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

接下来创建一个User 实体类 以及UserDao接口

主配置文件: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">
<configuration>
    <!--引入外部配置文件-->
    <properties resource="jdbcConfig.properties"></properties>
    <!--配置别名-->
    <typeAliases>
        <package name="cn.qlu.domain"></package>
    </typeAliases>
    <!--配置环境-->
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"></property>
                <property name="url" value="${jdbc.url}"></property>
                <property name="username" value="${jdbc.username}"></property>
                <property name="password" value="${jdbc.password}"></property>
            </dataSource>

        </environment>
    </environments>
    <!--指定带有注解的dao接口所在类-->
    <mappers>
        <package name="cn.qlu.Dao"></package>
    </mappers>
</configuration>

以上环境配置基本完成,接下来我们进行测试。


 使用Mybatis注解实现单表增删查改: 

在Mybatis中针对增删查改有四个注解:@SELECT @INSERT @UPDATE @DELETE

在UserDao中使用注解进行查询操作:

public interface UserDao {
    /**
     * 查询所有用户
     * @return
     */
    @Select(value = "select * from t_user")
    List<User> findAll();
}

创建测试类进行测试:

public class MybatisAnnoTest {
    /**
     * 测试基于注解的mybatis使用
     * @param args
     */
    public static void main(String[] args) throws IOException {
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        UserDao userDao = session.getMapper(UserDao.class);
        List<User> users = userDao.findAll();
        for(User user :users){
            System.out.println(user);
        }
        session.close();
        in.close();
    }
}

查询结果如下:


在UserDao中使用注解进行保存操作:

    /**
     * 保存用户
     * @param user
     */
    @Insert("insert into t_user(uname,pwd,sex,age)values(#{uname},#{pwd},#{sex},#{age})")
    void saveUser(User user);

点击测试后数据库中出现更新的信息

更新删除等操作类似这里就不列举了


使用注解实现复杂关系映射即多表查询等操作

我们这里需要用到两张表,用户和账户

一对一:(使用立即加载)

public interface AccountDao {
    /**
     * 查询所有账户并且获取每个账户所属的用户信息
     * @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="cn.qlu.Dao.UserDao.findById",
fetchType=FetchType.EAGER))
    })
    List<Account> findAll();

}

运行结果:

一对多:(通常使用延时加载)

    /**
     *根据uid查询出对应账户信息
     * @return
     */
    @Select(value = "select * from t_user")
    @Results(id="userMap",value = {
            @Result(id=true ,column="uid",property = "uid"),
            @Result(column="uname",property = "uname"),
            @Result(column="pwd",property = "pwd"),
            @Result(column="sex",property = "sex"),
            @Result(column="age",property = "age"),
            @Result(property = "accounts",column = "uid" ,
                    many=@Many(select="cn.qlu.Dao.AccountDao.findAccountByUid",
                            fetchType=FetchType.LAZY))
    })
    List<User> findAll();

多表这里介绍的比较简单,因为操作起来比较复杂。

以上仅用户个人学习,如有错误请指出!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值