Mybatis-查询
1.在与javaBean所对应的配置文件中相关参数使用
parameterType:指定输入参数类型,Mybatis通过ognl从输入对象中获取参数值拼接在的sql中。
resultType:指定输出结果类型,Mybatis将sql查询结果的一行记录数据影射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象放到容器List中。
2.在java查询时所使用的查询方法的使用
selectOne:只查询一条记录。(如果使用selectOne查询多条记录则抛出异常)
selectList:可以查询一条或多条记录
3.在与javaBean所对应的配置文件中sql查询语句中传递参数设置方式
${}:
表示拼接字符串;
通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换;
${}可以接收简单的类型值或者pojo属性值
如果parameterType传输单个简单类型值,${}括号中只能是value
#{}:
表示一个占位符号,通过#{}可以实现prepareStatement向占位符中设置值;
自动进行java类型和jdbc类型转换;
#{}可以有效的防止sql注入;
#{}可以结果简单类型值或pojo属性值;
如果parameterType传输单个简单类型值,#{}括号中可以是value或者其它名称;
Mybatis查询代码示例:
关系映射表配置文件:
<?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="myTest">
<!--根据cust_id查询客户-->
<select id="queryCustomerById" parameterType="Int" resultType="com.helong.domain.Customer">
SELECT * FROM `customer` WHERE cust_id = #{cust_id}
</select>
<!--查询所有-->
<select id="queryAllCustomer" resultType="com.helong.domain.Customer">
SELECT * FROM customer;
</select>
<!--
根据用户名模糊查询方式1和方式2的区别在于:
一种是在查询语句中将通配符就添加上了
另一种是在查询语句中只是传递参数,通配符在实际调用查询的时候再添加
-->
<!--根据用户名模糊查询1-->
<select id="queryAllByName1" parameterType="String" resultType="com.helong.domain.Customer">
/*注意在sql中“%”代表的任意匹配多个字符,“_”代表只是任意匹配一个字符*/
SELECT * FROM customer WHERE cust_name LIKE '%${value}%'
</select>
<!--根据用户名模糊查询2-->
<select id="queryAllByName2" parameterType="String" resultType="com.helong.domain.Customer">
SELECT * FROM customer WHERE cust_name Like #{customer}
</select>
</mapper>
查询测试代码:
package com.helong.test;
import com.helong.domain.Customer;
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.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MyTest {
/*根据id来查询一条记录,并封装成配置文件中resultType所设置的对象*/
@Test/*使用测试时候先导入单元测试的jar包*/
public void test1() throws IOException {
//1.SqlSessionFactoryBuilder用来加载配置文件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.读取配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
//3.获取session工厂
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//4.获取会话 --JDBC连接
SqlSession sqlSession = sessionFactory.openSession();
//5.执行sql
Customer queryCustomerById = sqlSession.selectOne("queryCustomerById", 1);
System.out.println(queryCustomerById);
//6.关闭session会话
sqlSession.close();
}
/*查询数据库对应表中的所有记录,并封装成配置文件中resultType所设置的对象*/
@Test
public void test2() throws IOException {
//1加在配置资源文件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.读取资源配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
//3.获取session工厂
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//4.获取会话
SqlSession sqlSession = sessionFactory.openSession();
//5.sql查询
List<Customer> queryAllCustomer = sqlSession.selectList("queryAllCustomer");
//打印结果
for (Customer customer : queryAllCustomer) {
System.out.println(customer);
}
//7.关闭资源,释放会话
sqlSession.close();
}
/*根据用户名模糊查询1*/
@Test
public void test3() throws IOException {
//1.加载配置资源文件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.获取配置资源信息
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
//3.获取session工厂
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//4.打开会话
SqlSession sqlSession = sessionFactory.openSession();
//5.sql查询
List<Customer> queryAllByName = sqlSession.selectList("queryAllByName1", "亚");
//6.打印查询结果
for (Customer customer : queryAllByName) {
System.out.println(customer);
}
//7.关闭会话
sqlSession.close();
}
/*根据用户名模糊查询2*/
@Test
public void test4() throws IOException {
//1.加载配置资源文件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//2.获取配置资源信息
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
//3.获取session工厂
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
//4.打开会话
SqlSession sqlSession = sessionFactory.openSession();
//5.sql查询
List<Customer> queryAllByName = sqlSession.selectList("queryAllByName2", "%亚%");
//6.打印查询结果
for (Customer customer : queryAllByName) {
System.out.println(customer);
}
//7.关闭会话
sqlSession.close();
}
}