文章目录
1.模糊查询
SQLMapper接口类
package com.rqs.mybatis.mapper;
import com.rqs.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SQLMapper {
/**
* 根据用户名模糊查询用户信息
*/
List<User> getUserByLike(@Param("username") String username);
}
SQLMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rqs.mybatis.mapper.SQLMapper">
<!--List<User> getUserByLike(@Param("username") String username);-->
<select id="getUserByLike" resultType="User">
<!--【方式1,错误的方式】使用#{},因为包括在单引号里,会被认为是字符串的一部分:select * from t_user where username like '%#{username}%'-->
<!--【方式2,正确的方式】使用${},没有问题 select * from t_user where username like '%${username}%'-->
<!--【方式3,正确的方式】使用concat()函数进行字符串拼接,解决【方式1】中的问题 select * from t_user where username like concat('%',#{username},'%')-->
<!--【方式4,正确的方式,建议使用这种方式】-->
select * from t_user where username like "%"#{username}"%"
</select>
</mapper>
SQLMapperTest
package com.rqs.mybatis.test;
import com.rqs.mybatis.mapper.SQLMapper;
import com.rqs.mybatis.pojo.User;
import com.rqs.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.*;
import java.util.List;
public class SQLMapperTest {
@Test
public void testGetUserByLike(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
List<User> list = mapper.getUserByLike("a");
System.out.println(list);
}
}
测试结果
2.批量删除
SQLMapper接口类
package com.rqs.mybatis.mapper;
import com.rqs.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SQLMapper {
/**
* 批量删除
*/
int deleteMore(@Param("ids") String ids);
}
SQLMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rqs.mybatis.mapper.SQLMapper">
<!--int deleteMore(@Param("ids") String ids);-->
<delete id="deleteMore">
<!--批量删除功能不能使用#{},因为会自动添加单引号,变成delete from t_user where id in ('9,10,11')-->
delete from t_user where id in (${ids})
</delete>
</mapper>
SQLMapperTest
package com.rqs.mybatis.test;
import com.rqs.mybatis.mapper.SQLMapper;
import com.rqs.mybatis.pojo.User;
import com.rqs.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.*;
import java.util.List;
public class SQLMapperTest {
@Test
public void testDeleteMore(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
int result = mapper.deleteMore("4,5,6");
System.out.println(result);
}
}
测试结果
3.动态设置表名
什么是动态设置表名?
比如说一张表里,数据太多的话会影响mysql的性能,为了提高性能,将这张表拆分为多张表共同存储这一张表中的数据。那当需要查询或者操作数据的时候,所操作的表示不一样的,虽然表里的数据都来自同一张表。既然操作的表不一样,就需要动态设置表名。
SQLMapper接口类
package com.rqs.mybatis.mapper;
import com.rqs.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SQLMapper {
/**
* 查询指定表中的数据
*/
List<User> getUserByTableName(@Param("tableName") String tableName);
}
SQLMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rqs.mybatis.mapper.SQLMapper">
<!--List<User> getUserByTableName(@Param("tableName") String tableName);-->
<!--sql语句中表名不能加单引号 所以不能用#{} -->
<select id="getUserByTableName" resultType="User">
select * from ${tableName}
</select>
</mapper>
SQLMapperTest
package com.rqs.mybatis.test;
import com.rqs.mybatis.mapper.SQLMapper;
import com.rqs.mybatis.pojo.User;
import com.rqs.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.*;
import java.util.List;
public class SQLMapperTest {
@Test
public void testGetUserByTableName(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
List<User> list = mapper.getUserByTableName("t_user");
System.out.println(list);
}
}
测试结果
4.添加功能 获取自增的主键
使用场景
假如有一张班级表t_clazz
和学生表t_student
,
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id)
一个班级可以有多个学生,班级表和学生表是1对多的关系,而1对多的关系或者多对1的关系需要把表关系设置在多这一方的表上,即需要在学生表里设置对应的班级id。
在添加班级后,若需要为学生设置所在的班级,且刚好就是刚所添加的班级,但此时不知道这个班级的id,需要获取当前添加班级的id,才能为学生设置班级id。
1、添加班级信息
2、获取新添加的班级的id
3、为班级分配学生,即将某学的班级id修改为新添加的班级的id
SQLMapper接口类
package com.rqs.mybatis.mapper;
import com.rqs.mybatis.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface SQLMapper {
/**
* 添加用户信息
*/
void insertUser(User user);
}
SQLMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rqs.mybatis.mapper.SQLMapper">
<!--
void insertUser(User user);
useGeneratedKeys:设置当前标签中的sql使用了自增的主键
keyProperty:将自增的主键的值赋值给传输到映射文件中参数的某个属性,比如此处就是把自增的主键的值赋值给了id
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
</insert>
</mapper>
SQLMapperTest
package com.rqs.mybatis.test;
import com.rqs.mybatis.mapper.SQLMapper;
import com.rqs.mybatis.pojo.User;
import com.rqs.mybatis.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.*;
import java.util.List;
public class SQLMapperTest {
@Test
public void testInsertUser(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
User user = new User(null, "王五", "123", 23, "男", "123@163.com");
mapper.insertUser(user);
System.out.println(user);
}
}
测试结果