<!--登录-->
<select id="login" resultType="User">
<!--使用#-->
select * from tb_user where user_name = #{name} and passworld = #{passworld}
</select>
/**
* 登录
*/
public User login(@Param("name") String name ,@Param("passworld") String passworld);
@Test
public void testLogin(){
User u = userMapper.login("jack", "123");//#不用考虑参数类型
User u = userMapper.login("' or '1' = '1", "' or '1' = '1");//#防止sql注入
System.out.println(u);
}
根据姓名进行模糊查询
/**
* 根据姓名进行模糊查询
* @param name
* @return
*/
public List<User> queryByLikeName(String name);
<!--根据姓名进行模糊查询-->
<select id="queryByLikeName" resultType="User">
select * from tb_user where user_name like concat('%',#{name},'%')
</select>
@Test
public void teseQueryByLikeName(){
List<User> list = this.userMapper.queryByLikeName("ja");
for(User user : list){
System.out.println(user);
}
}
$的用法
用于字符串拼接
/**
* 根据表名来查询
* @param name
*/
public List<User> queryByTableName(String name);
<!--根据表名来查询-->
<select id="queryByTableName" resultType="User">
select * from ${name}
</select>
@Test
public void testqueryByTableName(){
List<User> list = this.userMapper.queryByTableName("tb_user");
for(User user : list){
System.out.println(user);
}
}
$ 需要考虑参数类型
$不防止sql注入
<!--登录-->
<select id="login" resultType="User">
<!--使用$ 需要考虑参数类型-->
select * from tb_user where user_name = '${name}' and passworld = '${passworld}'
</select>
/**
* 登录
*/
public User login(@Param("name") String name ,@Param("passworld") String passworld);
@Test
public void testLogin(){
User u = userMapper.login("jack", "123");//$不用考虑参数类型
User u = userMapper.login("' or '1' = '1", "' or '1' = '1");//$防止sql注入
System.out.println(u);
}
/**
查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询
*/
public List<User> queryLikeByName(String name);
<!--查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询-->
<select id="queryLikeByName" resultType="User">
select * from tb_user where sex = '男'
<if test="name != null and name !=''">
and user_name like concat('%',#{name},'%')
</if>
</select>
//查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询
@Test
public void queryLikeByName() {
List<User> list = this.userMapper.queryLikeByName("ck");
for(User user : list){
System.out.println(user);
}
}
/**
* 查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找
*/
public List<User> queryByLikeNameAndAge(@Param("name") String name , @Param("age") Integer age);
<!--查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找-->
<select id="queryByLikeNameAndAge" resultType="User">
select * from tb_user where sex = '男'
<choose>
<when test="name != null and name !=''">
and user_name like concat('%',#{name},'%')
</when>
<when test="age != null and age !=''">
and age like concat('%',#{age},'%')
</when>
<otherwise>
and id = 12
</otherwise>
</choose>
</select>
//查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找
@Test
public void queryByLikeNameAndAge(){
List<User> list = this.userMapper.queryByLikeNameAndAge("jack", null);
for(User user : list){
System.out.println(user);
}
}
动态sql-where标签
where标签代替 sql中的where关键字
需求3:查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
/**
* 查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
*/
public List<User> queryByAllUserLikeNameAndAge(@Param("name") String name , @Param("age") Integer age);
<!--查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询-->
<select id="queryByAllUserLikeNameAndAge" resultType="User">
select * from tb_user
<where>
<if test="name != null and name!=''">
user_name like concat('%',#{name},'%')
</if>
<if test="age != null and age!=''">
and age like concat('%',#{age},'%')
</if>
</where>
</select>
//查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
@Test
public void queryByAllUserLikeNameAndAge(){
List<User> list = this.userMapper.queryByAllUserLikeNameAndAge("c", 2);
for(User user : list){
System.out.println(user);
}
}
动态sql-set标签
set标签代替 sql中set关键字
需求4:如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age
/**
* 如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age
*/
public Integer updateByNameOrAge(@Param("name") String name , @Param("age") Integer age , @Param("id") Integer id);
<!--如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age-->
<update id="updateByNameOrAge">
update tb_user
<set>
<if test="name != null and name!=''">
user_name = #{name},
</if>
<if test="age != null and age!=''">
age = #{age}
</if>
</set>
where id = #{id}
</update>
/**
* 查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询
*/
public List<User> queryNameAndSexTrim(@Param("name") String name , @Param("sex") String sex);
<!--查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询-->
<select id="queryNameAndSexTrim" resultType="User">
select * from tb_user
/*加前缀,去掉第一个前缀*/
<trim prefix="where" prefixOverrides="and">
<if test="name != null and name !=''">
and user_name = #{name}
</if>
<if test="sex != null and sex !=''">
and sex = #{sex}
</if>
</trim>
</select>
//查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询
@Test
public void queryNameAndSexTrim(){
List<User> list = this.userMapper.queryNameAndSexTrim("jack", "男");
for(User user : list){
System.out.println(user);
}
}
案例二 suffix用法
/**
* 如果名字信息不是null,则修改名字, 如果sex不为null,同时也修改null
*/
public Integer updateByNameOrAgeTrim(@Param("name") String name , @Param("sex") String sex , @Param("id") Integer id);
<!--如果名字信息不是null,则修改名字, 如果sex不为null,同时也修改null-->
<update id="updateByNameOrAgeTrim">
update tb_user
<trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="name != null and name !=''">
user_name = #{name},
</if>
<if test="sex != null and sex !=''">
sex = #{sex},
</if>
</trim>
</update>
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
User user2 = this.userMapper.queryById(2);//不发送sql
System.out.println(user2);
}
清空缓存
使用sqlsession.clearCache()清除缓存
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
sqlSession.clearCache();//清空缓存
User user2 = this.userMapper.queryById(2);//重新发送sql
System.out.println(user2);
}
执行update,delete,insert 语句的时候,清空缓存 刷新缓存
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
Integer i = this.userMapper.deleteById(1);//执行删除操作
sqlSession.commit();
System.out.println(i);
User user2 = this.userMapper.queryById(2);//发送sql
System.out.println(user2);
}
<!--登录-->
<select id="login" resultType="User">
<!--使用#-->
select * from tb_user where user_name = #{name} and passworld = #{passworld}
</select>
/**
* 登录
*/
public User login(@Param("name") String name ,@Param("passworld") String passworld);
@Test
public void testLogin(){
User u = userMapper.login("jack", "123");//#不用考虑参数类型
User u = userMapper.login("' or '1' = '1", "' or '1' = '1");//#防止sql注入
System.out.println(u);
}
根据姓名进行模糊查询
/**
* 根据姓名进行模糊查询
* @param name
* @return
*/
public List<User> queryByLikeName(String name);
<!--根据姓名进行模糊查询-->
<select id="queryByLikeName" resultType="User">
select * from tb_user where user_name like concat('%',#{name},'%')
</select>
@Test
public void teseQueryByLikeName(){
List<User> list = this.userMapper.queryByLikeName("ja");
for(User user : list){
System.out.println(user);
}
}
$的用法
用于字符串拼接
/**
* 根据表名来查询
* @param name
*/
public List<User> queryByTableName(String name);
<!--根据表名来查询-->
<select id="queryByTableName" resultType="User">
select * from ${name}
</select>
@Test
public void testqueryByTableName(){
List<User> list = this.userMapper.queryByTableName("tb_user");
for(User user : list){
System.out.println(user);
}
}
$ 需要考虑参数类型
$不防止sql注入
<!--登录-->
<select id="login" resultType="User">
<!--使用$ 需要考虑参数类型-->
select * from tb_user where user_name = '${name}' and passworld = '${passworld}'
</select>
/**
* 登录
*/
public User login(@Param("name") String name ,@Param("passworld") String passworld);
@Test
public void testLogin(){
User u = userMapper.login("jack", "123");//$不用考虑参数类型
User u = userMapper.login("' or '1' = '1", "' or '1' = '1");//$防止sql注入
System.out.println(u);
}
/**
查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询
*/
public List<User> queryLikeByName(String name);
<!--查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询-->
<select id="queryLikeByName" resultType="User">
select * from tb_user where sex = '男'
<if test="name != null and name !=''">
and user_name like concat('%',#{name},'%')
</if>
</select>
//查询男性用户,如果输入了姓名,姓名进行模糊查找,如果不输入就按男性用户来查询
@Test
public void queryLikeByName() {
List<User> list = this.userMapper.queryLikeByName("ck");
for(User user : list){
System.out.println(user);
}
}
/**
* 查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找
*/
public List<User> queryByLikeNameAndAge(@Param("name") String name , @Param("age") Integer age);
<!--查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找-->
<select id="queryByLikeNameAndAge" resultType="User">
select * from tb_user where sex = '男'
<choose>
<when test="name != null and name !=''">
and user_name like concat('%',#{name},'%')
</when>
<when test="age != null and age !=''">
and age like concat('%',#{age},'%')
</when>
<otherwise>
and id = 12
</otherwise>
</choose>
</select>
//查询男性用户,如果输入了姓名则按照姓名模糊查找,否则如果输入了年龄则按照年龄查找
@Test
public void queryByLikeNameAndAge(){
List<User> list = this.userMapper.queryByLikeNameAndAge("jack", null);
for(User user : list){
System.out.println(user);
}
}
动态sql-where标签
where标签代替 sql中的where关键字
需求3:查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
/**
* 查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
*/
public List<User> queryByAllUserLikeNameAndAge(@Param("name") String name , @Param("age") Integer age);
<!--查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询-->
<select id="queryByAllUserLikeNameAndAge" resultType="User">
select * from tb_user
<where>
<if test="name != null and name!=''">
user_name like concat('%',#{name},'%')
</if>
<if test="age != null and age!=''">
and age like concat('%',#{age},'%')
</if>
</where>
</select>
//查询所有用户,如果输入了姓名按照姓名进行模糊查询,如果输入年龄,按照年龄进行查询
@Test
public void queryByAllUserLikeNameAndAge(){
List<User> list = this.userMapper.queryByAllUserLikeNameAndAge("c", 2);
for(User user : list){
System.out.println(user);
}
}
动态sql-set标签
set标签代替 sql中set关键字
需求4:如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age
/**
* 如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age
*/
public Integer updateByNameOrAge(@Param("name") String name , @Param("age") Integer age , @Param("id") Integer id);
<!--如果名字信息不是null,则修改名字, 如果age信息不是null,同时也修改age-->
<update id="updateByNameOrAge">
update tb_user
<set>
<if test="name != null and name!=''">
user_name = #{name},
</if>
<if test="age != null and age!=''">
age = #{age}
</if>
</set>
where id = #{id}
</update>
/**
* 查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询
*/
public List<User> queryNameAndSexTrim(@Param("name") String name , @Param("sex") String sex);
<!--查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询-->
<select id="queryNameAndSexTrim" resultType="User">
select * from tb_user
/*加前缀,去掉第一个前缀*/
<trim prefix="where" prefixOverrides="and">
<if test="name != null and name !=''">
and user_name = #{name}
</if>
<if test="sex != null and sex !=''">
and sex = #{sex}
</if>
</trim>
</select>
//查询所有,如果输入姓名,按姓名查询,如果输入性别,就按性别来查询
@Test
public void queryNameAndSexTrim(){
List<User> list = this.userMapper.queryNameAndSexTrim("jack", "男");
for(User user : list){
System.out.println(user);
}
}
案例二 suffix用法
/**
* 如果名字信息不是null,则修改名字, 如果sex不为null,同时也修改null
*/
public Integer updateByNameOrAgeTrim(@Param("name") String name , @Param("sex") String sex , @Param("id") Integer id);
<!--如果名字信息不是null,则修改名字, 如果sex不为null,同时也修改null-->
<update id="updateByNameOrAgeTrim">
update tb_user
<trim prefix="set" suffixOverrides="," suffix="where id = #{id}">
<if test="name != null and name !=''">
user_name = #{name},
</if>
<if test="sex != null and sex !=''">
sex = #{sex},
</if>
</trim>
</update>
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
User user2 = this.userMapper.queryById(2);//不发送sql
System.out.println(user2);
}
清空缓存
使用sqlsession.clearCache()清除缓存
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
sqlSession.clearCache();//清空缓存
User user2 = this.userMapper.queryById(2);//重新发送sql
System.out.println(user2);
}
执行update,delete,insert 语句的时候,清空缓存 刷新缓存
@Test
public void queryById(){
User user = this.userMapper.queryById(2);//发送sql
System.out.println(user);
Integer i = this.userMapper.deleteById(1);//执行删除操作
sqlSession.commit();
System.out.println(i);
User user2 = this.userMapper.queryById(2);//发送sql
System.out.println(user2);
}