精讲Mybatis框架对数据库增删改查操

北京青春痘中医医院 http://m.39.net/nk/a_9160265.html

这里是一张user表,接下来我们通过java程序对表中内容进行查询操作。user表见名之意,通常用来储存用户的个人信息,可能用于登录或其他统计信息,常见的字段有id,用户名,密码,姓名,年龄,性别等,根据不同项目进行不同划分。

userT

然后我们执行查询语句

mapper中的sql是这样写的

这里还是和jdbc一样,#{v}表示一个占位符,大家看上面的parameterType属性,表示入参。就是传入的参数,要求必需指定参数类型,那我在这个方法中传入的是用户的ID是一个数字,这里就得写Integer,或者int,如果写String就是抛出类造型异常。cast...这种异常,那么这里为什么写Integer不写int呢,因为Integer是java中的一个对象,当传入参数为空时,它的默认值允许为null,如果是int类型就会抛出异常。#{v}是固定写法,v是给人看的,所以这里的字母v可以替换成abcde任意子串或数字,大家可以理解为这是一个变量名字。听说Java10推出了一种新的功能,jvm能够自动判断变量类型,有可能Mybatis以后的更新中会取消指定传入参数类型这个规定。

下面是查询结果

查询结果

接下来我们试试通过模糊查询用户名来找到用户。模糊查询是什么?这是一个非常棒的功能,而且每个人都会用过,当你在百度搜索栏输入自己想要查询的文字时,下拉菜单以后为你列出了可能的选项。这就是模糊查询,原理就是每次用户输入完一个字符,页面向服务器发送ajax请求执行模糊查询然后返回到页面显示出可能结果。

sql语句

因为这次我们执行的查询结果可能有多个,所以返回的结果集是List,用一个大for循环来遍历所有查询到得结果。那么既然返回的结果是List上图的resultType,为什么是User呢,因为这里只需要写List的泛型即可,如果写List是不可以的,会报错。

java代码查询结果

大家会发现这次我们用的是${},来表示入参的位置这是为什么呢?实际上#{}与${}的区别就是#{}相当于jdbc中的whereid=?这种占位符,它是预编译的,防sql注入的,${}就是单纯的字符串拼接,是不防sql注入的,所以这两个一定要注意区分,用在合适的场合。另外${}里面的变量必须是value,${value}是固定格式。

那么如果你觉得用${}这种方法不能防止sql注入,这里也可以使用#{}来完成。

另一种写法的

这种写法也是正确的,同时可以防止sql注入,但是要注意%两边一定得用双引号,这与框架对子串截取机制有关。“”大概是起到转义的作用。

下面我们做一下添加用户功能。

sql语句这样写,我只添加了一个字段,真实情=情况下需要添加很多字段的。

这里是java代码,如果使用过hibernate的同学会很容易理解这段代码。我们这次入参是一个User对象,在执行sql语句的同同时mapper文件会自动帮我们将User里面的属性映射成表中字段增删改操作要记得,执行成功之后需要提交事务,查询不需要。框架在事务控制这方面为我们做了很多事,我们只需要调用


转载请注明:http://www.aierlanlan.com/rzfs/5647.html