在使用模糊查询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]

 

使用<bind>元素创建变量的更多相关文章

  1. Robotframework(4):创建变量的类型和使用

    转载:http://www.cnblogs.com/CCGGAAG/p/7800321.html 实际的测试过程中,编写脚本时,我们需要创建一些变量来暂时或者永久性的存储数据,那么在Robotfram ...

  2. js 动态创建变量

      js 动态创建变量 CreationTime--2018年7月2日15点04分 Author:Marydon 1.实现方式 通过eval()实现 2.代码实现 /** * 声明一个函数 * @ex ...

  3. TensorFlow创建变量

    1 使用tf.Variable函数创建变量 tf.Variable(initial_value=None,trainable=True,collections=None,validate_shape= ...

  4. JQ DOM元素 创建 添加 删除

    创建元素 // 创建元素节点 $('<p></p>'); // 创建属性节点 $('<p class="wow"></p>'); / ...

  5. PYTHON 100days学习笔记002:语言元素-数字变量与运算符

    参考文章: Python 变量类型 Python 运算符 Day02 - 语言元素 1. 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备.其中,运算器 ...

  6. js,javascript,删除元素,创建元素,插入子元素

    删除元素示例代码 <html> <head> </head> <body> <div> <div id="delId&quo ...

  7. matlab学习创建变量定义函数

    定义变量a,b,c,计算输出d >> a=-3;b=2;c=5;>> d=(a^2+b)/c;>> d=(a^2+b)/c d = 2.2000 系统默认变量  a ...

  8. python 动态创建变量 获取变量名

    参考链接:https://www.cnblogs.com/technologylife/p/9211324.html 参考链接(未)(使用inspect 获取变量名):https://blog.csd ...

  9. 13.利用pymysql创建变量类型的表名解说

    在练习爬虫爬取数据时,想将爬取的数据用pymysql存储到数据库中,并且存储时的表名是一个变量,但在写完代码运行后经常出面1064的错误代码,在网上查找相关解决方法,但一直找不到完美的解决方法, 通过 ...

随机推荐

  1. SQLException: #22001你知道这个错误码吗

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! java.sql.SQLException: #22001 java.sql.SQLException: #22001 a ...

  2. python简答

    解释 GIL 全局解释器锁 def func(*args): for i in args: print(i) func(3,2,1,4,7) 在我们不知道该传递多少关键字参数时,使用**kwargs ...

  3. http、tcp简述

     网络简述第一章   http.tcp简述 一.网络7层协议从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 : 其中高层(即7.6.5.4层)定 ...

  4. LeetCode:184.部门工资最高的员工

    题目链接:https://leetcode-cn.com/problems/department-highest-salary/ 题目 Employee 表包含所有员工信息,每个员工有其对应的 Id, ...

  5. ember server禁用Livereload server on http://localhost:49152

    ember server --live-reload=false

  6. 数据库 master拒绝了 create database 权限

    1.通过windows身份验证方式登录 2.为登录名赋予服务器角色权限,其中dbcreator权限表示允许新增和修改权限,sysadmin权限是管理员权限,包含dbcreator范围,若不追求权限精准 ...

  7. Oracle创建索引;查询索引

    1.创建索引 create index 索引名 on 表名(列名); 2.删除索引 drop index 索引名; 3.创建组合索引 create index 索引名 on 表名(列名1,,列名2); ...

  8. linux操作系统中的常用命令以及快捷键(一)

    接触了linux系统一年,总结一些常用的命令,快捷键等一些尝试 1.首先查看linux内核数量,常用于编译源码包时 用 make -j 来指定内核数来编译 grep ^processor /proc/ ...

  9. Centos使用光盘yum源

    yum查看所有源 yum repolist all 方法一:本机使用光盘源安装软件的设置 mkdir /media/cdrom mount /dev/cdrom  /media/cdrom vim / ...

  10. CentOS7 基于 subversion 配置 SVN server

    由于 Window Server 环境下,VisualSVN Server Community 版本只支持 15 个同时在线用户,所以彻底放弃 Windows Server,在 Linux Serve ...