一、问题说明
使用模糊查询,在数据库中查询名字中带有"周"字的人的信息,可以使用如下的模糊查询语句:
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}%';