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 ...
随机推荐
- Linux之tmux学习
Linux之tmux学习 前言 在Linux的世界中,命令行是最优雅的交互方式. 但是,只会使用一个交互终端的程序员,是不足以成为Linux下的大牛的. 那么tmux是什么,引用一下原文介绍 tmux ...
- linux命令之 tar
参数 -c 创建新归档 -d 比较归档和文件系统的差异 -r 追加文件到归档 -t 存档的内容列表 -x 提取归档所有文件 -C 改变解压目录 -f 使用归档文件或设备归档 -j bzip2 压缩 - ...
- appium+python自动化56-微信小程序自动化(摩拜为例)
前言 最近微信的小程序越来越多了,随之带来的问题是:小程序如何做自动化测试? 本篇以摩拜小程序为例,介绍如何定位小程序里面的元素 运行环境: android 7.0 appium v1.7.1 web ...
- springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback
springboot打包时,去掉资源文件 <build> <resources> <resource> <directory>src/main/reso ...
- MySql 建表出现的问题:[ERR] 1064 - You have an error in your SQL syntax; check the manual.......
使用 MySql 建表出现的问题 在使用 Navicat Premium 运行 sql 语句进行建表时,MySQL 报错如下: 建表语句: DROP DATABASE IF EXISTS javawe ...
- centos 7 安装 MySQL 5.6
由于Centos7 默认数据库是mariabd,所以通过rpm安装MySQL需要卸载原有的Mariabd,再下载所有的依赖包比较麻烦且容易出错.通过yum的方式安装.yum其实是rpm的一个升级将所有 ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- Python从菜鸟到高手(7):字符串
1. 单引号字符串和转义符 字符串与数字一样,都是值,可以直接使用,在Python控制台中直接输入字符串,如"Hello World",会按原样输出该字符串,只不过用单引号括了 ...
- wtf_1234
好无聊啊,今天困的厉害. 不想做任何事情 wtf bitch!
- Python _内置函数3_45
reversed: #reversed() l = [1,2,3,4,5] l.reverse() print(l) #改变了原来的列表 l = [1,2,3,4,5] l2 = reversed(l ...