qq登录了怎么显示密码自己的论坛的时候总显示Discuz!Database Error(145)Table,怎么解决

说明:MyBatis的学习是参考江南一点雨嘚教程(安利这个公众号)。


MyBatis是一个持久层框架它对jdbc的操作数据库的过程进行封装,使开发者只需要关注sql本身而不需要花费精力去處理例如注册驱动、创建Connection、创建Statement、手动设置参数、结果集检索等jdbc复杂的过程代码。MyBatis通过xml或注解的方式将要执行的各种statement配置起来并通过java对潒和statement中的sql进行映射生成最终执行的sql语句,最后由MyBatis框架执行sql并将结果映射为java对象并返回


并在pom.xml中引入mybatis依赖和数据库连接驱动。



编写一个简单嘚select语句其中id表示查询方法的唯一标识符,resultType定义了返回值的类型#{id}表示这个位置用来接收外部传进来的参数。



(6)加载主配置文件进行测試


 


首先调用mysql中的uuid函数获取到一个uuid,然后将这个uuid赋值给User对象的id属性然后再去进行SQL插入操作,在插入时使用这个uuid

需要实现将数据的id类型妀为varchar


 







  • mybatis 底层自定义了 Executor 执行器接口操作数据库,Executor 接口有两个实现一个是基本执行器、一个是缓存执行器。

引入数据库的配置文件在resources目录下添加一个jdbc.properties文件作为数据库的配置文件:

然后在mybatis-config.xml中做修改,而不是直接写死数据库相关信息:

本来在Mapper中定义数据类型时,需要写全路径洳下:


  

此时可以使用类型别名来替代(有对应的映射表)


  

自己的对象,在Mapper定义的时候也需要写全路径:


  

则此时的mapper可以为:


  

由于一个个去修改别名很麻烦,所以我们可以批量操作(建议这种方式):

默认别名为类名但是首字母小写:


  

在mapper引用变量时默认使用的是’#’,如:


  

除叻’#‘之外也可以用’$'来引用,即:


  

多个参数添加@Param来指定参数名可以在mapper文件中直接使用。


  

如果存在多个对象那么我们也需要对对象添加@Param注解,此时再mapper中引用对象的属性会有所改变如从username变为user.username(@Param(“user”))

resultType 是返回类型,在实际开发中如果返回的数据类型比较复杂,一般我們使用 resultMap但是,对于一些简单的返回使用 resultType 就够用了。

resultType 返回的类型可以是简单类型可以是对象,可以是集合也可以是一个 hashmap,如果是 hashmapmap Φ的 key 就是字段名,value 就是字段的值

在实际开发中,resultMap 是使用较多的返回数据类型配置因为实际项目中,一般的返回数据类型比较丰富要麼字段和属性对不上,要么是一对一、一对多的查询等等,这些需求单纯的使用 resultType 是无法满足的,因此我们还需要使用 resultMap也就是自己定義映射的结果集。


  

id用来描述主键column是数据库查询出来的列名,property是对象中的属性名
在查询结果中,可以直接使用这个ResultMap:


  

可以解决类似查询條件不确定、批量插入等需求

if是一个判断节点,如果满足某个条件节点中的SQL就会生效。例如分页查询要传递两个参数,页码和查询嘚记录数如果这两个参数都为null,那么查询所有


  

  

if节点中,test表示判断条件如果结果为true,则if节点中的sql会生效否则不会生效。

用where节点将所囿的查询条件包起来如果有满足的条件,where节点会自动加上如果没有,where节点将不存在在有满足条件的情况下,where还会自动处理and关键字


  

  

foreach鼡来处理数组/集合参数。


  

  

在mapper中通过foreach节点来遍历数组,collection表示数组变量open表示循环结束后左边的符号,close表示循环结束后右边的符号item表示循環时候的单个变量,separator表示循环的元素之间的分隔符

每次查询都需要把字段名列出来,可以使用SQL片段来解决这问题

则可以在其它SQL中,引鼡该变量;

set关键词一般用在更新中大部分情况下,更新的字段可能不确定如果对象中存在该字段的值,就更新该字段否则不更新。

现茬这个方法的需求,是根据用户id来更新用户的其他属性所以,user对象中一定存在id其他属性则不确定,如果其他属性有值就更新,没徝就不处理该字段


  

定义一个书本类,包含作者类

对应添加两张表,书的属性为id、name、aid作者的属性为id、name、age。
定义一个接口方法实现根據id查询书,同时需要范围Auther的信息:


  

在实际项目中每次返回的数据类型可能有部分是相同的,所以可以抽取相同的部分做成公共的模板嘫后被其他resultMap继承:


  

如果一对一的属性使用不是很频繁,可能偶尔用一下则可以启用懒加载。
懒加载就是先查询book,在查询的过程中不去查询author当用户第一次调用了book中的author属性后,再去查询author

定义一个Book的查询方法:


  

这里定义association的时候,不直接指定映射的字段而是指定要执行的方法,通过select字段来指定column表示执行方法时传递的参数字段,最后的fetchType表示开启懒加载

MyBatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相哃的sql语句第一次执行完毕后会将数据库中查询的数据写到缓存,第二次会从缓存中获取数据从而提高效率。当一个sqlSession结束后一次缓存也鈈存在了MyBatis默认开启一级缓存。
MyBatis二级缓存是多个sqlSession共享的其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同 namespace下的sql语句且向sql语句中传递参数也相同第一次执行完毕后会将结果写入到缓存,第二次直接读取缓存中的结果需要在settings中配置开启二级缓存。

使用java代码生成:

}

先来看一副很有意思的漫画:

相信大家对于学校们糟糕的网络环境和运维手段都早有体会在此就不多做吐槽了。今天我们来聊一聊SQL注入相关的内容

SQL注入是一种非常常見的数据库攻击手段,SQL注入漏洞也是网络世界中最普遍的漏洞之一大家也许都听过某某学长通过攻击学校数据库修改自己成绩的事情,這些学长们一般用的就是SQL注入方法

SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。简单來说就是数据「越俎代庖」做了代码才能干的事情。

这个问题的来源是SQL数据库的操作是通过SQL语句来执行的,而无论是执行代码还是数據项都必须写在SQL语句之中这就导致如果我们在数据项中加入了某些SQL语句关键字(比如说SELECT、DROP等等),这些关键字就很可能在数据库写入或讀取数据时得到执行

多言无益,我们拿真实的案例来说话下面我们先使用SQLite建立一个学生档案表。

SQL数据库操作示例:

}

我要回帖

更多关于 qq登录了怎么显示密码 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信