Mybatis(三) 查询不同数据封装的方式

实体类:

数据库:

1、查询一个实体类对象

/** * 根据用户id查询用户信息* @param id * @return */
 User getUserById(@Param("id") int id);
 
  <select id="getUserById" resultType="User">
      select * from t_user where id = #{id}
  </select>

2、查询一个list集合

/** * 查询所有用户信息* @return */ 
List<User> getUserList();

<select id="getUserList" result="User">
    select * from t_user
</select>

3、查询单个数据

/** * 查询用户的总记录数
* @return 
* 在MyBatis中,对于Java中常用的类型都设置了类型别名
* 例如:java.lang.Integer-->int|integer 
* 例如:int-->_int|_integer 
* 例如:Map-->map,List-->list */
int getCount();

<select id="getCount" resultType="_integer">
    select count(id) from t_user
 </select>

4、查询一条数据为map集合

/**
* 根据用户id查询用户信息未map集合
*/
Map<String,Object> getUserMap(@Param("id") int id);

<select id="getUserToMap" resultType="map">
    select * from t_user where id = #{id}
 </select>

5、查询多条数据为map集合

方式一:每条数据用map接收,将map封装到一个list中
//将表中的数据以map集合的方式查询,一条数据对应一个map;
//若有多条数据,就会产生多个map集合
//此时就可以将这些map放在一个list集合中
List<Map<String,Object>>getAllUserToMap();

<select id="getAllUserToMap" resultType="map">
    select * from t_user
</select>
方式二:每条数据用map接收,将所有的map封装到一个map中去

添加@MapKey注解,此时就可以将每条数据转换的map几个作为值,以某个字段的值作为键(该键不能和其他条数据的字段重复),放在同一个map集合中


@MapKey("id")
Map<String,Object>getAlluserToMap();

<select id="getAllUserToMap" resultType="map">
    select * from t_user
</select>

结果:
 { 
     1={password=123456, sex=男, id=1, age=23, username=admin}, 
     2={password=123456, sex=男, id=2, age=23, username=张三}, 
     3={password=123456, sex=男, id=3, age=23, username=张三} 
 }
方式三:每条数据用实体类接收,将实体类封装到list中
List<User> getAlluserTolei();

<select id="getAlluserTolei" resultType="User">
    select * from t_user
</select>

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus的查询可以通过使用MyBatis的XML映射文件或者注解方式来实现。以下是一个使用XML映射文件实现的查询示例: 1. 创建实体类 假设我们有个实体类:User、Role和UserRole,分别对应数据库中的张表。 User实体类: ```java public class User { private Long id; private String username; private String password; private String email; // getter和setter方法 } ``` Role实体类: ```java public class Role { private Long id; private String roleName; private String description; // getter和setter方法 } ``` UserRole实体类: ```java public class UserRole { private Long id; private Long userId; private Long roleId; // getter和setter方法 } ``` 2. 创建Mapper接口 创建个Mapper接口:UserMapper、RoleMapper和UserRoleMapper,分别对应User、Role和UserRole实体类。 UserMapper接口: ```java public interface UserMapper extends BaseMapper<User> {} ``` RoleMapper接口: ```java public interface RoleMapper extends BaseMapper<Role> {} ``` UserRoleMapper接口: ```java public interface UserRoleMapper extends BaseMapper<UserRole> {} ``` 3. 创建XML映射文件 在MyBatis的XML映射文件中定义个SQL语句,分别查询用户、角色和用户角色关联信息。 UserMapper.xml文件: ```xml <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="userRoleMap" type="com.example.entity.User"> <id column="id" property="id" /> <result column="username" property="username" /> <result column="password" property="password" /> <result column="email" property="email" /> <collection property="roles" ofType="com.example.entity.Role"> <id column="role_id" property="id" /> <result column="role_name" property="roleName" /> <result column="description" property="description" /> </collection> </resultMap> <select id="getUserWithRolesById" resultMap="userRoleMap"> select u.id, u.username, u.password, u.email, r.id as role_id, r.role_name, r.description from user u left join user_role ur on u.id = ur.user_id left join role r on ur.role_id = r.id where u.id = #{id} </select> </mapper> ``` RoleMapper.xml文件: ```xml <mapper namespace="com.example.mapper.RoleMapper"> <select id="getRoleWithUsersById" resultType="com.example.entity.Role"> select r.id, r.role_name, r.description, u.id as user_id, u.username, u.password, u.email from role r left join user_role ur on r.id = ur.role_id left join user u on ur.user_id = u.id where r.id = #{id} </select> </mapper> ``` UserRoleMapper.xml文件: ```xml <mapper namespace="com.example.mapper.UserRoleMapper"> <select id="getUserRoleByUserId" resultType="com.example.entity.UserRole"> select id, user_id, role_id from user_role where user_id = #{userId} </select> </mapper> ``` 4. 使用查询 在Service层或Controller层中调用Mapper接口中定义的方法即可使用查询功能。 UserService类: ```java @Service public class UserService { @Autowired private UserMapper userMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private RoleMapper roleMapper; public User getUserWithRolesById(Long id) { User user = userMapper.getUserWithRolesById(id); List<UserRole> userRoles = userRoleMapper.getUserRoleByUserId(user.getId()); for (UserRole userRole : userRoles) { Role role = roleMapper.getRoleWithUsersById(userRole.getRoleId()); user.getRoles().add(role); } return user; } } ``` RoleService类: ```java @Service public class RoleService { @Autowired private RoleMapper roleMapper; @Autowired private UserRoleMapper userRoleMapper; @Autowired private UserMapper userMapper; public Role getRoleWithUsersById(Long id) { Role role = roleMapper.getRoleWithUsersById(id); List<UserRole> userRoles = userRoleMapper.getUserRoleByRoleId(role.getId()); for (UserRole userRole : userRoles) { User user = userMapper.getUserWithRolesById(userRole.getUserId()); role.getUsers().add(user); } return role; } } ``` 注:以上示例中的XML映射文件中的SQL语句仅供参考,实际使用时需要根据业务需求自行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值