MyBatis之注解@Insert @Update @select @Many @One 实际使用

1. 配置增删改查
package com.wode.mapper;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.wode.pojo.User;

public interface UserMapper {
    //使用注解的方式新增用户
    @Insert("insert into users values(null,#{user.userName},#{user.userPwd},#{user.userType})")
    @Options(keyProperty="user.userId",useGeneratedKeys=true)
    public int addUser(@Param("user")User user);
    //注解的方式修改用户资料---多参数传递第二种方式
    @Update("update users set user_name=#{name} where user_id=#{id}")
    public int updateUserNameById(@Param("name")String name,@Param("id")int id);
    //注解的方式删除用户
    @Delete("delete from users where user_id=#{id}")
    public int delById(@Param("id") int id);

    @Select("select * from users")
/**    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class)
    })
    */
    @ResultMap("userMap")
    public List<User> findAllUser();
}
2. 常用查询

一对一 : @One

package com.wode.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.wode.pojo.User;

public interface UserMapper {
    //使用注解的方式新增用户
    @Insert("insert into users values(null,#{user.userName},#{user.userPwd},#{user.userType})")
    @Options(keyProperty="user.userId",useGeneratedKeys=true)
    public int addUser(@Param("user")User user);
    //注解的方式修改用户资料---多参数传递第二种方式
    @Update("update users set user_name=#{name} where user_id=#{id}")
    public int updateUserNameById(@Param("name")String name,@Param("id")int id);
    //注解的方式删除用户
    @Delete("delete from users where user_id=#{id}")
    public int delById(@Param("id") int id);

    @Select("select * from users")
/**    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class)
    })
    */
    @ResultMap("userMap")
    public List<User> findAllUser();

    @Select("select * from users where user_id=#{id}")
    @ResultMap("userMap")
    public User findUserById(@Param("id") int id);



    //1:1
    @Select("select * from users where user_id=#{id}")
    @ResultMap("userMap")
    public User findUserAndInfo(@Param("id")int id);
}
package com.wode.mapper;

import java.util.List;

import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import com.wode.pojo.UserInfo;

public interface UserInfoMapper {
    @Select("select * from userInfo")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public List<UserInfo> findUserInfo();

    //user中外键查询数据
    @Select("select * from userInfo where user_id=#{id}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public UserInfo findByUser(@Param("id")int id);

    //1:1
    @Select("select * from userinfo where info_id=#{info_id}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class),
        @Result(column="user_id",property="user",one=@One(select="com.wode.mapper.UserMapper.findUserById"))
    })
    public UserInfo findInfoAndUser(@Param("info_id") int id);

}

一对多: @Many

public interface UserMapper {
    //使用注解的方式新增用户
    @Insert("insert into users values(null,#{user.userName},#{user.userPwd},#{user.userType})")
    @Options(keyProperty="user.userId",useGeneratedKeys=true)
    public int addUser(@Param("user")User user);
    //注解的方式修改用户资料---多参数传递第二种方式
    @Update("update users set user_name=#{name} where user_id=#{id}")
    public int updateUserNameById(@Param("name")String name,@Param("id")int id);
    //注解的方式删除用户
    @Delete("delete from users where user_id=#{id}")
    public int delById(@Param("id") int id);

    @Select("select * from users")
/**    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class)
    })
    */
    @ResultMap("userMap")
    public List<User> findAllUser();

    @Select("select * from users where user_id=#{id}")
    @ResultMap("userMap")
    public User findUserById(@Param("id") int id);

    //一对多查询
    @Select("select * from users where user_id=#{id}")
    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class),
        @Result(property="info",column="user_id",many=@Many(select="com.wode.mapper.UserInfoMapper.findByUser"))
    })
    public User findUserAndInfo(@Param("id")int id);
}
public interface UserInfoMapper {
    @Select("select * from userInfo")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public List<UserInfo> findUserInfo();

    //user中外键查询数据
    @Select("select * from userInfo where user_id=#{id}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public UserInfo findByUser(@Param("id")int id);

    @Select("select * from userInfo where info_id=#{infoId}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class),
        @Result(column="user_id",property="user",one=@One(select="com.wode.mapper.UserMapper.findUserById"))
    })
    public UserInfo findInfoAndUser(@Param("infoId")int infoId);
}

多对多: @Many 和@One

public interface UserMapper {
    //使用注解的方式新增用户
    @Insert("insert into users values(null,#{user.userName},#{user.userPwd},#{user.userType})")
    @Options(keyProperty="user.userId",useGeneratedKeys=true)
    public int addUser(@Param("user")User user);
    //注解的方式修改用户资料---多参数传递第二种方式
    @Update("update users set user_name=#{name} where user_id=#{id}")
    public int updateUserNameById(@Param("name")String name,@Param("id")int id);
    //注解的方式删除用户
    @Delete("delete from users where user_id=#{id}")
    public int delById(@Param("id") int id);

    @Select("select * from users")
/**    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class)
    })
    */
    @ResultMap("userMap")
    public List<User> findAllUser();

    @Select("select * from users where user_id=#{id}")
    @ResultMap("userMap")
    public User findUserById(@Param("id") int id);

    //多对多查询
    @Select("select * from users where user_id=#{id}")
    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class),
        @Result(property="course",column="user_id",many=@Many(select="com.wode.mapper.CourseMapper.findCourseByUser"))
    })
    public User findUserAndCourse(@Param("id")int id);




    @Select("select * from users where user_id in (select user_id from user_course where course_id=#{courseId})")
    @Results({
        @Result(id=true,property="userId",column="user_id",javaType=Integer.class),
        @Result(property="userName",column="user_name",javaType=String.class),
        @Result(property="userPwd",column="user_pwd",javaType=String.class),
        @Result(property="userType",column="user_type",javaType=Integer.class)
    })
    public User findUserByCourse(@Param("id")int courseId);
}
public interface UserInfoMapper {
    @Select("select * from userInfo")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public List<UserInfo> findUserInfo();

    //user中外键查询数据
    @Select("select * from userInfo where user_id=#{id}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class)
    })
    public UserInfo findByUser(@Param("id")int id);

    @Select("select * from userInfo where info_id=#{infoId}")
    @Results({
        @Result(id=true,column="info_id",property="infoId",javaType=Integer.class),
        @Result(column="nickName",javaType=String.class,property="nickName"),
        @Result(column="email",property="email",javaType=String.class),
        @Result(column="user_id",property="user",one=@One(select="com.wode.mapper.UserMapper.findUserById"))
    })
    public UserInfo findInfoAndUser(@Param("infoId")int infoId);
}
public interface CourseMapper {
    @Select("select * from course where course_id=#{id}")
    @Results({
        @Result(id=true,column="course_id",property="courseId",javaType=Integer.class),
        @Result(column="code",property="code",javaType=String.class),
        @Result(column="name",property="name",javaType=String.class)
    })
    public Course findCourseById(@Param("id")int id);


    @Select("select * from course where course_id in (select course_id from user_course where user_id=#{id})")
    @Results({
        @Result(id=true,column="course_id",property="courseId",javaType=Integer.class),
        @Result(column="code",property="code",javaType=String.class),
        @Result(column="name",property="name",javaType=String.class)
    })
    public Course findCourseByUser(@Param("uId")int id);


    @Select("select * from course where course_id=#{courseId}")
    @Results({
        @Result(id=true,column="course_id",property="courseId",javaType=Integer.class),
        @Result(column="code",property="code",javaType=String.class),
        @Result(column="name",property="name",javaType=String.class),
        @Result(property="users",column="course_id",many=@Many(select="com.wode.mapper.UserMapper.findUserByCourse"))
    })
    public Course findCourseAndUser(@Param("courseId")int courseId);
}
MyBatis中,@One@Many是用于处理一对一和一对多关系的注解。它们用于在结果映射中定义实体类之间的关联关系。 1. **@One注解**: - 用于处理一对一的关系。 - 通过一个查询语句来加载关联的实体对象。 - 通常与`@Select`注解结合使用,定义一个查询来获取关联对象。 2. **@Many注解**: - 用于处理一对多的关系。 - 通过一个查询语句来加载关联的实体对象集合。 - 通常与`@Select`注解结合使用,定义一个查询来获取关联对象集合。 以下是两个示例,展示了如何使用@One@Many注解: ```java public class User { private Integer id; private String name; // 一对一关系 @One(select = "com.example.mapper.OrderMapper.getOrderByUserId", fetchType = FetchType.LAZY) private Order order; // 一对多关系 @Many(select = "com.example.mapper.OrderMapper.getOrdersByUserId", fetchType = FetchType.LAZY) private List<Order> orders; // Getters and Setters } public class Order { private Integer id; private String product; // Getters and Setters } public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") @Results({ @Result(property = "id", column = "id", id = true), @Result(property = "name", column = "name"), @Result(property = "order", column = "id", one = @One(select = "com.example.mapper.OrderMapper.getOrderByUserId")), @Result(property = "orders", column = "id", many = @Many(select = "com.example.mapper.OrderMapper.getOrdersByUserId")) }) User getUserById(Integer id); } public interface OrderMapper { @Select("SELECT * FROM orders WHERE user_id = #{userId}") List<Order> getOrdersByUserId(Integer userId); @Select("SELECT * FROM orders WHERE user_id = #{userId} LIMIT 1") Order getOrderByUserId(Integer userId); } ``` 在上述示例中,`User`类通过`@One`和`@Many`注解分别定义了一对一和一对多的关系。`OrderMapper`接口提供了获取关联订单的查询方法。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值