Mybatis—Plus中文官网 https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F%A3
对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术
当前ORM框架主要有五种:
(1)Hibernate 全自动 需要写hql语句
(2)iBATIS 半自动 自己写sql语句,可操作性强,小巧
(3)mybatis
(4)eclipseLink
(5)JFinal
-
maven引入mybatis-plus框架
-
<project.myatis-plus.version>3.5.3.1</project.myatis-plus.version> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${project.myatis-plus.version}</version> </dependency>
-
-
配置文件配置mybatis-plus
-
spring: datasource: #配置数据库连接 driver-class-name: com.mysql.cj.jdbc.Driver #mysql8以后的版本,要加cj #添加日期数据,保证数据库和java添加时间一致,加上serverTimezone=Asia/Shanghai url: jdbc:mysql://localhost:3307/book?useUnicode=true&&characterEncoding=utf-8&autoReconnect=true&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: 545666 type: com.alibaba.druid.pool.DruidDataSource #使用德鲁伊数据源 mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #控制台打印日志 #添加日期数据,保证数据库和java添加时间一致,加上serverTimezone=Asia/Shanghai
-
-
实体类添加注解做映射关系
-
@Data //生成tostring和get&&set方法 @NoArgsConstructor //生成无参构造方法 @AllArgsConstructor //生成全部有参构造方法 @TableName("booktype") //映射表名 public class BookType { @TableId(value = "id",type = IdType.AUTO) //映射主键 private Integer id; @TableField("bt_name") //映射表的列名 private String name; @TableField("bt_createtime") private Date createTime; @TableField("bt_updatetime") private Date updateTime; @TableField("bt_creator") private String creator;
-
-
写dao接口extends BaseMapper<实体类>
-
public interface IBookTypeDao extends BaseMapper<BookType> {//继承BaseMapper,mybatis-plus已经将sql语句写好 }
-
-
写service接口和实现
-
@Service public class BookTypeServiceImpl implements IBookTypeService { @Autowired IBookTypeDao iBookTypeDao; @Override public List<BookType> findAll() { return iBookTypeDao.selectList(null); } @Override public List<BookType> findOne() { //Preparing: SELECT id,bt_name AS name,bt_createtime AS createTime,bt_updatetime AS updateTime,bt_creator AS creator FROM booktype WHERE (bt_name LIKE ?) // Parameters: %学%(String) wrapper封装的模糊查询语句 //wrapper用来封装添加的查询条件 QueryWrapper<BookType> wrapper = new QueryWrapper<>(); wrapper.like("bt_name","学"); return iBookTypeDao.selectList(wrapper); } @Override public List<BookType> orderByCreateTimeDesc() { //wrapper用来封装添加的查询条件 QueryWrapper<BookType> wrapper =new QueryWrapper<>(); wrapper.orderByDesc("bt_createtime"); return iBookTypeDao.selectList(wrapper); } }
-
-
DTO封装向前端传输的对象
-
DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象,即也是Controller中,Request或Response所封装的对象。
-
写一个枚举类定义常量成功的代码和代表信息
-
/** * 定义常量代码信息 */ public enum ResultCode { //枚举类的实例对象必须在最前面先定义 Query_BOOKTYPE_SUCCESS(2001,"查询图书类型成功"), ORDER_BOOKTYPE_SUCCESS(2002,"查询图书名成功"), Query_BOOKTYPE_NAME_SUCCESS(2003,"根据创建时间排序成功") ; private int code; private String msg; //构造器默认私有private ResultCode(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; }
-
-
写一个HttpResp类,封装成功代码,时间,传输的数据
-
/** * 统一规定向controller的数据传输对象DTO * * @param <T> */ @Data //生成toString和get&&set方法 @NoArgsConstructor //生成无参构造方法 @AllArgsConstructor //生成全部有参构造方法 public class HttpResp<T> { //枚举定义的常量 private ResultCode resultCode; //操作时间 private Date time; //传输的数据 private Object results; //前端拿到数据是通过实体类的get方法拿到的,单独写的方法要命名为getxxx,前端才能渲染相应数据 }
-
-
-
写好Controller层
-
@RestController @RequestMapping("/api/bt") public class BookTypeController { @Autowired private IBookTypeService ibt; @GetMapping("/findAll") public HttpResp findAll() { return new HttpResp(ResultCode.Query_BOOKTYPE_SUCCESS,new Date(),ibt.findAll()); } @GetMapping("/findByName") public HttpResp findByName(){ return new HttpResp(ResultCode.Query_BOOKTYPE_NAME_SUCCESS,new Date(),ibt.findOne("学")); } @GetMapping("/orderByCreate") public HttpResp orderByCreate(){ return new HttpResp(ResultCode.ORDER_BOOKTYPE_SUCCESS,new Date(),ibt.orderByCreateTimeDesc()); }
-
-
test单元测试
-
@SpringBootTest //获取启动类,加载配置,寻找主配置启动类(被 @SpringBootApplication 注解的) @RunWith(SpringJUnit4ClassRunner.class) //让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持 SpringRunner继承于SpringJUnit4ClassRunner,为其简写模式。 @Slf4j public class BookTypeServiceImplTest { @Autowired IBookTypeService ibt; @Test public void findAll() { log.info("测试查询结果是否正确"); //测试用例(正规操作测试) Assert.assertEquals("政治军事",ibt.findAll().get(9).getName()); } @Test public void findOne(){ log.info("测试查询结果"); //测试用例 Assert.assertEquals("哲学宗教",ibt.findOne().get(2).getName()); } @Test public void orderByCreate(){ log.info("测试排序结果"); //测试用例 Assert.assertEquals(12,ibt.orderByCreateTimeDesc().size()); } }
-