发表于: 2018-03-22 18:50:59

1 567


今天完成的事:

    1.普通的mybatis连接数据库和CRUD

先浏览原始的数据库

      ①创建实体类Category,用于映射表category_

②创建主配置文件mybatis-config.xml

③编写配置文件Category.xm和测试类TestMybatis

④得到表category_中的数据

下面就是基本的CRUD的操作部分:

主要的部分就是Category.xml里面代码的更改

具体的部分如下

Create:通过session.insert调用addCategory对应的sql语句,其中#{name}会自动获取c对象的name属性值

运行之后获取到的数据就会多出一行“新增及的Category”

Retrieve:通过session.selectOne获取id=3的记录

运行的结果是:对比之前的表数据,发现是正确的

Update:通过session.update进行修改id为3的name

运行结果:

Delete:删除id=6的对象(即之前运行的最后一条数据)

运行结果:

慢慢学习下来之后,我又了解到了MyBatis的一个强大特性,就是它的动态SQL。之前在JDBC的学习中,发现要根据不同条件拼接SQL语句是很痛苦的。拼接的时候要确保不能忘了必要的空格,还要注意省略掉列名列表最后的逗号,利用动态SQL就可以摆脱这种痛苦。

首先介绍if标签:简单的说就是一条sql语句包含两条的效果,之前的话一条语句只能对应一个条件,如果需要调用两个方法的话,就需要分别调用,有了if标签之后,只需要一句话就可以完成。

比如想要查询所有的数据,再根据名称模糊查询,首先需要在配置文件里提供两条sql语句:

concat('%',#{name},'%')//这是mysql的写法,具体的不同的数据库,写法也不相同

再分别再测试类中调用:

最后就是运行结果:

如果用if标签的话,xml里面只需一句话:

就能得到相同的效果:

此外还有where标签,where标签主要是对if的补充,if里面的条件如果有两个,但是第一个条件为空了,那么此时产生的sql语句就会有语法上的错误,最后编译的时候会有有问题。如果使用where标签,就会自动判断条件成立不成立,不成立的话,最后产生的sql语句里面就不会有相关的条件出现。

以下为示例:

如果是之前的if标签的话,此时我们不去往name里面赋值,就会报错,但是where就会自动跳过,只调用第二句语句

没有给name赋值

结果:

没有报错

明天计划的事情:

    继续学习mybatis的其他动态sql标签,比如set,choose,foreach等,还有连接池也可以看一看,学习junit。

收获:

     了解了不同的连接数据库的方法,mybatis就是对jdbc的包装优化,相似的sql语句不需要重复写,同时强大的动态sql也更加方便


返回列表 返回列表
评论

    分享到