查询所有
修改 CustomerMapper.xml
文件,修改内容如下。
<!-- 查询所有 -->
<select id="queryAllCustomer" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer;
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllCustomer");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
根据某个字段模糊查询
我将介绍 两种方式
进行查询,首先来看第一种,修改 CustomerMapper.xml
内容如下。
<!-- 根据用户名模糊查询 -->
<select id="queryAllByName" parameterType="String" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer
WHERE cust_name LIKE '%${value}%';
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllByName", "剑");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
第二种方式,一样的修改 CustomerMapper.xml
内容如下。
<!-- 根据用户名模糊查询 -->
<select id="queryAllByName" parameterType="String" resultType="top.it6666.domain.Customer">
SELECT *
FROM customer
WHERE cust_name LIKE #{value};
</select>
紧接着修改 TestMain.java
文件内容如下。
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 5.执行 SqlSession 对象执行查询
List<Customer> customerList = sqlSession.selectList("queryAllByName", "%剑%");
// 6.打印结果
customerList.forEach(System.out::println);
// 7.释放资源
sqlSession.close();
}
}
总结
parameterType
- 指定输入参数的类型,mybatis 通过
ognl
从输入对象中获取参数值拼接在 sql 中。
resultType
- 指定输出结果的类型,mybatis 将 sql 查询结果的一行记录数据映射为 resultType 指定类型的对象。
- 如果有多条数据,则分别进行映射,并把对象放到容器 List 中。
selectOne
- 查询一条记录, mysql 中一行数据就是一条记录。
- 如果使用
selectOne
查询出了多条记录则会抛出异常
。
selectList
- 可以查询出一条或多条记录。
#{} 和 ${} 的区别
#{}
- 表示一个占位符号,通过
#{}
可以实现 preparedStatement 向占位符中设置值。 - 自动进行 Java 类型和 JDBC 类型的转换。
-
#{}
可以有效的防止 SQL 注入。 -
#{}
可以接收简单类型的值或 POJO 属性值。 - 如果 parameterType 传输单个简单类型值, #{} 括号中可以是 value 或其它名称来代码传递的值。
${}
- 表示拼接 SQL 串。
- 通过
${}
可以将 parameterType 传入的内容拼接在 SQL 中并且不会进行 JDBC 类型的转换。 -
${}
可以接收简单类型的值或 POJO 属性值。 - 如果 parameterType 传输单个简单类型值,${} 括号中只能是 value。