MyBatis学习4 - 注解编写MyBatis - SQL语句映射

35 阅读2分钟

文章目录


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7N2NTHDA-1587804296148)(en-resource://database/28990:1)]

1. 简单使用Mybatsi注解

myBatisConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://www.mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

        <!--可进行外部加载数据库的信息 -->
<!--    <properties resource=""></properties>-->

    <settings>

        <!-- 缓存开启 -->
        <setting name="cacheEnabled" value="true"/>

        <!-- 懒加载开关 启动 -->
        <setting name="lazyLoadingEnabled" value="true"/>

        <!-- 按需加载 - 关联的sql懒运行 -->
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

    <typeAliases>
        <package name="top.linruchang.domain"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/graduation_design?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    
    <!-- 重要:class时 -->
    <mappers>
        <!-- class扫描某个具体的接口 --> 
        <mapper class="top.linruchang.dao.UserDao"/>
        
        <!--扫描某个包下的所有dao接口 -->
        <!-- <package name="top.linruchang.dao"/> -->
    </mappers>

</configuration>


User.java

public class User {

    Integer id;
    Integer role_id;
    String loginName;
    String password;
    String nickname;
    String headImg;
    
}


userDao.java

// 如果有spring,直接这里添加注解@Mapper
public interface UserDao {

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

}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOMNdkFV-1587804296156)(en-resource://database/28994:1)]

2. @Results、@Result 等价于 resultMap标签 – @ResultMap 等价于 resultMap属性

userDao.java

public interface UserDao {


    // 自定义映射类型映射
    @Select("select * from ums_user where id = #{id}")
    @Results(
            id = "userMap",
            value = {
                @Result(property = "user_id", column = "id"),
                @Result(property = "role_id", column = "role_id"),
                @Result(property = "loginName", column = "loginName"),
                @Result(property = "password", column = "password"),
                @Result(property = "nickname", column = "nickname"),
                @Result(property = "headImg", column = "headImg"),
            }
    )
    public User findById(Integer id);
    
    
    // 引用上面的@Results自定义映射
    @Select("select * from ums_user")
    @ResultMap("userMap")
    public List<User> findAll();

}


3. 一对一的关系映射 @one

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NNCbPweR-1587804296160)(en-resource://database/28996:1)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5qk7e3i-1587804296162)(en-resource://database/28998:2)]

我的表设计为一个用户仅有一个角色

UmsRole.java

public class UmsRole {

    Integer id;
    String name;
    String describe;
        
}

Ums.java

public class User {

    Integer user_id;
    Integer role_id;
    String loginName;
    String password;
    String nickname;
    String headImg;
    UmsRole role;
    
}

RoleDao.java

public interface RoleDao {

    @Select("select * from ums_user_role where id = #{user_id}")
    public UmsRole findById(Integer role_Id);

}


UserDao.java

public interface UserDao {


    //FetchType.EAGER表示立即加载
    @Select("select * from ums_user where id = #{id}")
    @Results(
            id = "userMap",
            value = {
                @Result(property = "user_id", column = "id"),
                @Result(property = "role_id", column = "role_id"),
                @Result(property = "loginName", column = "loginName"),
                @Result(property = "password", column = "password"),
                @Result(property = "nickname", column = "nickname"),
                @Result(property = "headImg", column = "headImg"),
                @Result(property = "role", column = "role_id", javaType = UmsRole.class, one = @One(select="top.linruchang.dao.RoleDao.findById", fetchType = FetchType.EAGER)),
            }
    )
    public User findById(Integer id);

    @Select("select * from ums_user")
    @ResultMap("userMap")
    public List<User> findAll();

}


4. 一对多的关系映射 @many

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yWAUKVlk-1587804296168)(en-resource://database/28998:2)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-shD33rq0-1587804296172)(en-resource://database/29000:1)]

User.java

public class User {

    Integer user_id;
    Integer role_id;
    String loginName;
    String password;
    String nickname;
    String headImg;
    UmsRole role;
    List<OmsOrder> orders;
    
}

OmsOrder.java

public class OmsOrder {

    Integer id;
    Integer user_id;
    Integer transactionId;
    short order_status;
    short pay_status;
    Integer total_money;
    Date create_time;
    User user;
    
}

OrderDao.java

public interface OrderDao {

    @Select("select * from oms_order_master where user_id = #{user_id}")
    public List<OmsOrder> findByUserId(Integer user_idJ);

}

UserDao.java

public interface UserDao {


    //FetchType.LAZY: 懒加载  FetchType.EAGER:立即加载
    @Select("select * from ums_user where id = #{id}")
    @Results(
            id = "userMap",
            value = {
                @Result(property = "user_id", column = "id"),
                @Result(property = "role_id", column = "role_id"),
                @Result(property = "loginName", column = "loginName"),
                @Result(property = "password", column = "password"),
                @Result(property = "nickname", column = "nickname"),
                @Result(property = "headImg", column = "headImg"),
                @Result(property = "role", column = "role_id", javaType = UmsRole.class, one = @One(select="top.linruchang.dao.RoleDao.findById", fetchType = FetchType.EAGER)),
                @Result(property = "orders", column = "id", javaType = List.class, many = @Many(select = "top.linruchang.dao.OrderDao.findByUserId", fetchType = FetchType.LAZY)),
            }
    )
    public User findById(Integer id);
    
    
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XTZUFAiX-1587804296175)(en-resource://database/29004:1)]