本文共 3363 字,大约阅读时间需要 11 分钟。
在开始讲解之前,如果你对注解不太熟悉,可以先看看这篇对注解的讲解。由于注解其实与xml本质上是一样的,因此我们注解不会像前面那样还很多篇幅来讲解。
在开始本章的讲解前,我们需要说明一下,现在我们的那些映射配置文件就不再有用了,而是依靠全局配置文件。其内容为:
除了配置数据库连接外,要想使用注解,上面的
是必要的,第一个指明返回值类所在位置,第二个指明接口所在包。还有一点就是使用注解开发时在接口同一目录下是不允许有他的xml配置文件的。
在mybatis中CRUD一共有四个注解
@Select
@Insert @Update @Delete
我们用UserMapper这个接口来演示,首先把它里面的方法全部删掉,我们重新来。
下面只演示前两个演示: 1.@Select 在UserMapper下面添加如下方法:@Select("select * from user") public ListfindById(int user_id);
执行下面代码:
SqlSession sqlSession1 = build.openSession(); UserMapper mapper = sqlSession1.getMapper(UserMapper.class); List我们发现由于字段名是name,而属性名是username,他们并不对应导致查询到的结果username为null。后面我会讲注解来解决。 那么他是如何实现的呢?我们先来看看如果不用注解,用xml文件配置应该是这样的:byId = mapper.findById(1); for (User user : byId) { System.out.println(user); } sqlSession1.commit();//提交事务,否则会事务回滚
从上面我们可以看得到我们需要的信息为:namespace,id,resultType,parameterType
那么我们看这些信息在UserMapper里面都是有的。 2.>@Insert 在UserMapper下面添加如下方法:@Insert("insert into user (name,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})") public int saveUser(User user);
执行下面代码:
SqlSession sqlSession1 = build.openSession(); UserMapper mapper = sqlSession1.getMapper(UserMapper.class); User user = new User(); user.setUsername("jack"); user.setSex("1"); user.setAddress("湖北"); user.setBirthday(new Date()); int byId = mapper.saveUser(user); sqlSession1.commit();//提交事务,否则会事务回滚
前面我们说了username查询结果为空,现在我们来解决。
我们能做如下修改:@Select("select * from user") @Results(value={ @Result(id=true,column="id",property = "id"), @Result(column="name",property = "username"), @Result(column="sex",property = "sex"), @Result(column="birthday",property = "birthday"), @Result(column="address",property = "address") }) public ListfindById(int user_id);
再次查询:
成功查到了username。 那么问题来了,这个@Results注解只是作用于findById一个方法,难道以后其他的方法也要再把上面的内容再写一遍?这显然是不合理的,于是我们可以给这个 Results起一个别名,操作如下: 关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。在前面查询user的时候我们没有把orders也查到。现在我们来为大家操作一下。
执行之前的查询代码有:为方便演示,对orders表数据修改如下:
红框处是对一对一的修改。 我们发现张小明的结果确实查到了两个User{id=16, username='张小明', sex='1', birthday=null, address='河南郑州', orders=[Orders [id=3, userId=null, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=null, orderdetails=null], Orders [id=4, userId=null, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null, user=null, orderdetails=null]]}
其实如果用一对多的方式查询也可以查到,不过效率会差一些。
由于一级缓存是默认开启的,我们就直接讲二级缓存。如果缓存忘记了可以再复习一下:。
第一步当然是先在全局配置文件里开启二级缓存,步骤忘记的可以在复习一下上面这篇文章,这里我跳过。 在接口上面加上注解即可 关于上个图中报红错是因为我的mybatis版本是低于3.5.0的,他不支持这功能,但在高版本的情况下是可以使用的,这里我就不去做这些麻烦事了。 剩下的演示还是参考上面的文章复习即可。这种情况下我们需要使用@Param参数来指定参数名字
总结:终于把mybatis讲完了,不过我要说明的是,这些都只是一些浅层的CRUD,简单说,你会,别人也会,因此后面我会在抽空出一个mybatis的源码解读的的系列文章,来一个质的提升。敬请期待吧!转载地址:http://utlzi.baihongyu.com/