Mybatis框架|模糊查询|占位符与取值符


一、问题说明

使用模糊查询,在数据库中查询名字中带有"周"字的人的信息,可以使用如下的模糊查询语句:

SELECT id,username,sex,address,birthday FROM user where username LIKE '%周%'

搭建Mybatis环境,下面介绍在Mybatis框架下使用模糊查询,查询姓名中含又"程"的人员个数。

二、使用Mybatis进行模糊查询

1.创建数据库表user

创建数据库表,并添加记录。

CREATE TABLE `user` (
	`id` INT(20)  AUTO_INCREMENT COMMENT '主键',
	`username` VARCHAR(50) NULL DEFAULT NULL COMMENT '姓名',
	`sex` VARCHAR(1) NULL DEFAULT NULL COMMENT '性别',
	`address` VARCHAR(200) NULL DEFAULT NULL COMMENT '住址',
	`birthday` DATE NULL DEFAULT NULL COMMENT '生日',
	PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1
;
insert INTO user(id,username,sex,address,birthday) VALUE(NULL,'程蝶衣','男','广东','1997-11-22');
insert INTO user(id,username,sex,address,birthday) VALUE(NULL,'程小楼','男','湖南','1996-3-21');
insert INTO user(id,username,sex,address,birthday) VALUE(NULL,'周冬雨','女','湖北','1999-2-11');

在这里插入图片描述

2.JavaBean

package com.gql.pojo;
import java.io.Serializable;
import java.util.Date;
/**
 * 类说明:
 *		JavaBean
 * @guoqianliang1998.
 */
public class User implements Serializable{

	private static final long serialVersionUID = 1L;
	private int id;
	private String name;
	private String sex;
	private String address;
	private Date birthday;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
}

3.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>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="Hudie" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="User.xml" />
	</mappers>
</configuration>

4.User.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="test">
	<select id="sql2" parameterType="java.lang.String" resultType="com.gql.pojo.User">
		SELECT id,username as name,sex,address,birthday FROM user WHERE username like '%${value}%';
	</select>
</mapper>

5.模糊查询测试

package com.gql.Demo;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.gql.pojo.User;
/**
 * 类说明:
 *		测试使用Mybatis进行模糊查询
 * @guoqianliang1998.
 */
public class Demo {
	private SqlSessionFactory sqlSessionFactory;
	@Before
	public void init() throws IOException{
		String resource = "mybatis-config.xml";
		InputStream in = Resources.getResourceAsStream(resource);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
	}
	@Test
	public void testSelectList(){
		SqlSession session = sqlSessionFactory.openSession();
		try {
			List<User> userList = session.selectList("test.sql2","程");
			System.out.println(userList.size());
		}finally{
			session.close();
		}
	}
}

成功在数据库中查询到姓名中含有"程"字的人员个数为2:
在这里插入图片描述

三、占位符与取值符

  • #{ }:占位符,向占位符中输入参数时,可以自动完成Java类型和数据库类型的自动映射。
  • ${ }:取值符,将参数原封不动的取出来,与sql语句拼接。(缺点,不能防止sql注入)

使用模糊查询的例子,两种符号预编译后的sql语句分别如下:

SELECT id,username as name,sex,address,birthday FROM user WHERE username like #{username};

在这里插入图片描述

SELECT id,username as name,sex,address,birthday FROM user WHERE username like '%${value}%';

发布了395 篇原创文章 · 获赞 1049 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/weixin_43691058/article/details/104221449