从零开始学Mybatis(二)——Mybatis查询

这篇博客详细介绍了如何使用Mybatis进行查询操作,包括查询所有用户、根据用户名模糊查询用户的方法,并对比了#{}与${}的区别。同时,讲解了parameterType和resultType的作用,以及selectOne和selectList的用法。
摘要由CSDN通过智能技术生成
  • 查询所有用户
  1. SqlMappingConfig配置如下
<?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">
            <!--使用jdbc事务管理-->
            <transactionManager type="JDBC"/>
            <!--配置数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/development"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--加载映射文件-->
    <mappers>
        <mapper resource="demo1/Mapping"/>
    </mappers>
</configuration>
  1. 在Mapping中添加查询所有用户的sql语句
<?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">
    <!--根据id查找用户-->
    <select id="queryCustomerById" parameterType="Integer" resultType="demo1.Customer">
        SELECT * FROM customer WHERE cust_id=#{cust_id}
    </select>
    <!--查询所有用户-->
    <select id="queryAll" resultType="demo1.Customer">
        SELECT * FROM  customer;
    </select>
</mapper>
  1. 编写测试类
@Test
public void test1() throws IOException {
    // 1、创建SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //2、加载SqlMappingConfig配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig");
    //3、创建SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
    //4、创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //5、执行sql查询
    //参数queryAll为Mapping.xml的statement的id
     List<Customer> customerList=sqlSession.selectList("queryAll");
    //6、打印结果
    for (Customer customer:customerList) {
        System.out.println(customer);
    }
    //7、关闭连接,释放资源
    sqlSession.close();
}

运行结果

  • 根据用户名模糊查询用户

方式1:在Mapping中添加查询sql语句

<?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">
    <!--根据id查找用户-->
    <select id="queryCustomerById" parameterType="Integer" resultType="demo1.Customer">
        SELECT * FROM customer WHERE cust_id=#{cust_id}
    </select>
    <!--查询所有用户-->
    <select id="queryAll" resultType="demo1.Customer">
        SELECT * FROM  customer;
    </select>
    <!--根据用户名模糊查询用户-->
    <select id="queryByName" resultType="demo1.Customer" parameterType="String">
        SELECT * FROM customer WHERE cust_name LIKE '%${value}%'
    </select>
</mapper>

编写测试类

// 根据用户名模糊查询用户
@Test
public void test2() throws IOException {
    // 1、创建SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //2、加载SqlMappingConfig配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig");
    //3、创建SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
    //4、创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //5、执行sql查询
    //参数queryAll为Mapping.xml的statement的id
    List<Customer> customerList=sqlSession.selectList("queryByName","三");
    //6、打印结果
    for (Customer customer:customerList) {
        System.out.println(customer);
    }
    //7、关闭连接,释放资源
    sqlSession.close();
}

运行结果

方式2:在Mapping中添加查询sql语句

<?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">
    <!--根据id查找用户-->
    <select id="queryCustomerById" parameterType="Integer" resultType="demo1.Customer">
        SELECT * FROM customer WHERE cust_id=#{cust_id}
    </select>
    <!--查询所有用户-->
    <select id="queryAll" resultType="demo1.Customer">
        SELECT * FROM  customer;
    </select>
    <!--根据用户名模糊查询用户-->
    <select id="queryByName" resultType="demo1.Customer" parameterType="String">
        SELECT * FROM customer WHERE cust_name LIKE #{cust_name}
    </select>
</mapper>

编写测试类

// 根据用户名模糊查询用户
@Test
public void test2() throws IOException {
    // 1、创建SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //2、加载SqlMappingConfig配置文件
    InputStream resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig");
    //3、创建SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
    //4、创建SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //5、执行sql查询
    //参数queryAll为Mapping.xml的statement的id
    List<Customer> customerList=sqlSession.selectList("queryByName","%四%");
    //6、打印结果
    for (Customer customer:customerList) {
        System.out.println(customer);
    }
    //7、关闭连接,释放资源
    sqlSession.close();
}

运行结果

  • #{}与${}的区别

#{}:

  1. 表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值
  2. 自动进行Java类型和jdbc类型转换
  3. #{}可以有效防止sql注入
  4. #{}可以接收简单类型值或pojo属性值
  5. 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称

${}:

  1. 表示拼接sql串
  2. 通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换
  3. ${}可以接收简单类型值或pojo属性值
  4. 如果parameterType传输单个简单类型值,${}括号中只能是value

  • sql语句详解
  1. parameterType:指定输入参数类型,Mybatis通过ognl从输入对象中获取参数值拼接在sql中
  2. resultType: 指定输出结果类型,Mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象,如果有多条数据,则分别进行映射,并把对象放到List容器中
  3. selectOne:查询一条记录,如果查询结果有多条记录则会抛出异常
  4. selectList:查询一条或多条记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值