关于MyBatis各种SQL操作详解
作者:夏志121
一、查询一个实体类对象
映射方法:User getUserById(@Param("id") int id);
映射文件:
<select id="getUserById" resultType="User"> select * from t_user where id = #{id} </select>
二、查询一个List集合
映射方法:List<User> getAllUser();
映射文件
<select id="getAllUser" resultType="User"> select * from t_user </select>
注意:当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常 TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值
三、查询单个数据
映射方法:int getCount();
映射文件:
<select id="getCount" resultType="java.lang.Integer"> select count(id) from t_user </select>
四、查询一条数据及多条数据到map集合
查询一条数据到map集合
映射方法:Map<String,Object> getUserToMap(@Param("id") int id);
映射文件:
<select id="getUserToMap" resultType="java.util.Map"> select * from t_user where id = #{id} </select>
注意:将一条数据查询到map集合中时,map的键是表中的字段名,map的值是表中的数据
查询多条数据到map集合
方式一:
映射方法:List<Map<String,Object>> getAllUserToMap();
映射文件:
<select id="getAllUserToMap" resultType="java.util.Map"> select * from t_user </select>
方式二:
映射方法:
@MapKey("id") Map<String,Object> getAllUserToMap();
映射文件:
<select id="getAllUserToMap" resultType="java.util.Map"> select * from t_user </select>
注意:
- 方式一中每条查出来的数据都对应一个Map集合,然后再利用List集合将这些Map集合 组织起来
- 方式二中每条查出来的数据都存放在一个Map集合中,但是这个Map集合的键由映射方 法上方的@MapKey注解指定,而Map集合的值又是另外一个Map集合,作为值的Map 集合中键对应表中字段名,值对应表中数据
五、模糊查询
映射方法:List<User> getUserByLike(@Param("mohu") String mohu);
映射文件:
<select id="getUserByLike" resultType="User"> <!--方式1--> select * from t_user where username like '%${mohu}%' <!--方式2--> select * from t_user where username like concat("%",#{mohu},"%") <!--方式3--> select * from t_user where username like "%"#{mohu}"%" </select>
注意:不能使用 like '%#{mohu}%' 的方式,因为#{}会被解析成?,这个问号会被当成字符串的一 部分造成参数获取失败
六、批量删除
映射方法:void deleteSomeUser(@Param("ids") String ids);
映射文件:
<delete id="deleteSomeUser"> delete from t_user where id in(${ids}) </delete>
注意:这里获取参数的方式是${},因为#{}会自动添加引号,如果使用#{}的方式会造成SQL语句解 析成 delete from t_user where id in('ids') 从而报错
七、动态设置表名
映射方法:List<User> getUserList(@Param("table") String table);
映射文件:
<select id="getUserList" resultType="User"> select * from ${table} </select>
注意:这里使用${}是因为使用#{}时会自动添加引号,而表名不允许添加表名
八、执行添加功能时获取自增的主键
映射方法:void insertUser(User user);
映射文件:
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> insert into t_user values(null,#{username},#{password},#{age},# {gender},#{email}) </insert>
测试方法:
@Test public void testInsertUser(){ SqlSession sqlSession = SqlSessionUtil.getSqlSession(); SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class); User user = new User(null,"老六","1234567",36,"男","laoliu@qq.com"); mapper.insertUser(user); System.out.println(user);//在这一步中打印出的User对象中可以看到自增的id,如果配置文件中不使 用useGeneratedKeys和keyProperty,则id仍然是null }
注意:这里的useGeneratedKeys设置使用自增主键为true,keyProperty是将获取的主键值赋给实体对象中的某个属性。这样,在添加这个实体对象后,自增的主键也能在实体对象中获得,而不需要进行查询
到此这篇关于关于MyBatis各种SQL操作详解的文章就介绍到这了,更多相关MyBatis的SQL操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!