发表于: 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也更加方便
评论