本文说明如何使用Mybatis执行我自定义输入的SQL语句。

需要的mybaits文件包括:配置文件(mybatis-config-dao.xml 和 jdbc.properties)、接口文件(ISqlMapper.class)、xml文件 (sqlMapper.xml)、工具类(MybatisUtils.class)。

依赖包:

         <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>

mybatis配置文件:

mybatis-config-dao.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>
<!--从外部配置文件导入jdbc信息-->
<properties resource="config/jdbc.properties"></properties> <environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments> <!--指定映射资源文件-->
<mappers>
<mapper resource="mapper/shelby/userMapper.xml"/>
<mapper resource="mapper/shelby/sqlMapper.xml"/>
</mappers> </configuration>

jdbc.properties

# jdbc连接信息
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://10.15.1.232:3306/maserati_x??zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=utf-8
username=root
password=

接口文件 ISqlMapper.class

 package testTraffic.mapper.shelby;

 import java.util.List;
import java.util.Map; public interface ISqlMapper { Integer insert(String statement); Integer delete(String statement); Integer update(String statement); List<Map<String, Object>> selectList(String statement); String selectOne(String statement);
}

sqlMapper.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"> <mapper namespace="testTraffic.mapper.shelby.ISqlMapper">
<insert id="insert" parameterType="java.lang.String">
${value}
</insert> <select id="selectList" parameterType="java.lang.String" resultType="java.util.HashMap" useCache="false">
${value}
</select> <select id="selectOne" parameterType="java.lang.String" resultType="java.lang.String" useCache="false">
${value}
</select> <delete id="delete" parameterType="java.lang.String">
${value}
</delete> <update id="update" parameterType="java.lang.String">
${value}
</update> </mapper>

测试代码:

 package testTraffic.testDemo;

 import org.apache.ibatis.session.SqlSession;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
import testTraffic.mapper.shelby.ISqlMapper;
import testTraffic.mapper.shelby.UserMapper;
import testTraffic.utils.MybatisUtils; import java.util.List; /**
* @Auther:GongXingRui
* @Date:2019/1/24
* @Description:
**/
public class TestMybatisDemo {
private static Logger logger = LogManager.getLogger(TestMybatisDemo.class); // 直接执行SQL语句
@Test
public void testMybatisSelectOne() {
String sql = "select user_name from t_admin_user where id = 2";
ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class);
String name = sqlMapper.selectOne(sql);
logger.info(name);
} // 多个查询
@Test
public void testMybatisSelectList() {
String sql = "select user_name from t_admin_user";
ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class);
List list = sqlMapper.selectList(sql);
logger.info(list);
} // 删除与插入
@Test
public void testMybatisDeleteInsert() {
ISqlMapper sqlMapper = MybatisUtils.getMapper(ISqlMapper.class); String deleteSql = "delete from t_admin_user WHERE user_name = 'testuser';";
String insertSql = "insert into `t_admin_user` (`id`, `user_name`, `user_password`, `del_flag`, `create_time`, `update_time`) VALUES( null,'testuser','testuser123','0','2019-01-21 19:43:58','2019-01-22 19:44:03');";
int n = sqlMapper.delete(deleteSql);
logger.info("删除数据:" + n);
n = sqlMapper.insert(insertSql);
logger.info("插入数据:" + n);
// MybatisUtils.getSession().commit();
} }

自己封装的Mybatis工具类(MybatisUtils.class)

 package testTraffic.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.IOException;
import java.io.InputStream; /**
* @Description: 生成mybatis的session对象
**/
public class MybatisUtils {
private static String resource = "config/mybatis-config-dao.xml";
private static SqlSessionFactory sqlSessionFactory = null;
private static SqlSession session = null; private static void init() {
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建工厂
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 创建session对象
session = sqlSessionFactory.openSession(true);
} catch (IOException e) {
e.printStackTrace();
}
} public static SqlSession getSession() {
if (session == null) {
init();
}
return session;
} public static void close() {
if (session != null) {
session.close();
session = null;
}
} public static <T> T getMapper(Class<T> tClass) {
if (session == null) {
init();
}
return session.getMapper(tClass);
} public static void commit() {
if (session != null) {
session.commit();
}
} }
												

Mybatis之执行自定义SQL举例的更多相关文章

  1. SpringBoot Mybatis 执行自定义SQL

    1.XML中执行自定义SQL. https://blog.csdn.net/u012427355/article/details/80654806 2.注解执行自定义SQL @Select(" ...

  2. django不定义model,直接执行自定义SQL

    如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cur ...

  3. Python Django 之 直接执行自定义SQL语句(二)

    转载自:https://my.oschina.net/liuyuantao/blog/712189 一般来说,最好用 Django 自带的模型来实现这些操作.这里仅仅只是为了学习使用原始 SQL 而做 ...

  4. Python Django 之 直接执行自定义SQL语句(一)

    一.执行自定义SQL方法 1.Executing custom SQL directly      直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manage ...

  5. EntityFramework 4/5/6 中执行自定义SQL语句

    参考:http://www.cnblogs.com/chengxiaohui/articles/2092001.html 在EF4(.NET  4)中,我们有了全新的API:ObjectContext ...

  6. MYSQL可调用执行自定义SQL的代码

    DELIMITER $$ USE `mysql_wispeed01`$$ DROP PROCEDURE IF EXISTS `sp_execSQL`$$ CREATE DEFINER=`sa`@`%` ...

  7. MyBatis输出执行的SQL到控制台

    src\main\resources\application.properties 或者src\main\resources\application.yml 在你的application.proper ...

  8. thinkjs中自定义sql语句

    一直以为在使用thinkjs时,只能是它自带的sql语句查询,当遇到类似于这样的sql语句时,却不知道这该怎样来写程序,殊不知原来thinkjs可以执行自定义sql语句 SELECT * from a ...

  9. django 执行原始SQL

    二.知识点总结 When the model query APIs don’t go far enough, you can fall back to writing raw SQL. go far ...

随机推荐

  1. 异常:NoNodeAvailableException

    现象 1.启动时候出现 node null not part of the cluster Cluster [********], ignoring... 2.启动时正常,但是请求时出现 NoNode ...

  2. 在.NET中调用Java的类

    .NET不能直接调用Java的类,但IKVM.NET解决了这个问题. IKVM.NET提供了两种方式调用java的类: ①把生成的jar包放置在程序根目录,然后通过创建URL实例的方式去调用类中的方法 ...

  3. Scala学习(九)练习

    文件正则表达式&练习 1. 编写一小段Scala代码,将某个文件中的行倒转顺序,将最后一行作为第一行,依此类推 程序代码: import scala.io.Source import java ...

  4. Grafana+Telegraf+Influxdb监控Tomcat集群方案

    前言 前一段时间自家养的几只猫经常出问题,由于没有有效的监控预警手段,以至于问题出现或者许久一段时间才会被通知到.凌晨一点这个锅可谁都不想背,为此基于目前的情况搭建了以下这么一套监控预警系统. 相关软 ...

  5. Js获取当前页面URL各种参数

    JS获取当前页面URL各种参数 一:Location Location 对象包含有关当前 URL 的信息. Location 对象是 Window 对象的一个部分,可通过 window.locatio ...

  6. wtf_1234

    好无聊啊,今天困的厉害. 不想做任何事情 wtf bitch!

  7. filebeat 源码编译安装

    下载filebeat源码(6.2.3)下载地址:链接: https://pan.baidu.com/s/1cPR7-xlQJuYZ77uaUpfSpQ 提取码: k77u github下载地址:htt ...

  8. python中Metaclass的理解

    今天在学习<python3爬虫开发实战>中看到这样一段代码3 class ProxyMetaclass(type): def __new__(cls, name, bases, attrs ...

  9. 原生jS之-去掉字符串开头和结尾的空字符

    怎么解决这个问题?? 思路就是我们利用正则匹配到所谓的空格,然后替换为空字符,我们要用到的是str的replace API 代码如下: <!DOCTYPE html> <html l ...

  10. C#对摄像头的操作示例,采用Aforge库

    操作摄像头有三个办法:VFW.DirectShow.花钱买第三方控件 VFW技术比较古老,无法解决驱动不完善造成的某些问题 DirectShow技术相对完善一些,但这是C++才能实现的技术.如果用.N ...