- 使用注解开发和使用接口类的xml配置文件开发的区别:
- 使用注解开发,只需要改两个文件(接口类、测试类)
- 使用接口类的xml配置文件开发,要修改三个文件(接口类、接口类的xml配置文件、测试类)
- 使用注解开发,只能实现简单的CRUD
- 推荐使用 接口类的xml配置文件开发 条件思路分明
- 使用注解实现CRUD的步骤
- 在接口上写注解
- 在核心配置文件绑定接口
- 测试类测试
- 举例子
接口的注解:需要导入import org.apache.ibatis.annotations.*;
这个包
@Select("select * from user where id=#{id}")
User getUserById(int id);
@Insert("insert into user (id,name,pwd) values (#{id},#{name},#{pwd})")
int insertUser(User user);
@Delete("delete from user where id=#{id}")
int deleteUser(int id);
@Update("update user set id=#{id},pwd=#{pwd} where name=#{name}")
int updateUser(User user);
在核心配置文件绑定接口
<mappers>
<mapper class="com.wu.dao.UserMapper"/>
</mappers>
测试类的修改就和之前的一样,在这里我就不举例了
- 注意一个注解 @Param ,@Param 可以用来设置一个以上的基本类型的参数或者String类型的参数。比如说,我们要查找 id=1,name=小红的人的密码
接口类注解
@Select("select pwd from user where id=#{id} and name=#{name}")
String select(@Param("id")int id,@Param("name")String name);
测试类
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
String pwd = mapper.select(1, "小红");
System.out.println(pwd);
sqlSession.close();
结果:
注意:@Param里面的参数的值是查询所取到的值 ,比如说,把上面那个接口类的注解代码改成
@Select("select pwd from user where id=#{id} and name=#{name}")
String select(@Param("pid")int id,@Param("name")String pname);
则取到的查询的参数为 pid 和 name ,因为pid没有,会报错。
-
细心的人会发现,在我的测试类中,没有书写
sqlSession.commit();
,但是在进行增删改的时候,事务自动提交了,这又是怎么回事呢?其实很简单,我就是将工具类中的 sqlSessionFactory.openSession(true); 由原来的没有参数,到将参数输入true,这样子,事务就自动提交了,不需要我们书写了,原来没有参数,默认为false,意为事务不自动提交。 -
#{}和${}的区别
- 使用#时:
- 用来传入参数,sql在解析的时候会加上" ",当成字符串来解析
- #{}能够很大程度上防止sql注入;
- 使用${}时:
- 用${}传入数据直接显示在生成的sql中,无法防止sql注入;
- $一般用入传入数据库对象,比如数据库表名
- 建议使用#{}方式
- 使用#时: