Mybatis之执行自定义SQL举例
本文说明如何使用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&useUnicode=true&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举例的更多相关文章
- SpringBoot Mybatis 执行自定义SQL
1.XML中执行自定义SQL. https://blog.csdn.net/u012427355/article/details/80654806 2.注解执行自定义SQL @Select(" ...
- django不定义model,直接执行自定义SQL
如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cur ...
- Python Django 之 直接执行自定义SQL语句(二)
转载自:https://my.oschina.net/liuyuantao/blog/712189 一般来说,最好用 Django 自带的模型来实现这些操作.这里仅仅只是为了学习使用原始 SQL 而做 ...
- Python Django 之 直接执行自定义SQL语句(一)
一.执行自定义SQL方法 1.Executing custom SQL directly 直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manage ...
- EntityFramework 4/5/6 中执行自定义SQL语句
参考:http://www.cnblogs.com/chengxiaohui/articles/2092001.html 在EF4(.NET 4)中,我们有了全新的API:ObjectContext ...
- MYSQL可调用执行自定义SQL的代码
DELIMITER $$ USE `mysql_wispeed01`$$ DROP PROCEDURE IF EXISTS `sp_execSQL`$$ CREATE DEFINER=`sa`@`%` ...
- MyBatis输出执行的SQL到控制台
src\main\resources\application.properties 或者src\main\resources\application.yml 在你的application.proper ...
- thinkjs中自定义sql语句
一直以为在使用thinkjs时,只能是它自带的sql语句查询,当遇到类似于这样的sql语句时,却不知道这该怎样来写程序,殊不知原来thinkjs可以执行自定义sql语句 SELECT * from a ...
- django 执行原始SQL
二.知识点总结 When the model query APIs don’t go far enough, you can fall back to writing raw SQL. go far ...
随机推荐
- 吴恩达课后作业学习1-week4-homework-multi-hidden-layer -2
参考:https://blog.csdn.net/u013733326/article/details/79767169 希望大家直接到上面的网址去查看代码,下面是本人的笔记 实现多层神经网络 1.准 ...
- 操作循环的关键字switch,break,return的应用及区别
break 使用break结束循环 break可以终止循环 和 switch语句的运行; break用于结束一个循环,即跳出循环体,执行循环体之后的代码: switch 使用continue提前结束 ...
- Linux内核入门到放弃-内存管理-《深入Linux内核架构》笔记
概述 内存管理的实现涵盖了许多领域: 内存中的物理内存页管理 分配大块内存的伙伴系统 分配较小内存块的slab.slub和slob分配器 分配非连续内存块的vmalloc机制 进程的地址空间 在IA- ...
- 20175330 2018-2019-2 《Java程序设计》第八周学习总结
# **教材学习内容总结### 本周学习<Java程序设计>第十五章:*** 泛型: 泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构.泛型类 ...
- 微信小程序大型系统架构中应用Redis缓存要点
在大型分布式系统架构中,必须选择适合的缓存技术以应对高并发,实现系统相应的高性能,酷客多小程序经过慎重选型,选择了采用基于腾讯云服务的Redis弹性缓存技术,结合Redis官方推荐的.NET驱动类库S ...
- DAG也许是真正的区块链3.0
从15年开始,区块链概念被单拎出来,这之前区块链还只是比特币技术里的一个数据结构,中本村白皮书里把block和chain连一起的时候也只是a chain of blocks .随着以太坊去中心化计算机 ...
- Ext 编辑 comobox编辑源只能选择一个
storePrType.DataSource = optsvc.Select("28").Where(r => r.OptionID == cmbEngineeringPrT ...
- Scala学习(九)练习
文件正则表达式&练习 1. 编写一小段Scala代码,将某个文件中的行倒转顺序,将最后一行作为第一行,依此类推 程序代码: import scala.io.Source import java ...
- .net排坑篇:负载均衡域名转发的背后
背景 昨天因客户私有部署问题,需要到客户公司去排查问题. 他们是一家外企,各种权限需要提前申请(最大的坑).他们之前部署的一般为单域名,很少部署互联网类型多个域名的情形(第二个坑).这次私有部署总计使 ...
- HAProxy 参数配置
RabbitMQ集群部署完成,通过HAProxy反向代理来提供统一的对RabbitMQ的访问入口. 1.Haproxy提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理.(负载均衡策略有很 ...