(10)Spring框架——MyBatis的学习之动态SQL

目录

一、描述

1、准备工作

2、总体思路

3、我出现的问题

二、步骤

1、根据项目结构建包,建类。

2、外部引入文件

三、实例

1、区别


一、描述

1、准备工作

(1)环境配置——相互作用

a.其中mybatis-config.xml(配置数据源和mapper.xml实体类的地方)这个是核心的文件,他申明了每个mapper.xml文件的位置(我的理解是这个就是把一个类的实例化对象交给mybatis管理)。

b.他能把db.properties(它是配置数据库信息得。如:username,password。官方语言称为:数据源)这种类似的文件集成起来。

c.log4j.properties日志记录,作用:就是把信息输出到控制台。

(2)导入jar包

(3)项目目录结构

2、总体思路

a.通过下载MyBatis框架,把jar包导入。编写MyBatis的配置文件,名称为:mybatis-config.xml,目前我学到的作用(配置数据库,配置XML的路径。)

b.这次学习主要是引入了:动态SQL,它是写在XXXmapper.xml里面的,他的一个重要的属性就是test,这个属性可以进行非空判断,如果传入参数,那么就会根据你写的动态SQL语句执行。

3、我出现的问题

a.开始的时候我配置环境的时候出现很大问题,一直报错。解决办法:一个模块一个模块的试。把以前成功的地方移植过来,找出错误的地方。最后发现是配置mapper.xml的扫描方式配置成了包扫描,百度出来的结果是,XML不支持这种扫描模式。基于注解的方法才能配置包扫描。我也没去深究。

二、步骤

1、根据项目结构建包,建类。

a.实体类:Customer

package com.stx.po;

public class Customer {

    private Integer id;//主键
    private String username;//客户名称
    private String jobs;//职业
    private String phone;//电话

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getJobs() {
        return jobs;
    }

    public void setJobs(String jobs) {
        this.jobs = jobs;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", jobs='" + jobs + '\'' +
                ", phone='" + phone + '\'' +
                '}';
    }
}

 

b.CustomerMapper.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">
<!--!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
        1、这一段是MyBatis的约束配置。
        -->
<!--2、以下是映射信息-->
<!--
动态SQL的元素。如果写了动态SQL传递了参数就会进行判断。否则就会只执行SQL语句,不会执行动态SQL。
-->
<mapper namespace="com.stx.mapper.CustomerMapper">
   <select id="findCustomerByNameAndJobs" parameterType="com.stx.po.Customer" resultType="com.stx.po.Customer">
       select * from t_customer where 1=1
       <if test="username !=null and username !=''" >
       and username like concat('%',#{username},'%')
       </if>
       <if test="jobs !=null and jobs!=''">
           and jobs= #{jobs}
       </if>
   </select>
</mapper>

c。测试类MyBatisTest

package com.stx.test;

import com.stx.po.Customer;
import com.stx.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyBatisTest {
    /*
    * 根据客户姓名和职业组合条件查询客户信息表
    * */
    @Test
    public void findCustomerByIdTest() throws Exception{
        SqlSession sqlSession = MybatisUtils.getSession();
        Customer customer = new Customer();
        customer.setUsername("jack");
        customer.setJobs("teacher");
        List<Customer> customers = sqlSession.selectList("com.stx.mapper.CustomerMapper.findCustomerByNameAndJobs",customer);
        for (Customer customer1 : customers){
            System.out.println(customer1);
        }
//        关闭SqlSession
        sqlSession.close();
    }
}

d。工具类:MybatisUtils

package com.stx.utils;

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 java.io.Reader;


public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory =null;
//    初始化SqlSessionFactory对象
    static {
    try {
//        使用MyBatis提供的Resources类加载MyBatis是配置文件
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//        构建SqlSessionFactory工厂
        sqlSessionFactory =new SqlSessionFactoryBuilder().build(reader);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
//获取SqlSession对象的静态方法。

    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}

2、外部引入文件

1、mybatis-config.xml

<?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>
  <!--  &lt;!&ndash;    3.外部引入方法&ndash;&gt;-->
    <properties resource="db.properties"></properties>
    <!--    1.配置环境,默认的环境id为mysql-->
    <environments default="mysql">
        <!--        1.2.配置id为mysql的数据库环境-->
        <environment id="mysql">
            <!--            使用JDBC的事务管理器。-->
            <transactionManager type="JDBC"></transactionManager>
            <!--            数据库连接池-->
<!--            <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="123456"/>-->
<!--            </dataSource>-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--    2.配置Mapper的位置。-->
    <mappers>
        <mapper resource="com/stx/mapper/CustomerMapper.xml"></mapper>
    </mappers>
</configuration>

2、db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=123456

3、log4j.properties

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.stx=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
#这个日志文件的主要目的是为了在:控制台输出Sql语句。作用是:输出日志信息。

三、实例

1、区别

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值