这样类似的语句,由于表名需要通过参数获取,所以我就写了这么一个配置文件:
<?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="com.wjx.lab.spring.commcrud.dao.CommMapper">
<select id="getUserTableColumns" parameterType="java.lang.String" resultType="map">
show columns from #{tableName}
</select>
</mapper>
结果呢,就是在执行这个的时候报错。根据日志可以看到这样的字:“show columns from ?”。
现在想来也是经验不足,这个问题当不传递变量,写死语句“show columns from user”时候完全没有问题,当传递参数就出错,应该是参数错了。
最后找到,确实参数错了,因为定义参数类型是String,所有mybatis会替换最终执行的语句是“show columns from ‘user’ ”。这里多了一个引号。
最终没有太好的办法解决,不想改动太大,利用mysql数据库的特点,将这个语句改为了查询information_schema数据库表,也可以达到同样的效果。同时由于那个是标准的sql语句,参数替换完全没有问题。
最终配置文件为:
<?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="com.wjx.lab.spring.commcrud.dao.CommMapper">
<select id="getUserTableColumns" parameterType="java.lang.String" resultType="map">
SELECT
information_schema.COLUMNS
WHERE
TABLE_SCHEMA = #{tableSchema}
TABLE_NAME = #{tabName}
</select>
</mapper>
mybatis 中对元数据的操作
目录mybatis 中对元数据的操作1. 使用MySQL内部数据库information_schema表查询实现1.1 MySQL内部字段表 information_schema.COLUMNS1.2 mybatis的mapper.xml文件1.3 mybatis服务层1.4 输出结果2. 使用jdbc方式获取元数据2.1 使用原生jdbc获取元数据2.1.1 原生JDBC2.1.2 DatabaseMetaData.getColumns2.2 mybatis采用JDBC
Mybatis做为一种半ORM框架(半:需要手动写sql)。ORM(Object Relational Mapping)的技术本质是:ORM框架将对象的值映射到对应数据库类型: 如 String -> varchar。且mybatis分为两种实现方式:基于xml和基于注解,本文为xml。
基于springboot框架的前后台数据交互显示
主要实现在前台html页面对数据库进行增删改的操作,通过在前台修改用户的信息,保存到后台数据库,同时,将更新后的信息从数据库进行读取。
今天这篇博客是对我前面的一个信息修改功能进行完善。代码相对前面的一篇博客更加简洁。
项目目录结构图如下所示。
因此,JDBC为我们定义了一个数据源的标准,也就是`DataSource`接口,告诉数据源数据库的连接信息,并将所有的连接全部交给数据源进行集中管理,当需要一个`Connection`对象时,可以向数据源申请,数据源会根据内部机制,合理地分配连接对象给我们。我们的数据源配置信息,存放在了`Transaction`对象中,那么现在我们只需要知道执行器到底是如何执行SQL语句的,我们就知道到底如何创建`Connection`对象了,就需要获取数据库的链接信息了,打开datasource。
在mybatis中如何获取数据源==>如何解析以下这些标签的
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">