• springboot整合mybatis增删改查(四):完善增删改查及整合swgger2


    接下来就是完成增删改查的功能了,首先在config包下配置Druid数据连接池,在配置之前先把相关配置在application.preperties中完善

    application.preperties

    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    spring.datasource.initialSize=5
    spring.datasource.minIdle=5
    spring.datasource.maxActive=30
    # 配置获取连接等待超时的时间
    spring.datasource.maxWait=60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    spring.datasource.timeBetweenEvictionRunsMillis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    spring.datasource.minEvictableIdleTimeMillis=300000
    spring.datasource.validationQuery=SELECT 1 FROM DUAL
    spring.datasource.testWhileIdle=true
    spring.datasource.testOnBorrow=false
    spring.datasource.testOnReturn=false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    spring.datasource.poolPreparedStatements=true
    spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    spring.datasource.filters=stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多个DruidDataSource的监控数据
    spring.datasource.useGlobalDataSourceStat=true
    # Druid 监控 Servlet 配置参数
    spring.datasource.druidRegistrationUrl: /druid/* 
    spring.datasource.resetEnable: true 
    spring.datasource.loginUsername: admin
    spring.datasource.loginPassword: 1234
    # Druid 监控过滤相关配置参数
    spring.datasource.filtersUrlPatterns: /* 
    spring.datasource.exclusions: '*.js,*.gif,*.jpg,*.jpeg,*.png,*.css,*.ico,*.jsp,/druid/*'
    spring.datasource.sessionStatMaxCount: 2000 
    spring.datasource.sessionStatEnable: true 
    spring.datasource.principalSessionName: session_user_key 
    spring.datasource.profileEnable: true
    #druid datasouce database settings end
    
    

    上面配置完之后开始完成Druid数据连接池配置

    在config包->新建DruidDbConfig类

    DruidDBConfig类

    @Configuration
    public class DruidDBConfig {
       // private Logger logger = LoggerFactory.getLogger(DruidDBConfig.class);
    
        @Value("${spring.datasource.driver-class-name}")
        private String driverClassName;
    
        @Value("${spring.datasource.url}")
        private String dbUrl;
    
        @Value("${spring.datasource.username}")
        private String username;
    
        @Value("${spring.datasource.password}")
        private String password;
    
        @Value("${spring.datasource.initialSize}")
        private int initialSize;
    
        @Value("${spring.datasource.minIdle}")
        private int minIdle;
    
        @Value("${spring.datasource.maxActive}")
        private int maxActive;
    
        @Value("${spring.datasource.maxWait}")
        private int maxWait;
    
        @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")
        private int timeBetweenEvictionRunsMillis;
    
        @Value("${spring.datasource.minEvictableIdleTimeMillis}")
        private int minEvictableIdleTimeMillis;
    
        @Value("${spring.datasource.validationQuery}")
        private String validationQuery;
    
        @Value("${spring.datasource.testWhileIdle}")
        private boolean testWhileIdle;
    
        @Value("${spring.datasource.testOnBorrow}")
        private boolean testOnBorrow;
    
        @Value("${spring.datasource.testOnReturn}")
        private boolean testOnReturn;
    
        @Value("${spring.datasource.poolPreparedStatements}")
        private boolean poolPreparedStatements;
    
        @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")
        private int maxPoolPreparedStatementPerConnectionSize;
    
        @Value("${spring.datasource.filters}")
        private String filters;
    
        @Value("{spring.datasource.connectionProperties}")
        private String connectionProperties;
    
        @Bean     //声明其为Bean实例
        @Primary  //在同样的DataSource中,首先使用被标注的DataSource
        public DataSource dataSource(){
           DruidDataSource datasource = new DruidDataSource();
    
            datasource.setUrl(this.dbUrl);
            datasource.setUsername(username);
            datasource.setPassword(password);
            datasource.setDriverClassName(driverClassName);
    
            //configuration
            datasource.setInitialSize(initialSize);
            datasource.setMinIdle(minIdle);
            datasource.setMaxActive(maxActive);
            datasource.setMaxWait(maxWait);
            datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
            datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
            datasource.setValidationQuery(validationQuery);
            datasource.setTestWhileIdle(testWhileIdle);
            datasource.setTestOnBorrow(testOnBorrow);
            datasource.setTestOnReturn(testOnReturn);
            datasource.setPoolPreparedStatements(poolPreparedStatements);
            datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
            try {
                datasource.setFilters(filters);
            } catch (SQLException e) {
              //  logger.error("druid configuration initialization filter", e);
            }
            datasource.setConnectionProperties(connectionProperties);
    
            return datasource;
        }
    }
    

    上述配置中的日志已经注释了,如果需要配置可以在resources中加入logback-spring.xml:

    resources->logback-spring.xml

    logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration scan="true" scanPeriod="60 seconds" debug="false">
        <contextName>logback</contextName>
        <!--自己定义一个log.path用于说明日志的输出目录-->
        <property name="log.path" value="/log/jiangfeixiang/"/>
        <!--输出到控制台-->
        <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
            <!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                 <level>ERROR</level>
             </filter>-->
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <!--输出到文件-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${log.path}/logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="console"/>
            <appender-ref ref="file"/>
        </root>
    
        <!-- logback为java中的包 -->
        <logger name="com.example.springboootmybatis.controller"/>
    </configuration>
    

    UserServiec接口

    public interface UserService {
        /**
         * 查询所有用户
         */
        public List<User> getAllUser();
    
        /**
         * 保存用户
         * @param user
         */
        void saveUser(User user);
    
        /**
         * 根据id查询用户
         */
        User getById(Integer id);
    
        /**
         * 校验用户名
         * @param userName
         * @return
         */
        Boolean checkUserName(String userName);
    
        /**
         * 修改用户
         * @param user
         */
        void updateUser(User user);
    
        /**
         * 根据id删除用户
         * @param id
         */
        void deleteUser(Integer id);
    
        /**
         * 全选删除
         * @param useridList
         */
        void deleteBatchUser(List<Integer> useridList);
    }
    

    UserServiceImpl实现类

    @Service
    @Transactional
    public class UserServiceImpl implements UserService {
        //注入
        @Autowired
        private UserMapper userMapper;
    
        /**
         * 查询所有用户
         */
        @Override
        public List<User> getAllUser() {
            List<User> users = userMapper.selectByExample(null);
            return users;
        }
    
        /**
         * 根据id查询用户
         */
        @Override
        public User getById(Integer id) {
            User user = userMapper.selectByPrimaryKey(id);
            return user;
        }
    
        /**
         * 添加用户
         * @param user
         */
        @Override
        public void saveUser(User user) {
            userMapper.insertSelective(user);
        }
    
        /**
         * 校验用户名是否存在
         * @param userName
         * @return
         * 数据库没有这条记录,count==0,返回true
         */
        @Override
        public Boolean checkUserName(String userName) {
            UserExample example=new UserExample();
            UserExample.Criteria criteria=example.createCriteria();
            criteria.andUsernameEqualTo(userName);
            long count=userMapper.countByExample(example);
            if(count==0){
                return true;
            }
            return false;
        }
    
        /**
         * 修改用户
         * @param user
         */
        @Override
        public void updateUser(User user) {
            userMapper.updateByPrimaryKeySelective(user);
        }
    
        /**
         * 根据id删除(单个)
         * @param id
         */
        @Override
        public void deleteUser(Integer id) {
            userMapper.deleteByPrimaryKey(id);
        }
    
    
        /**
         * 批量删除
         * @param useridList
         */
        @Override
        public void deleteBatchUser(List<Integer> useridList) {
          /*  UserExample example=new UserExample();
            UserExample.Criteria criteria=example.createCriteria();
            criteria.andUseridIn(useridList);
            userMapper.deleteByExample(example);*/
    
        }
    }
    
    

    UserController

    @RestController
    @RequestMapping(value = "/user")
    public class UserController {
        //注入
        @Autowired
        private UserService userService;
    
        /**
         * 查询所有用户
         */
        @ApiOperation(value="获取用户列表")
        @RequestMapping(value = "/user",method = RequestMethod.GET)
        public List<User> getListAll(){
            List<User> listAll = userService.getAllUser();
            return listAll;
        }
    
        /**
         * 用户保存
         * @return
         */
        @ApiOperation(value = "添加用户",notes = "根据user添加用户")
        @ApiImplicitParam(name = "user",value = "用户user",required = true,dataType = "User")
        @RequestMapping(value = "/users",method = RequestMethod.POST)
        public String saveUser(@RequestBody User user){
            userService.saveUser(user);
            return "success";
        }
    
        /**
         * 根据id查询
         */
        @ApiOperation(value = "根据id查询")
        @ApiImplicitParam(name = "id",value = "用户id")
        @RequestMapping(value = "/{id}",method = RequestMethod.GET)
        public User getById(@PathVariable("id") Integer id){
            User user = userService.getById(id);
            return user;
        }
    
        /**
         * 校验用户名
         * @param username
         * @return
         */
        @ApiOperation(value = "校验用户名")
        @ApiImplicitParam(name = "userName",value = "用户名",required = true,dataType = "String")
        @RequestMapping(value = "/{username}",method = RequestMethod.POST)
        public Boolean checkUserName(@PathVariable("username")String username){
            Boolean aboolean = userService.checkUserName(username);
            if (aboolean){
                return true;
            }else {
                return false;
            }
        }
    
        /**
         * 修改用户
         * @param user
         */
        @ApiOperation(value = "修改用户")
        @ApiImplicitParam(name = "user",value = "用户",required = true,dataType = "User")
        @RequestMapping(value = "/user",method = RequestMethod.PUT)
        public String updateUser(@RequestBody User user){
            userService.updateUser(user);
            return "success";
        }
    
        /**
         * 根据id删除用户
         */
        @ApiOperation(value = "根据id删除用户")
        @ApiImplicitParam(name = "id",value = "用户id",required = true,dataType = "Integer")
        @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
        public String deleteUser(@PathVariable Integer id){
            userService.deleteUser(id);
            return "success";
        }
    }
    

    controller类中使用了swgger2如下:

    springboot中整合swgger2

    pom.xml

    <!--swgger2-->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.2.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.2.2</version>
            </dependency>
    

    springbootmybatis包下创建SwaggerConfig.java

    SwaggerConfig

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket createRestApi() {
            ApiInfo apiInfo = new ApiInfoBuilder()
                    .title("使用Swagger2构建RESTful APIs") //标题
                    .description("客户端与服务端接口文档") //描述
                    .termsOfServiceUrl("http://localost:8080") //域名地址
                    .contact("姜飞祥") //作者
                    .version("1.0.0") //版本号
                    .build();
    
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo)
                    .select()
                    .apis(RequestHandlerSelectors.basePackage("com.example.springbootmybatis"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
    }
    
    

    以上就算完成了,写的不好请见谅。具体测试请参考下面的springboot整合swgger2,之后访问http://localhost:8080/swagger-ui.html即可,和

    备注:

  • 相关阅读:
    jQuery链式编程时修复断开的链
    只是一个用EF写的一个简单的分页方法而已
    asp.net Core 获取应用程序所在目录的2种方式
    FineUI使用记录
    C#判断一个string是否为数字
    MVC中利用ViewBag传递Json数据时的前端处理方法
    基于Ajax的文件上传使用FileInput插件(使用谷歌翻译作者的原文,大致意思是对的,自己把握)
    ansible中tag的用法
    rabbitMQ中vhost虚拟主机的理解
    一些比较好的链接
  • 原文地址:https://www.cnblogs.com/smfx1314/p/10334335.html
Copyright © 2020-2023  润新知