博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybaties的批量增删改查及普通增删改查
阅读量:6172 次
发布时间:2019-06-21

本文共 5033 字,大约阅读时间需要 16 分钟。

hot3.png

数据库:

create table school(    id int(11) not null auto_increment comment '主键',    name varchar(20) comment '学校名称',    address varchar(100) comment '学校地址',    create_time datatime comment '数据上传时间',    primary key (id))

实体类:

package com.test.entity;public class School{    private Integer id;//主键id    private String name;//学校名称    private String address//学校地址    private Date createTime//数据上传时间}

现在开始添加功能

mybaties: schooMapper.xml:

    
        
        
        
        
        
        name,address,create_time            
    
        insert into school (
)values(#{name},#{address},#{createTime})         

    下面的可以返回id,但是需要主键为自增(id在这儿要不要都可以)

    
        insert into school (id,
)values(#{id},#{name},#{address},#{createTime})    

这个第二种添加可以返回主键id的,好像是返回添加的最后一个id--不需要自增(这个不确切知道)

    
        insert into school (
)values(#{name},#{address},#{createTime})        
           SELECT LAST_INSERT_ID() AS VALUE            

--------现在开始批量添加

    
        insert into school (
)values       
           (#{l.name},#{l.address},#{l.createTime})           

java代码:

public int save(School test);public int saveReturnIdOne(School test);public int saveReturnIdTwo(School test); public void bathSave(List
 list);

现在开始删除功能

    
        delete from school where id=#{id}        
    
        delete from school where id in        
            #{l}                
        delete from school where id in (${id})    

java代码:

    public int deleteById(Integer list);    public int bathDelete(List
 list);    public int bathDeleteTwo(Map
id);

现在开始修改功能

        update school set name=#{name}, address=#{address}, create_time=#{createTime} where id=#{id,jdbcType=INTEGER}    
    
        update school        
            
                name=#{name},                        
                address=#{address},                        
                create_time=#{createTime}                    
        where id=#{id}        
    
        
            update school             
                
                    name=#{l.name},                                
                    address=#{l.address},                                
                    create_time=#{l.createTime}                            
             where id=#{l.id,jdbcType=INTEGER}                     

java代码:

public void update(TestEntity test);public void updateSet(TestEntity test);public void bathUpdate(List
 list);

现在开始查询功能(批量查询和删除的一样)

xml:

        select id,
 from school where id =#{id}
    select id,
 from school where address=#{address} limit #{begin},#{end}
        select id,
 from school where name like concat('%',#{name},'%')
        select group_concat(id) from school  where name like concat('%',#{name},'%')
        select id,
 from school        
            
                id=#{id}                        
                and name=#{name}                        
                and address=#{address}                        
                and create_time=#{createTime}                    

java代码:

public School getById(Integer id);public List
 getLimit(Map
 map);public List
 getLikeName(String name);public String getIdsLikeName(String name);public List
 getWhere(School test);

 

下面是从其它地方看到:

同时执行多条sql的办法:

 1、最简单的办法:在MySQL的连接字符串中设置allowMultiQueries参数置为true。(只有MySQL Connector/J 3.1.1以上版本才支持) 。例如:在jdbc下设置连接字符串的时候设成如下的形式:

      jdbc:mysql://192.168.3.180/sample?user=root&password=&allowMultiQueries=true就可以执行多条语句了
 在odbc下也是可以设置的,方法如下:
设置 ODBC -- 配置 --Detials -- Flags 3 -- 钩上 Allow multiple statements,这样就可以了。
结论:第一种方式最简单。
2、在程序中对SQL语句以分号拆分成多条SQL语句,然后使用Statement的addBatch方法,最后executeBatch就行。
希望对以后遇到此类问题的朋友有所帮助。

关于Statement的execute(String sql)语句能够同时执行多条SQL语句, 可以看MySQL自带的测试例子:

可查看testsuite.regression包下的ResultSetRegressionTest类:  这个可以查看:

 public class ResultSetRegressionTest extends BaseTestCase {        public void testBug33678() throws Exception {            if (!versionMeetsMinimum(4, 1)) {                return;            }            createTable("testBug33678", "(field1 INT)");            // allowMultiQueries=true设置            Connection multiConn = getConnectionWithProps("allowMultiQueries=true");            Statement multiStmt = multiConn.createStatement();            try {                multiStmt.setFetchSize(Integer.MIN_VALUE);                // 一次性执行多条SQL语句                multiStmt.execute("SELECT 1 UNION SELECT 2; INSERT INTO testBug33678 VALUES (1); UPDATE testBug33678 set field1=2; INSERT INTO testBug33678 VALUES(3); UPDATE testBug33678 set field1=2 WHERE field1=3; UPDATE testBug33678 set field1=2; SELECT 1");         // 以下代码省略...        }    }

 

 

还可以查看英文API   

 

转载于:https://my.oschina.net/u/2297250/blog/373296

你可能感兴趣的文章
学习 HTTP协议挺不错的一个类
查看>>
深入字节码 -- ASM 关键接口 MethodVisitor
查看>>
linux 文件权限
查看>>
Linux常用命令集合
查看>>
Oracle DML
查看>>
Linux - FHS文件系统层次标准
查看>>
报错:Invalid bound statement (not found)
查看>>
Linux GPT分区格式磁盘的相关操作
查看>>
通过Docker进程pid获取容器id
查看>>
L15.2 zabbix基础(2)组件说明介绍
查看>>
impdp 常见问题 10g/11g/12c 问题解决 ERIKXUE
查看>>
2013年1月工作小结 -- 上线后的懈怠
查看>>
敏捷宣言
查看>>
php Yii: 出现undefined offset 或者 undefined index解决方案
查看>>
Bash编程入门
查看>>
org.tinygroup.binarytree-二叉树
查看>>
5.6-全栈Java笔记:内部类的四种实现方式
查看>>
Linux微职位学习笔记-终端
查看>>
自己写了一个友盟推送的util
查看>>
Mapreduce 扫描hbase表建立solr索引
查看>>