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 ...
随机推荐
- 腾讯app自动化测试读后感
1.播放器播放视频,如何验证视频播放成功? 1.1播放时间>=0,获取Video标签里的current time判断. 1.2有播放画面,截屏获取. 框架自带的截图功能, 1.3有播放声音,获取 ...
- Debian 8.9 搭建wordpress个人博客
想自己搭个博客玩玩,就搭建了此博客,过程可谓艰辛啊! 先在阿里云买了个 轻量应用服务器 1个月10块钱,好贵.... 用 windows sever 下载不了phpstudy,也不知道怎么回事... ...
- 给大家推荐一个C#下文件监听器和资源管理器的示例Demo-含源码
C#下文件监听器和资源管理器的示例Demo:源码下载地址
- Mybatis学习总结(五)——动态sql
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
- face recognition[Euclidean-distance-based loss][FaceNet]
本文来自<FaceNet: A Unified Embedding for Face Recognition and Clustering>.时间线为2015年6月.是谷歌的作品. 0 引 ...
- Maven项目运行Junit测试用例 出现ClassNotFound
Maven 打包命令 clean package 会清空target下的目录 包含 test-classes 目录 这样执行junit的时候,会出现 ClassNotFound的错误 执行下面的命令即 ...
- FineUIMvc v1.4.0 发布了(ASP.NET MVC控件库)!
FineUIMvc v1.4.0 已经于 2017-06-30 发布,FineUIMvc 是基于 jQuery 的专业 ASP.NET MVC 控件库,是我们的新产品.由于和 FineUI(专业版)共 ...
- 2018年JavaScript现状报告
前言 JavaScript(后面统称JS)在过去五年得到飞速地增长,早期JS实现类似微博的“点赞”这样的功能都需要刷新一次页面. 后来开发者通过JS来制作SPA(单页面应用程序),在浏览器加载一次,后 ...
- .NET 框架 Microsoft .NET Framework (更新至.NET Framework4.8)
https://dotnet.microsoft.com/download/dotnet-framework 产品名称 离线安装包 .NET Framework 4.8 点击下载 .NET Frame ...
- webpack打包经验——处理打包文件体积过大的问题
前言 最近对一个比较老的公司项目做了一次优化,处理的主要是webpack打包文件体积过大的问题. 这里就写一下对于webpack打包优化的一些经验. 主要分为以下几个方面: 去掉开发环境下的配置 Ex ...