mybatis的mapper⽂件中的⼀个标签是否可以写多条SQL语句?是否存在事物?本⽂⽬录
mybatis的mapper⽂件中的⼀个标签是否可以写多条SQL语句?是否存在事物?
这篇博⽂的由来,朋友⾯试遇到两个问题?
第⼀个问题是mybatis的mapper⽂件中的⼀个标签是否可以写多条SQL语句?
第⼆个问题是上述问题如果成⽴,那么这个标签内是否存在事物?
数据库事物的四⼤特性
回顾知识:
ACID
原⼦性、⼀致性、隔离性、持久性
问题答案
第⼀问题:mybatis的mapper⽂件中的⼀个标签可以写多条SQL语句
第⼆问题:标签中不存在事物
验证答案
⼀、创建数据库表
Create Table
CREATE TABLE`test`(
`id`int(11)NOT NULL AUTO_INCREMENT,
js charat方法`name`varchar(10)DEFAULT NULL,
`age`int(3)DEFAULT NULL,
PRIMARY KEY(`id`)
)ENGINE=InnoDB AUTO_INCREMENT=20DEFAULT CHARSET=utf8mb4
⼆、搭建SpringBoot+Mybatis项⽬(略)
数据库配置:
默认的数据库连接配置基本上都是如下的:
url: jdbc:mysql://XXX.XXX.XXX.XXX:XXX/XXXX
这样默认是不能实现mybatis的mapper⽂件中的⼀个标签可以写多条SQL语句的,会报异常:
Error updating database. Cause: ptions.jdbc4.MySQLSyntaxErrorException:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
如果遇到上述异常我们可以通过对数据库连接的URL添加参数,从⽽实现可以执⾏多条SQL语句的功能。
url: jdbc:mysql://XXX.XXX.XXX.XXX:XXX/XXXX?allowMultiQueries=true
三、编写MVC三层代码
MyTest.java
mysql面试题csdn
package com.ity;
import lombok.Data;
/**
* @author: shaofeer
* <p>
* @qq: 337081267
* <p>
* @CSDN: blog.csdn/pyfysf
* <p>
* @blog: p
* <p>
* @email: shaofeer@163
* <p>
* @time: 2020/5/9
*/
@Data
public class MyTest {
private Integer id;
private String name;
private Integer age;
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.dule.mapper.MyTestMapper">
<!--下⾯这个语句是正确的为了测试是否可以同时执⾏多条SQL-->
<select id="selectBatchSql">
INSERT INTO  `test` ( `name`, `age`)
VALUES
( 'shaofeer', 10);
INSERT INTO  `test` (`name`, `age`)
VALUES
( 'pyfysf', '20');
INSERT INTO  `test` (`name`, `age`)
VALUES
('upuptop', 10);
</select>
<!--下⾯这个语句是错误的为了测试是否存在事物-->
<delete id="deleteBatchSql">
INSERT INTO  `test` ( `name`, `age`)
VALUES
( 'shaofeer', 10);
INSERT INTO  `test` (`name`, `age`)
VALUES
( 'pyfysf', 'pyfysf');
INSERT INTO  `test` (`name`, `age`)
VALUES
('upuptop', 10);
</delete>
</mapper>
MyTestMapper.java
package com.dule.mapper; /**
* @author: shaofeer
* <p>
* @qq: 337081267
* <p>
* @CSDN: blog.csdn/pyfysf
* <p>
* @blog: p
* <p>
* @email: shaofeer@163
* <p>
* @time: 2020/5/9
*/
public interface MyTestMapper {
void selectBatchSql();
void deleteBatchSql();
}
MyTestService.java
package com.dule.service; /**
* @author: shaofeer
* <p>
* @qq: 337081267
* <p>
* @CSDN: blog.csdn/pyfysf
* <p>
* @blog: p
* <p>
* @email: shaofeer@163
* <p>
* @time: 2020/5/9
*/
public interface MyTestService {
void selectBatchSql();
void deleteBatchSql();
}
MyTestServiceImpl.java
package com.dule.serviceimpl;
import com.dule.mapper.MyTestMapper; import com.dule.service.MyTestService;
tar解压命令import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
/**
* @author: shaofeer
* <p>
* @qq: 337081267
* <p>
* @CSDN: blog.csdn/pyfysf
* <p>
北辰王庄菜市场规划* @blog: p
* <p>
* @email: shaofeer@163
* <p>
* @time: 2020/5/9
*/
@Service
public class MyTestServiceImpl implements MyTestService {
@Autowired
MyTestMapper mMyTestMapper;
@Override
public void selectBatchSql(){
mMyTestMapper.selectBatchSql();
}
@Override
public void deleteBatchSql(){
mMyTestMapper.deleteBatchSql();
}
}
MyTestController.java
package com.ller;
import com.dule.service.MyTestService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;
/**
* @author: shaofeer
* <p>
* @qq: 337081267
* <p>
* @CSDN: blog.csdn/pyfysf
* <p>
* @blog: p
* <p>
* @email: shaofeer@163
* <p>
* @time: 2020/5/9
*/
python用pip安装numpy
@RestController
@RequestMapping("/test")
public class MyTestController {
@Autowired
MyTestService mMyTestService;
@RequestMapping(value ="deleteBatchSql")
public String deleteBatchSql(){
mMyTestService.deleteBatchSql();
return"deleteBatchSql";
微商代理合同}
@RequestMapping(value ="selectBatchSql")
public String selectBatchSql(){
mMyTestService.selectBatchSql();
return"selectBatchSql";
}
}
四、启动服务器
1. 验证mapper单个标签可以执⾏多条SQL
浏览器中输⼊项⽬的访问地址,进⾏测试。
浏览器访问(因⼈⽽异):
查看数据库是否成功插⼊。
2. 验证mapper单个标签执⾏多条SQL时,不存在数据库事物
浏览器访问(因⼈⽽异):
我们会发现后端控制台报异常了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。