文章目录
一、CRUD 注解(舍弃 mapper.xml): @Select、 @Insert、 @Update、 @Delete、 @Param
通过注解去处理映射,省略 mapper.xml ,直接用注解代替,这样可以使代码更加简洁。
但是需要注意,一些简单映射可以使用 ibtis 包下的 SQL 注解还好,但是如果是复杂映射的话,使用注解反而不好处理。
比如,字段:user_id ,实体类:userId,这种不一致的状况处理起来便很麻烦,所以写 SQL 时候最好还是使用 XML 去完成。
- 使用 CRUD 注解,省略XML文件,直接在接口的抽象方法上通过CRUD注解编写SQL,并在 mybatis-config.xml 核心配置文件中直接配置 mapper 接口
XML 文件
<!--绑定接口!-->
<mappers>
<mapper class="com.demo_03.mapper.IUserMapper" />
</mappers>
1、@Select
代码示例:
-
mapper 接口
//相当于 XML 文件中的<Select>标签 @Select("select * from user") List<User> getUsers();
-
测试类
@Test public void test() throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); List<User> list = mapper.getUser(); for(User user:list){ String info= String.format( "id:%s,用户名:%s,密码:%s,人员创建时间:%s", user.getId(),user.getName(),user.getPwd(),user.getCreateTime() ); System.out.println(info); } }finally{ sqlSession.close(); } }
运行结果:
可以看出时间字段无法处理,查询不到数据
2、@Insert
代码示例:
-
mapper 接口
//相当于 XML 文件中的<Insert>标签 @Insert("insert into user (id,name) values(#{id},#{name})") int addUser(User user);
-
测试类
@Test
public void test() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
user.setId(999);
user.setName("感冒灵");
int i = mapper.addUser(user);
qlSession.commit();//全部正常执行后,提交事务
System.out.println(i);
}finally{
sqlSession.close();
}
}
运行结果:
3、@Delete
代码示例:
-
mapper 接口
//相当于 XML 文件中的<Delete>标签 @Delete("delete from user where id = #{id}") int deleteUser(User user);
-
测试类
@Test
public void test() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
User user = new User();
user.setId(888);
user.setName("感冒灵");
int i = mapper.updateUser(user);
sqlSession.commit();//全部正常执行后,提交事务
System.out.println(i);
}finally{
sqlSession.close();
}
}
运行结果:
4、@Update
代码示例:
-
mapper 接口
//相当于 XML 文件中的<Update>标签 @Update("update user set id = #{id} where name = #{name}") int updateUser(User user);
-
测试类
@Test
public void test() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
User user = new User();
user.setId(888);
user.setName("感冒灵");
int i = mapper.updateUser(user);
sqlSession.commit();//全部正常执行后,提交事务
System.out.println(i);
}finally{
sqlSession.close();
}
}
运行结果:
5、@Param
@Param 注解是搭配 CRUD 注解使用的。
-
@Param 的作用
- 便于传递多个参数
@Select("select * from user where id = #{id} and name = #{name}") List<User> getUser(@Param("id") int id,@Param("name") String name);
- 给传入参数起别名()
@Select("select * from user where name = #{username}") List<User> getUser(@Param("username") String name);
-
@Param 的注意事项
- 只要传入的参数是基本类型或者String类型,就需要加上该注解用来标注参数,引用类型不需要加
二、Lombok 插件,减少重复代码
-
使用步骤:
- 在IDEA中安装Lombok插件
- 在项目pom.xml文件中导入Lombok 依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency>
- 在实体类上添加相应注解即可
1、@Data
@data 注解是使用频率最高的注解。
- @data 注解的作用:
- 生成无参构造方法
- 生成 Get 方法
- 生成 Set 方法
- 生成 toString 方法
- 生成 hashCode 方法
- 生成 equals 方法
加上该注解之后自动生成这些方法,就不需要在编写这部分代码了。