zoukankan      html  css  js  c++  java
  • mybatis 动态添加表,查看表,添加数据

    1.动态添加表

    mapper

     int dropExistTable(@Param("tableName") String tableName);//自动创建数据表

     映射文件

       <update id="dropExistTable" parameterType="string" statementType="STATEMENT">
                    CREATE TABLE ${tableName} (
                    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
                    `name` varchar(100) DEFAULT NULL,
                    `password` varchar(100) DEFAULT NULL,
                    `create_time` timestamp   NULL
                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
      </update>

    controller

        @RequestMapping("/createtable")
        @ResponseBody
        public  String createTable( String tableName){
            Map<String, Object> reMap = new HashMap<String, Object>();
            int res = userService.dropExistTable(tableName);
            if (res == 0) {
                reMap.put("code",1);
                reMap.put("msg","创建成功");
                logger.info("'tableNameString'+创建成功");
            }else{
                reMap.put("code",-1);
                reMap.put("msg","创建失败");
                logger.info("创建失败");
            }
            return JSONUtil.getJSON(reMap);
        }
    • 添加属性statementType="STATEMENT"
    • 同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}
    • statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个,这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。默认:PREPARED。这里显然不能使用预编译,要改成非预编译。。

    •  ${xxxx}:$将传入的数据直接显示生成在sql中,对于字符串数据,需要手动加上引号

    2.动态查询数据表

     List<User> selecTable(@Param("tableName") String tableName);

    项目中User表是个空表,里面跟动态创建的表结构,字段一致

    映射文件 *mapper.xml

    <select id="selecTable"  parameterType="java.lang.String" resultMap="BaseResultMap" statementType="STATEMENT">
        select  *   from  ${tableName}
      </select>
    

    controller

    	@RequestMapping("/selecTable")
    	public  String  showSelecTable(String tableName){
    		List<User> objects = userService.selecTable(tableName);
    		System.out.println("user::::"+objects);
    		logger.info("成功");
    		return JSONUtil.getJSON(objects);
    	}
    

     

    #和$符号的区别
    #{ }表示一个占位符号, 可以实现preparedStatement向占位符中设置值,自动加粗样式进行java类型和jdbc类型转换。#{}可以有效防止sql注入。#{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

    $ { } 表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, 可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值, {}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,{}括号中只能是value。

    注意:对于order by 后面的排序规则,表名等数据库对象名,如果要传入,也应该使用${……}

    3.动态表数据添加 

     int insertTable(@Param("user")User user,@Param("tableName") String tableName);
    insertTable() 方法中是两个参数,一个参数是tabelName , 另一个参数 是User对象, 所以<insert > 标签中不能有parameterType 参数, 而是使用 @Param(“”) 进行修饰, 使用的时候要注意, 
    @Param  是 import org.apache.ibatis.annotations.Param;, 不要导错包了。

    mapper.xml

      <insert id="insertTable" >
      insert into ${tableName}   ( name, password,  create_time) 
      values (#{user.name}, #{user.password},  #{user.createTime})
      </insert>
    

     controller实现方法

    @RequestMapping("/addTable")
    	@ResponseBody
    	public  String addTable( String name,String password,String tableName){
    		Map<String, Object> reMap = new HashMap<String, Object>();
    		User user= new User();
    		user.setName(name);
    		user.setPassword(password);
    		user.setCreateTime(new Date());
    		System.out.println("传入的user参数"+user);
    		int res = userService.insertTable(user,tableName);
    		if (res > 0) {
    			reMap.put("code",1);
    			reMap.put("msg","成功");
    			logger.info("'tableNameString'+成功");
    		}else{
    			reMap.put("code",-1);
    			reMap.put("msg","失败");
    			logger.info("失败");
    		}
    		return JSONUtil.getJSON(reMap);
    		
    	}
    

     

     

  • 相关阅读:
    MySQL中 Data truncated for column 'xxx'解决方法
    JAVA中循环删除list中元素的方法总结
    Java 键盘输入数字(空格隔开) 将数字存入数组
    linux查看服务器并发连接数
    解决 httpclient 下 Address already in use: connect 的错误
    知识点--实际开发中软引用或弱引用的使用场景
    无序hashset与hashmap让其有序
    bool的值分别为0,1;那哪个代表true哪个代表false?
    jquery-ui autocomplete在模态框(model)中,出不来
    vue-Treeselect实现组织机构(员工)下拉树的功能
  • 原文地址:https://www.cnblogs.com/wudixiaoguaishou/p/10048779.html
Copyright © 2011-2022 走看看