赞
踩
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>sbAndMybatis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sbAndMybatis</name> <description>sbAndMybatis</description> <properties> <java.version>8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--mybatis和springboot的整合的依赖--> <dependency> <groupId>repMaven.org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>repMaven.org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.2.5</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
spring-boot-starter-parent的版本为2.3.12,因为jdk版本为8,只有17及以上版本的jdk才可以用3.0以上的
mybatis-spring-boot-starter的版本依赖于上述的版本,为3.0的话会出现兼容问题,采用2.1.4
spring-boot-maven-plugin自动生成的会飘红,改为使用本地仓库的插件
spring.application.name=sbAndMybatis
#数据源的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
#配置mybatis映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
在该文件中可以配置关于数据库的相关信息,也可以指定端口号和上下文路径
@Data
public class User {
private Integer id;
private String username;
private String password;
}
@Repository
public interface UserDao {
//添加
public int insert(User user);
//删除
public int del(Integer id);
//修改
public int update(User user);
//查询全部
public List<User> selectAll();
//根据id查询
public User selectById(Integer id);
}
在该文件下生成UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zmq.dao.UserDao"> <!--resultMap映射--> <resultMap id="myMap" type="com.zmq.entity.User" autoMapping="true"> <id property="id" column="id"/> <result property="username" column="u_name"/> </resultMap> <!--添加新用户--> <insert id="add"> insert into user values (null,#{username},#{password}) </insert> <insert id="insert"> insert into user values (null,#{username},#{password}) </insert> <update id="update"> update user set u_name=#{username},password=#{password} where id=#{id} </update> <delete id="del"> delete from user where id=#{id} </delete> <!--根据姓名和密码查询--> <select id="getByOthers" resultMap="myMap"> select * from user where u_name=#{username} and password=#{password} </select> <select id="selectAll" resultMap="myMap"> select * from user </select> <select id="selectById" resultMap="myMap"> select * from user where id=#{id} </select> </mapper>
@Data
@NoArgsConstructor
@AllArgsConstructor
public class R {
private Integer code;
private String msg;
private Object object;
}
该类用于统一返回信息的类型
public interface UserService {
public R insert(User user);
public R del(Integer id);
public R update(User user);
public R selectAll();
public R selectById(Integer id);
}
在该包下生成UserServiceImpl类,并实现UserService接口
@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public R insert(User user) { int insert = userDao.insert(user); if(insert>0){ return new R(200,"添加成功!",null); }else { return new R(500,"添加失败!",null); } } @Override public R del(Integer id) { int del = userDao.del(id); if(del>0) { return new R(200,"删除成功!",null); }else { return new R(500,"删除失败!",null); } } @Override public R update(User user) { int update = userDao.update(user); if(update>0){ return new R(200,"修改成功!",null); }else { return new R(500,"修改失败!",null); } } @Override public R selectAll() { List<User> list = userDao.selectAll(); if(list!=null){ return new R(200,"查询成功!",list); }else { return new R(500,"查询失败",null); } } @Override public R selectById(Integer id) { User user = userDao.selectById(id); if(user!=null){ return new R(200,"查询成功",user); }else { return new R(500,"查询失败!",null); } } }
@RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; //添加 @PostMapping("/insert") public R insert(@RequestBody User user){ return userService.insert(user); } //删除 @DeleteMapping("/delete") public R delete(Integer id){ return userService.del(id); } //修改 @PutMapping("/update") public R update(@RequestBody User user){ return userService.update(user); } //查询全部 @GetMapping("/selectAll") public R selectAll(){ return userService.selectAll(); } //根据id查询 @GetMapping("/selectById") public R selectById(Integer id){ return userService.selectById(id); } }
@SpringBootApplication
//为指定的dao生成代理实现类
@MapperScan(basePackages = "com.zmq.dao")
public class SbAndMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SbAndMybatisApplication.class, args);
}
}
没有为dao生成代理实现类
mybatis和springboot整合的版本太高
swagger2就是在线生成接口文档的,而且还可以对接口进行测试
Swagger2是一个规范和完整的框架,用于生成、描述、调用和可视化Restful风格的web服务,现在我们使用spring boot整合,作用:
1. 在线生成接口文档
2. 接口的功能测试
Restful风格:在controller层的注解使用:
添加:@PostMapping
删除:@DeleteMapping
修改:@PutMapping
查询:@GetMapping
因为项目为前后端分离,靠接口调用连接,就需要为每个接口生成接口文档,而手写word文档实时性差
<!--引入swagger2依赖-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
<!--图形化依赖-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
考虑版本不兼容问题
@Configuration public class Swagger2Config { //创建swagger实例 @Bean public Docket docket() { Docket docket= new Docket(DocumentationType.SWAGGER_2) .apiInfo(getInfo())//设置接口文档的信息 .select() .apis(RequestHandlerSelectors.basePackage("com.zmq.controller")) //指定为那些路径下得到类生成接口文档 .build() ; return docket; } private ApiInfo getInfo(){ Contact DEFAULT_CONTACT = new Contact("ldw", "http://www.ldw.com", "110@qq.com"); ApiInfo DEFAULT = new ApiInfo("用户管理系统API", "该系统中的接口专门操作用户的", "v1.0", "http://www.baidu.com", DEFAULT_CONTACT, "dong", "http://www.jd.com", new ArrayList<VendorExtension>()); return DEFAULT; } }
@Configuration:Spring注解:声明该类为配置类
@Bean注解:用在方法上,必须用在配置类里面,将当前方法的返回值对象存入容器中
Docket对象说明:
- 构造方法:需要一个DocumentationType类对象,这里选择SWAGGER_2
Docket对象说明:
- apiInfo():用于配置swagger 信息,设置接口文档的信息
这个类对象仅有如下属性,且只有一个构造方法。
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
public class SbAndMybatisWorkApplication {
public static void main(String[] args) {
SpringApplication.run(SbAndMybatisWorkApplication.class, args);
}
}
@EnableSwagger2:开启swagger2的注解驱动
第一种:http://localhost:8080/swagger-ui.html
第二种:http://localhost:8080/doc.html
@Api(tags=“”):使用在接口类上,对接口类的说明
@ApiOperation(value=“”):接口方法上,对接口方法的说明
@ApiImplicitParams(
@ApiImplicitParam(name=“参数名”,value=“参数说明”,required=“是否必写”,dataType=“数据类型”)
):接口方法所有参数的概述
@RestController @RequestMapping("/user") @Api(tags = "用户管理") public class UserController { @Autowired private UserService userService; @PostMapping("/insert") @ApiOperation(value = "添加用户") @ApiImplicitParams( @ApiImplicitParam(name = "user" ,value="用户对象",required = true,dataType = "User") ) public R insert(@RequestBody User user){ return userService.isnert(user); } @GetMapping("/selectAll") public R selectAll(){ return userService.selectAll(); } }
@ApiModel(value=“”):使用在实体类上,对实体类的说明
@ApiModelProperty(value=“”):使用在实体类属性上,对属性的说明
@Data
@ApiModel(value = "用户实体类")
public class User {
private Integer id;
@ApiModelProperty(value = "用户姓名")
private String username;
@ApiModelProperty(value = "用户密码")
private String password;
}
在指定的时间执行相应的业务代码。场景:oss修改照片时,存在一个冗余照片。定时删除冗余照片
比如:下单,30分钟未支付就取消订单
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
@Configuration
public class QuartzConfig {
//定时业务代码
//定义定时规则
@Scheduled(cron = "0/5 * * * * ?")
public void show(){
System.out.println("*******************");
//发生短信 或者删除oss冗余文件 或者取消订单
}
}
cron:表达式
@SpringBootApplication
@MapperScan(basePackages = "com.zmq.dao")
//开启文档注解
@EnableSwagger2
//开启定时器注解
@EnableScheduling
public class SbAndMybatisWorkApplication {
public static void main(String[] args) {
SpringApplication.run(SbAndMybatisWorkApplication.class, args);
}
}
@EnableScheduling:开启定时器注解驱动
在线生成cron表达式:https://cron.ciding.cc/
MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上只做增强,不做改变,为简化开发、提高效率而生
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.7</version>
</dependency>
若因为MyBatis-Plus和MyBatis的依赖版本问题而报错,可以将MyBatis的依赖删除,因为MyBatis-Plus中包含MyBatis的依赖,且保证了版本的一致性
spring.application.name=sbAndMP
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/zmq1?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
#??mybatis???????
mybatis.mapper-locations=classpath:mapper/*.xml
#配置日志--sql日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
@TableName(value ="user") @Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable { /** * 主键ID */ @TableId private Long id; /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; /** * 邮箱 */ private String email; @TableField(exist = false) private static final long serialVersionUID = 1L; }
@Repository
public interface UserMapper extends BaseMapper<User> {
}
//生成代理实现类
@MapperScan("com.zmq.mapper")
public class SbAndMpApplication {
public static void main(String[] args) { SpringApplication.run(SbAndMpApplication.class, args);
}
}
测试:
@SpringBootTest class Qy174SpringbootMpApplicationTests { @Autowired private UserMapper userMapper; /** * 如果出现实体类和表名不一致。@TableName * 如果出现实体类属性名和字段名不一致。@TableField */ @Test void testSelectById() { User user = userMapper.selectById(1); System.out.println(user); } }
@Test void testInsert(){ //添加一条记录 // User user=new User(null,"qqq",19,"123@qq.com"); // //添加--把生成的主键也会赋值给对象中主键属性 // System.out.println("填进去:"+user); // int row = userMapper.insert(user); // System.out.println(row); // System.out.println("填进去后:"+user); //批量添加 // List<User> list=new ArrayList<>(); // list.add(new User(null,"aa",18,"123@qq.com")); // list.add(new User(null,"aaa",19,"223@qq.com")); // list.add(new User(null,"vb",19,"323@qq.com")); // list.add(new User(null,"bb",17,"323@qq.com")); // List<BatchResult> insert = userMapper.insert(list); //如果有id则修改 没有则添加 User user=new User(2,"sss",19,"123@qq.com"); userMapper.insertOrUpdate(user); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。