mybatis动态Sql语句

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL可以彻底摆脱这种痛苦。

if
choose (when, otherwise)
trim (where, set)
foreach
因此mybatis提供了四大类标签解决动态SQL语句问题,mybatis又一个强大的核心特性。

这是mybatis动态Sql语句需要使用的包剩下的几个在上一篇博客有提示这里就不过多演示。

 第一步还是要先构造方法

第二步连接数据库

<?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>
    <properties resource="jdbc.properties"/>

    <settings>
        <setting name="logImpl" value="log4j"/>
    </settings>

    <typeAliases>
        <package name="com.zhang.bean"/>
    </typeAliases>
    <!--配置环境信息===就是配置连接数据库的参数
    default:指定配置的环境信息的id,表示默认连接该环境
    -->
    <environments default="mysql">
        <environment id="mysql">
            <!--配置事务的处理方式:模式使用JDBC的事务处理-->
            <transactionManager type="jdbc"></transactionManager>
            <!--数据源的默认type设置为pooled,表示使用连接池-->
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
        <environment id="oracle">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>
    <!--加载mapper配置文件-->
    <mappers>
        <mapper class="com.zhang.dao.UserDao" />
    </mappers>
</configuration>

 第三步创造接口定义构造方法

 第四步动态Sql语句

MyBatis 的一个强大的特性之一通常是它的动态 SQL 能力。 如果你有使用JDBC 或其他 相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么 的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态 SQL 可以彻底处理 这种痛苦。

Mybatis实现动态sql的关键字有:

1.if where
<if>标签会对传入的条件进行判断 ,如果满足条件,就将if标签中的sql语句与前面的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">
<!--namespace:把配置文件和接口进行映射-->
<mapper namespace="com.zhang.dao.UserDao">
    <!--通过select标签进行查询
    id:映射接口的方法名
    parameterType:指定参数的类型(如果是集合类型只需要指定集合元素的类型即可)
    resultType:指定返回值的类型
    -->
    <!--查询-->
    <select id="seach" parameterType="user" resultType="user">
        select * from emp where 1=1
        <if test="ename != null and ename !=''">
            and ename like concat('%',#{ename},'%')
        </if>
       <if test="address!= null and address !=''">
           and address like concat('%',#{address},'%')
       </if>
    </select>
</mapper>

第五步通过代理对象执行查询方法

 输入想要查询的信息条件例如:seach.setDept("测试部");

@Test
    public void testSeach(){
        User seach=new User();
        seach.setAddress("信阳");

        List<User> userList = userDao.seach(seach);
        for (User user : userList) {
            System.out.println(user);
        }
    }

jdbc操作

 

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/mydb
jdbc.username=root
jdbc.password=root

 

log4j.rootLogger=TRACE,stdout  

log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout   


log4j.appender.logfile=org.apache.log4j.FileAppender   
log4j.appender.logfile.File=wocao.log   
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout   
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n   
log4j.logger.mapperNS =TRACE

log4j.logger.com.mybatis=DEBUG  
log4j.logger.com.mybatis.common.jdbc.SimpleDataSource=DEBUG   
log4j.logger.com.mybatis.common.jdbc.ScriptRunner=DEBUG   
log4j.logger.com.mybatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG   
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG  
log4j.logger.java.sql.ResultSet=DEBUG  

log4j.logger.org.springframework=error 
log4j.logger.org.apache=ERROR  
log4j.logger.org.mybatis=DEBUG 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值