mybatis+mysql运行问题,一直提示Column 'id' not found.

mybatis自增主键配置:mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是OracleSequece和Mysql自增主键。主要说明下在mybatis中对于自增主键的配置。1、不返回自增主键值:如果考虑到插入数据的主键不作为其他表插入数据的外键使用,可以考虑这种方式。OracleSequence配置TEST_USERSEQ_TEST_USER_ID.nextval       insert into  (ID,NAME,AGE)         values (  ,#{name}, #{age} ) 当插入语句如上配置时,那么针对如下语句 User user = new User(); user.setName("test"); user.setAge(24); userMapper.insert(user); System.out.println(user.id); // user.id 为空user.id为空,也就是说如上的配置并不能在完成插入操作后将插入时的主键值存放到保存的对象中。2、Mysql自增主键配置由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,不指定插入ID字段即可。主键的自增交由Mysql来管理。TEST_USER    insert into  (NAME,AGE)        values (#{name}, #{age} )同样,针对Mysql如此配置mybaits,插入完成后user.id为空。插入后获取自增主键值:上述的情况能满足大部分情况,但有时候我们会遇到类似一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用mybatis提供的来单独配置针对自增逐渐的处理。1、OracleSequence配置:TEST_USER SEQ_TEST_USER_ID.nextval                select  from dual          insert into  (ID,NAME,AGE)         values ( #{id}, #{name}, #{age} ) 当使用了后,在实际的插入操作时,mybatis会执行以下两句SQL:select SEQ_TEST_USER_ID.nextval from dual; // 语句1 insert into (ID,NAME,AGE) values ( ?, ?, ? ); // 语句2在执行插入 语句2 之前,会先执行 语句1 以获取当前的ID值,然后mybatis使用反射调用User对象的setId方法,将 语句1 查询出的值保存在User对象中,然后才执行 语句2 这样就保证了执行完插入后User user = new User(); user.setName("test"); user.setAge(24); userMapper.insert(user); System.out.println(user.id); // user.id 不为空user.id是有值的。2、Mysql自增主键配置针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键,TEST_USER      insert into  ( NAME, AGE )         values ( #{name}, #{age} ) 当然,由于Mysql的自增主键可以通过SQL语句select LAST_INSERT_ID();来获取的。因此针对Mysql,Mybatis也可配置如下:TEST_USER                SELECT LAST_INSERT_ID()          insert into  (ID,NAME,AGE)         values ( #{id}, #{name}, #{age} ) 只不过该中配置需要额外的一条查询SQL小结当数据插入操作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式来配置插入语句,这样可以避免额外的SQL开销.当执行插入操作后需要立即获取插入的自增主键值,比如一次操作中保存一对多这种关系的数据,那么就要使用 插入后获取自增主键值 的方式配置.

mybatis中sql语句里面的$和#的区别

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".

2. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的值是id,则解析成的sql为order by id.

3. #方式能够很大程度防止sql注入。

4.$方式无法防止Sql注入。

5.$方式一般用于传入数据库对象,例如传入表名.

6.一般能用#的就别用$.MyBatis排序时使用order by 动态参数时需要注意,用$而不是#

字符串替

换默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:

ORDER BY ${columnName}这里MyBatis不会修改或转义字符串。重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。

求三表联合查询的SQL查询语句table1中id,name,table2_id;table2中id,name;table3中id,name,table2_id;三表是互相关联的,要查所有字段并且排序请问这个语句怎么写?

比如有三张表,student,teacher , project :第一种方法:select * from student,teacher,project where student.id=teacher.sid and student.id=project.sid;

第二种:select * from student inner join teacher on student.id=teacher.sid inner join project on student.id=project.sid;

select a.id,a.name,b.name,c.name,a.table2_id,a.table3_id,c.table2_idfrom table1 a,table2 b,table3 cwhere a.table2_id=b.id and a.table3_id=c.id and b.id=c.table2_idorder by a.id;以上语句在Oracle11g r2上测试通过,同样可以用于其他数据库,如有疑问请留言

select * from table1 A, table2 B, table3 CWHEREA.table2_id=B.idand A.table3_id=C.idORDER BY id ,name ;如果不通过请留言!

select a.id,a.name,b.id,b.name,c.id,c.name from a,b,cwhere a.b_id=b.id and a.c_id = c.id and b.id=c.b_id

多表联结查询—三表联结SELECTS.SName AS 姓名, CS.CourseName AS 课程, C.Score AS 成绩FROM Students AS SINNER JOIN Score AS C ON (S.SCode = C.StudentID)INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID

mybatis怎么实现根据id 显示两个表的内容连接希望给个小例子

可以通过关系映射查询出来 请看下面在mybatis中,没有级联的概念,但是可以利用集合来实现类似的功能。mybatis3.0添加了association和collection标签专门用于对多个相关实体类数据进行级联查询,但仍不支持多个相关实体类数据的级联保存和级联删除操作。因此在进行实体类多对多映射表设计时,需要专门建立一个关联对象类对相关实体类的关联关系进行描述。插入关联表:    insert into wife (name,h_id) values (#{name},#{husband.hid})关联映射:嵌入式、继承式 引入式等先在数据库建立好主外键关系在xml里面写一个resultMap作为返回类型,如果是多对一 用association 一对多用collection 例子                                                  --ofType集合中的类型                      select w.*,h.* from wife w left join  husband h on w.h_id=h.hid

注意:

1、关联查询一定要带有关联对象的id(主外键),否则集合只会有一条记录存在(认为你查询的是一个对象)如:select h.name,h.age,w.wname from wife w left join husband h on h.hid=w.h_id

2、表连接中不同表有同名字段的时候:a和b都有name字段                                                                   select a.id aid,a.name aname,b.id,b.name from a,b where a.id=b.id

mysql三表联查sql语句_mybatis中SQL语句的三表联查相关推荐

  1. SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete)

    SQL Server 2008中SQL增强之三:Merge(在一条语句中使用Insert,Update,Delete) SQL Server 2008提供了一个增强的SQL命令Merge,用法参看MS ...

  2. commit在c语言中的作用,【单选题】SQL语 言 中 COMMIT语句的主要作用是( ) A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务...

    [单选题]SQL语 言 中 COMMIT语句的主要作用是( ) A. 结束程序 B. 返回系统 C. 存储数据 D. 提交事务 更多相关问题 [判断题]骨与骨之间一般用关节和韧带连接起来. A. 正确 ...

  3. SQL Server 2019中SQL表变量延迟编译

    In an article, An overview of the SQL table variable, we explored the usage of SQL table variables i ...

  4. SQL Server 2008中SQL应用系列及BI学习笔记系列--目录索引 @邀月

    邀月 的数据库学习 http://www.cnblogs.com/downmoon/archive/2011/03/10/1980172.html SQL Server 2008中SQL应用系列及BI ...

  5. SQL Server 2008中SQL之WaitFor

    SQL Server 2008中SQL应用系列--目录索引 在SQL Server 2005以上版本中,在一个增强的WaitFor命令,其作用可以和一个job相当.但使用更加简捷. 看MSDN: ht ...

  6. java中sql语句_java中sql语句的编写规则

    java中sql语句的编写规则 发布时间:2020-06-26 15:11:11 来源:亿速云 阅读:143 作者:Leah 这期内容当中小编将会给大家带来有关java中sql语句的编写规则,文章内容 ...

  7. mysql教程or怎么用_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  8. mysql数据库 or的用法_MySQL中or语句用法示例

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  9. beeline执行sql文件_MyBatis的SQL执行流程不清楚?看完这一篇就够了

    前言 MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1.Mapper接口和映射文件是如何进行绑定的 2.MyB ...

  10. java 防止sql注入_Java中SQL注入以及如何轻松防止它

    java 防止sql注入 什么是SQL注入? (What is SQL Injection?) SQL Injection is one of the top 10 web application v ...

最新文章

  1. 关于target=标签
  2. ABP 框架 数据库底层迁移 Mysql 集群
  3. Ubuntu下安装jdk经验分享
  4. [leetcode] Single Number 查找数组中的单数
  5. 终极算法【4】——联结学派
  6. 捷宇高拍仪XY530 网页集成总结
  7. IPv6/IPv4是什么?IPv4和IPv6有什么区别?
  8. 判断两个矩形是否相交
  9. java判断闰年中闰月_农历中闰年闰月的算法
  10. Docker实用指令整理
  11. 地下城游戏 骑士拯救公主 | leetcode 174
  12. 何小黑的2019年秋招面经~
  13. 最好的5个电脑上的epub阅读器
  14. 【纯前端】原生js实现照片水印
  15. 牛客网 15029 (栈)
  16. 我是一个硬件工程师,面试官随口问了这些问题 | 收藏
  17. Mac下Sunny_Ngrok内网地址映射成外网
  18. element组件el-date-picker禁用当前时分秒之前的日期时间选择(代码最少)
  19. 绯闻女孩传八卦也能作为区块链协议?10分钟告诉你为啥
  20. 官网下载QT不成功解决方案

热门文章

  1. MBA-day16 数学-应用题-集合问题-公式
  2. 手把手教学endnote设置毕业论文参考文献格式(特别完整)
  3. PO BO VO DTO POJO DAO概念及其作用
  4. Word文档A4如何打印成A3
  5. 数据时代建设医疗数据,主要有哪些意义?
  6. 医院计算机应用,解读计算机应用技术对医院信息化的影响
  7. rabbitmq高可用集群搭建踩坑
  8. 课程设计每日总结0819
  9. 紫乌鸦服务器维护后多久刷,魔兽世界紫乌鸦怎么刷 刷新点在哪什么时候去蹲点...
  10. 谷歌浏览器代理服务器出现问题怎么办?(最快的解决办法)