MyBatis特殊的SQL执行
5.1 查询多条数据为map集合
(1)方式一
将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此
时可以将这些map放在一个list集合中获取
①Mapper.java
List<Map<String, Object>> getAllUserToMap();
1
②Mapper.xml
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
(2)方式二
将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并
且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对
应的map集合
①Mapper.java
@MapKey("id")
Map<String, Object> getAllUserToMap();
1
2
②Mapper.xml
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
1
2
3
③结果如下
{
1={password=123, sex=男, id=1, age=23, username=admin},
2={password=416, sex=男, id=2, age=24, username=张三},
3={password=341, sex=男, id=3, age=25, username=李四}
}
5.2 模糊查询
<select id="testMohu" resultType="User">
<!-- 方式一 -->
select * from t_user where username like '%${mohu}%'
<!-- 方式二 -->
select * from t_user where username like concat('%',#{mohu},'%')
<!-- 方式三 -->
select * from t_user where username like "%"#{mohu}"%"
</select>
5.3 批量删除
(1)Mapper.java
/**
* 批量删除
* @param ids
* @return
*/
int deleteMore(@Param("ids") String ids);
(2)Mapper.xml
<!--int deleteMore(@Param("ids") String ids);-->
<delete id="deleteMore">
delete from t_user where id in (${ids})
</delete>
5.4 动态设置表名
(1)Mapper.java
/**
* 动态设置表名,查询所有的用户信息
* @param tableName
* @return
*/
List<User> getAllUser(@Param("tableName") String tableName);
(2)Mapper.xml
<select id="getAllUser" resultType="User">
select * from ${tableName}
</select>
5.5 添加功能获取自增的主键
(1)使用场景:插入一条新的记录后,数据库本身自动生成了主键,而这个主键需要在其他表中使用。
(2)Mapper.java
int insertUser(User user);
(3)Mapper.xml
/**
* useGeneratedKeys: 设置使用自增的主键
* keyProperty="id" 指定主键值赋值给Java对象的哪个属性
* keyColumn 设置为数据库的自增长列名(有些版本需要设置,否则会报错)
*/
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values(null,#{username},#{password},#{age},#{sex})
</insert>
6、自定义映射resultMap
6.1 当字段名和属性名不一致的时候,如何处理映射关系?
(1)为查询的字段设置别名,和属性名保持一致
<select id="getEmpById" resultType="Emp">
select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}
</select>
1
2
3
(2)当字段符合Mysql的要求使用下划线“_”,而实体类的属性符合Java的要求使用驼峰;
此时可以在mybatis的核心配置文件中设置一个全局配置,可以自动将下划线映射为驼峰
<?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>
<settings>
<!-- 将下划线映射为驼峰 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
-
自定义映射 resultMap 处理字段和属性的映射关系:
- 当字段名和实体类中的属性名不一致时,可以通过
resultMap
来设置自定义映射:xml
<resultMap id="userMap" type="User"><id property="id" column="user_id" /><result property="name" column="username" /> </resultMap>
- 这种方式允许自定义字段和属性之间的映射关系。
- 当字段名和实体类中的属性名不一致时,可以通过
以上是 MyBatis 特殊 SQL 执行的一些常见方式,可以根据具体需求选择合适的方法来实现。