一·@Select,@Insert,@Delete,@Update注解
不再需要userMapper的xml映射,直接在接口中的方法上加上注解即可,但还需要在核心配置文件中配置mapper,只能用类class导入。
<mapper class="com.he.dao.userDao.UserMapper"></mapper>
接口方法:
增删改查:
public interface UserMapper {
@Select("select * from user where id = #{id}")
User getUserByID(int id);//只有一个参数不需要@Param()注解
@Select("select * from user limit #{start},#{size}")
List<User> getUserByLimit(@Param("start")int start,@Param("size")int size);//两个参数必须要写@Param()注解,
// sql语句取得值为@Param()注解里的值,与参数名无关。
@Insert("insert into user values(#{id},#{username},#{password})")
int addUser(User user);//引用类型不需要写@Param()注解
@Delete("delete from user where id=#{uid}")
int deleteUserById(@Param("uid")int id);
}
直接在接口方法上写对应的注解,里面直接编写sql语句。如果方法只需要传一个参数或者引用类型,则可以不屑@Param(),如果是两个或多个,则必须要写@Param(),
注意:sql语句#{ }中取的值为@Param( )中的字段,与方法名无关。
设置事务自动提交:
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
//运用重载方法,设置事务自动提交为true
测试:
//查
@Test
public void getUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserByID(2);
//User{id=2, username='李四', password='null'} 查询结果,无法处理数据库字段与实体类属性名称不对应的问题。
System.out.println(user);
sqlSession.close();
}
@Test
public void getUserByLimit(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.getUserByLimit(1, 3);
for (User user : users) {
System.out.println(user);
}
sqlSession.close();
}
//增
@Test
public void addUser(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(6,"狂神","168211"));
sqlSession.close();
}
//删
@Test
public void deleteUserById(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUserById(2);
sqlSession.close();
}
使用注解的缺点是无法解决数据库字段和实体类属性名称不一致的问题,如果使用xml配置文件,则可以使用resultMap解决,开发中,尽量使用xml配置,如果sql足够简单,可以考虑使用注解。
二·lombok
lomobok是用来对类自动填充方法的,特别是对pojo中的实体类,在类上增加注解,即可自动添加getter and setter 方法等。
使用步骤:
1.先在idea中安装lombok插件
2.导入jar包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
3.在类上增加注解
有以下注解:
@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@val
@var
experimental @var
@UtilityClass
一般只使用三个:
使用@AllArgsConstructor会覆盖@Data的无参构造,所以再需要一个无参构造@NoArgsConstructor
如果需要自定义参数的构造参数,则自行补充。
@Data //添加getter and setter 无参构造 toString equals 等
@AllArgsConstructor //全参构造
@NoArgsConstructor //无参构造
public class Student {
private String Sno;
private String Sname;
private String Sgender;
private Timestamp SBirth;
private String Sdept;
private int Sage;
}
lombok大大减少了代码的量,减少的编写实体类的量,但减少了代码的可阅读性。