ActiveRecord也属于ORM(对象关系映射)层,由Rails最早提出,遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。
ActiveRecord的主要思想是:
- 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录,通常表的每个字段在类中都有相应的Field;
- ActiveRecord同时负责把自己持久化,在ActiveRecord中封装了对数据库的访问,即CURD;
- ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑。
简而言之,AR建立了Java对象与数据库表逻辑上的直接映射,方便了程序的编写。而在MP中使用AR非常简单,只需让pojo类继承Model<>类即可。
例:
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("tb_user")
public class User extends Model<User> {
//lombok注解自动为对象创建各种方法
private String userName;
private String name;
private Integer age;
@TableId(type = IdType.AUTO)//IdType主键类型,指定为自增长
private Long id;
@TableField(value = "email")//映射至表中不同命字段
private String mail;
@TableField(exist = false)//表中不存在
private int power;
@TableField(select = false)//查询命令不返回该字段值
private String password;
}
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:applicationContext.xml"})
public class test {
//mapper不必再注入,但映射关系、配置类不能缺少,即UserMapper.java与applicationContext.xml的配置
/*@Autowired
private UserMapper mapper;*/
@Test
public void testSelectById(){
User user = new User();
user.setId(4L);
//调用AR的按id查询
User result = user.selectById();
System.out.println(result);
}
@Test
public void testInsert(){
User user = new User();
user.setUserName("diaochan");
user.setPassword("123456");
user.setAge(20);
user.setName("貂蝉");
user.setMail("diaochan@itcast.cn");
// 调用AR的insert方法进行插入数据
boolean result = user.insert();
System.out.println(result);
}
@Test
public void testUpdate(){
User user = new User();
user.setId(3L);// 查询条件
user.setAge(31); // 更新的数据
boolean result = user.updateById();
System.out.println(result);
}
@Test public void testDelet() {
User user = new User();
user.setId(7L);
boolean result = user.deleteById();
System.out.println(result);
}
@Test public void testSelect() {
User user = new User();
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.le("age","20");
//按条件查询
List<User> users = user.selectList(userQueryWrapper);
for (User user1 : users) {
System.out.println(user1);
}
}
}