zoukankan      html  css  js  c++  java
  • 使用<bind>元素创建变量

    在使用模糊查询sql时,如果使用${}进行字符拼接,无法防止sql诸如问题,如果使用concat函数则只对mysql有效果,用Oracle则需要用连接符||,这样在数据库变的时候需要修改,不利于移植。mybatis提供元素<bind>很好能解决这个问题。

    项目结构:

    废话不说,使用maven管理jar,如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.example</groupId>
      <artifactId>maven</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>maven</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
       <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.2</version>
        </dependency>
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.4.2</version>
        </dependency>
        <dependency>
          <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.40</version>
          </dependency>
      </dependencies>
    </project>

    mybatis配置如下:

    <?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="resoures/db.properties" />
        <!--1.配置环境 ,默认的环境id为mysql -->
        <environments default="mysql">
            <!--1.2.配置id为mysql的数据库环境 -->
            <environment id="mysql">
                <!-- 使用JDBC的事务管理 -->
                <transactionManager type="JDBC" />
                <!--数据库连接池 -->
                <dataSource type="POOLED">
                    <!-- 数据库驱动 -->
                    <property name="driver" value="${jdbc.driver}" />
                    <!-- 连接数据库的url -->
                    <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/example/test/mybatis/mapper/UserMapper.xml" />
        </mappers>
    </configuration>

    数据库配置:

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

    PS:注意配置文件的位置!

    三种方法实现:

    数据库表格结构

    javabean

    package com.example.test.mybatis;
    
    public class User {
        
        private String name;
        private String sex;
        private int age;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "User [name=" + name + ", sex=" + sex + ", age=" + age + "]";
        }
        
    }

    session工具类:

    package com.example.test.mybatis;
    
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class MybatisUtils {
        
        private static SqlSessionFactory sqlSessionFactory = null;
        // 初始化SqlSessionFactory对象
        static {
            try {
                // 使用MyBatis提供的Resources类加载mybatis的配置文件
                Reader reader = 
                        Resources.getResourceAsReader("resoures/mybatis-config.xml");
                // 构建sqlSession的工厂
                sqlSessionFactory = 
                        new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 获取SqlSession对象的静态方法
        public static SqlSession getSession() {
            return sqlSessionFactory.openSession();
        }
    
    }

    mapper文件

    方法一:_parameter.getName()传参,注意参数类型为javabean User

    <?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="com.example.test.mybatis.mapper.UserMapper">
    
       <select id="findUserByName" parameterType="com.example.test.mybatis.User"
            resultType="com.example.test.mybatis.User">
            <!--_parameter.getUsername()也可直接写成传入的字段属性名,即username -->
            <bind name="pattern" value="'%'+_parameter.getName()+'%'" />
            select * from user
            where
            name like #{pattern}
        </select>
    
    </mapper>

    测试方式:

    package com.example.test.mybatis;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    public class MybatisTest {
        public static void main(String[] args) {
            SqlSession session = MybatisUtils.getSession();
            User user = new User();
            user.setName("s");
            
            List<User> list = session.selectList("com.example.test.mybatis.mapper.UserMapper.findUserByName",user);
            for (User u : list) {
                System.out.println(u);
            }
            session.close();
        }
    
    }

    测试结果:User [name=as, sex=男, age=1]

    方法二:直接使用_parameter传参,注意传入的参数类型是String name

    <?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="com.example.test.mybatis.mapper.UserMapper">
    
        <select id="findUserByStrName" parameterType="String"
            resultType="com.example.test.mybatis.User">
            <!--_parameter.getUsername()也可直接写成传入的字段属性名,即username -->
            <bind name="username" value="'%'+_parameter+'%'" />
            select * from user
            where
            name like #{username}
        </select>
       
    </mapper>

    对应测试方法:

    package com.example.test.mybatis;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    public class MybatisTest {
        public static void main(String[] args) {
            SqlSession session = MybatisUtils.getSession();  
            String name = "aa";  
            
            List<User> list = session.selectList("com.example.test.mybatis.mapper.UserMapper.findUserByStrName",name);
            for (User u : list) {
                System.out.println(u);
            }
            session.close();
        }
    
    }
    测试结果:

    User [name=aa, sex=男, age=10]
    User [name=aaad, sex=男, age=11]

    
    

    方法三:直接用javabean的属性传参,注意参数类型是javabean User

    <?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="com.example.test.mybatis.mapper.UserMapper">
    
       <select id="findUserByParameterName" parameterType="com.example.test.mybatis.User"
            resultType="com.example.test.mybatis.User">
            <!--_parameter.getUsername()也可直接写成传入的字段属性名,即name -->
            <bind name="username" value="'%'+name+'%'" />
            select * from user
            where
            name like #{username}
        </select>
        
    </mapper>
    package com.example.test.mybatis;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    public class MybatisTest {
        public static void main(String[] args) {
            SqlSession session = MybatisUtils.getSession();
            User user = new User();
            user.setName("aa");
            List<User> list = session.selectList("com.example.test.mybatis.mapper.UserMapper.findUserByParameterName",user);
            for (User u : list) {
                System.out.println(u);
            }
            session.close();
        }
        
    
    }

    测试结果:
    
    

    User [name=aa, sex=男, age=10]
    User [name=aaad, sex=男, age=11]

     
  • 相关阅读:
    JavaScript Array filter() 方法
    Object.assign方法的使用入门
    使用ES6新特性async await进行异步处理
    win10系统怎么设置软件开机启动
    【ES6学习笔记之】Object.assign()高级编程
    如何使用闭包形成计数器
    多次调用settimeout 如何使用单例模式
    在线表单设计器现在已经开源
    VisualStudio2017集成GitHub
    PHP使用curl替代file_get_contents
  • 原文地址:https://www.cnblogs.com/iyyy/p/8028323.html
Copyright © 2011-2022 走看看