Spring Boot基础使用

您所在的位置:网站首页 jedisselect方法 Spring Boot基础使用

Spring Boot基础使用

2023-03-24 21:28| 来源: 网络整理| 查看: 265

1.创建项目1.创建项目2.在pom.xml文件中引入依赖3.application.yml配置方式3.1 静态指定,就是运行项目前指定使用的环境3.2 动态切换4..在application-dev.yml下添加配置2.配置MybatisPlus1.添加依赖2.在application-dev.yml下添加配置3.配置Druid数据源1.添加依赖2.在application-dev.yml下添加配置多数据源配置3.配置Druid配置文件多数据源配置4.测试获得的数据源类型5.登录可能遇到的问题在启动时报错4.构建三层架构1.实体类2.controller层3.业务逻辑层4.dao层XML形式实现多表查询

1.创建项目

1.创建项目

创建spring initializar项目,引入spring web模块

2.在pom.xml文件中引入依赖

引入spring boot、热部署、MySQL、mybatis、log4j

4.0.0 org.springframework.boot spring-boot-starter-parent 2.2.5.RELEASE com.huang parking-lot-server 0.0.1-SNAPSHOT parking-lot-server Demo project for Spring Boot UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine mysql mysql-connector-java com.baomidou mybatis-plus-boot-starter 3.5.1 com.alibaba druid 1.1.16 org.springframework.boot spring-boot-maven-plugin

3.application.yml配置方式

3.1 静态指定,就是运行项目前指定使用的环境server: port: 9988spring: profiles: active: dev---server: port: 9981spring: profiles: prod

注意每个环境之间使用—-分隔(注意是三个—-分隔),默认第一个是主环境。可以在默认环境指定使用其他环境。

3.2 动态切换

通过运行参数指定环境

Idea : 在application主运行类鼠标右键 -》 Edit 项目名application -》Program arguments -》输入 —spring.profiles.active=环境名,如下图

通过maven的打jar包形式把项目打包,然后cmd运行,输入 java -jar 项目名.jar spring.profiles.active=环境名

通过vm参数指定环境vm参数也在上图中,就是上图的VM options ,然后输入:-Dspring.profiles.active=环境名,注意开头是-D。

4..在application-dev.yml下添加配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://127.0.0.1:3306/parkingLot?serverTimezone=UTC" username: "root" password: "root"

2.配置MybatisPlus

1.添加依赖 com.baomidou mybatis-plus-boot-starter 3.5.1

2.在application-dev.yml下添加配置mybatis-plus: # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml # 如果是放在resource目录 classpath:/mapper/*Mapper.xml mapper-locations: classpath:mybatis/mappers/*Mapper.xml #实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: cn.saytime.model global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 0 #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断" field-strategy: 1 #驼峰下划线转换 #db-column-underline: true #刷新mapper 调试神器 #refresh-mapper: true #数据库大写下划线转换 #capital-mode: true # Sequence序列接口实现类配置 #key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator #逻辑删除配置(下面3个配置) #logic-delete-value: 1 #logic-not-delete-value: 0 #sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector #自定义填充策略接口实现 #meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler configuration: map-underscore-to-camel-case: true cache-enabled: false #配置JdbcTypeForNull jdbc-type-for-null: 'null'

3.配置Druid数据源

1.添加依赖 com.alibaba druid 1.1.16

2.在application-dev.yml下添加配置spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: "jdbc:mysql://127.0.0.1:3306/parkingLot?serverTimezone=UTC" username: "root" password: "root" #指定数据源,不用默认的数据源 type: com.alibaba.druid.pool.DruidDataSource # 数据源其他配置 initialSize: 5 minIdle: 5 maxActive: 20 maxWait: 60000 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j maxPoolPreparedStatementPerConnectionSize: 20 useGlobalDataSourceStat: true connectionProperties: druid.stargeSql=true;druid.stat.slowSqlMillis=500

多数据源配置spring: datasource: master: jdbc-url: jdbc:mysql://192.168.102.31:3306/test username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver slave1: jdbc-url: jdbc:mysql://192.168.102.56:3306/test username: pig # 只读账户 password: 123456 driver-class-name: com.mysql.jdbc.Driver slave2: jdbc-url: jdbc:mysql://192.168.102.36:3306/test username: pig # 只读账户 password: 123456 driver-class-name: com.mysql.jdbc.Driver

3.配置Druid配置文件package com.example.config;import com.alibaba.druid.pool.DruidDataSource;import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;import java.util.Arrays;import java.util.HashMap;import java.util.Map;@Configurationpublic class DruidConfig { @ConfigurationProperties(prefix = "spring.datasource") @Bean public DataSource druid(){ return new DruidDataSource(); } /** * 配置Druid的监控 * 1.配置一个管理后台的Servlet * @return */ @Bean public ServletRegistrationBean statViewServlet(){ ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*"); Map initParams = new HashMap(); initParams.put("loginUsername","admin"); initParams.put("loginPassword","123456"); //默认就是允许所有访问 initParams.put("allow",""); initParams.put("deny","192.168.15.21"); bean.setInitParameters(initParams); return bean; } /** * 2、配置一个web监控的filter * @return */ @Bean public FilterRegistrationBean webStatFilter(){ FilterRegistrationBean bean = new FilterRegistrationBean(); bean.setFilter(new WebStatFilter()); Map initParams = new HashMap(); initParams.put("exclusions","*.js,*.css,/druid/*"); bean.setInitParameters(initParams); bean.setUrlPatterns(Arrays.asList("/*")); return bean; }}

多数据源配置import com.alibaba.druid.pool.DruidDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration// 扫描 Mapper 接口并容器管理@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")public class MasterDataSourceConfig { // 精确到 master 目录,以便跟其他数据源隔离 static final String PACKAGE = "org.spring.springboot.dao.master"; static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; @Value("${master.datasource.url}") private String url; @Value("${master.datasource.username}") private String user; @Value("${master.datasource.password}") private String password; @Value("${master.datasource.driverClassName}") private String driverClass; @Bean(name = "masterDataSource") @Primary public DataSource masterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "masterTransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager() { return new DataSourceTransactionManager(masterDataSource()); } @Bean(name = "masterSqlSessionFactory") @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(masterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(MasterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); }} import com.alibaba.druid.pool.DruidDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration// 扫描 Mapper 接口并容器管理@MapperScan(basePackages = ClusterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "clusterSqlSessionFactory")public class ClusterDataSourceConfig { // 精确到 cluster 目录,以便跟其他数据源隔离 static final String PACKAGE = "org.spring.springboot.dao.cluster"; static final String MAPPER_LOCATION = "classpath:mapper/cluster/*.xml"; @Value("${cluster.datasource.url}") private String url; @Value("${cluster.datasource.username}") private String user; @Value("${cluster.datasource.password}") private String password; @Value("${cluster.datasource.driverClassName}") private String driverClass; @Bean(name = "clusterDataSource") public DataSource clusterDataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driverClass); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } @Bean(name = "clusterTransactionManager") public DataSourceTransactionManager clusterTransactionManager() { return new DataSourceTransactionManager(clusterDataSource()); } @Bean(name = "clusterSqlSessionFactory") public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("clusterDataSource") DataSource clusterDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(clusterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(ClusterDataSourceConfig.MAPPER_LOCATION)); return sessionFactory.getObject(); }}

4.测试获得的数据源类型@SpringBootTestclass SpringBoot06DataJdbcApplicationTests { @Autowired DataSource dataSource; @Test void contextLoads() throws SQLException { System.out.println("获取的数据源===="+dataSource.getClass()); Connection connection = dataSource.getConnection(); System.out.println("获取的连接==="+connection); connection.close(); }}

5.登录

可登录localhost:9988/druid/login.html

可能遇到的问题

在启动时报错***************************APPLICATION FAILED TO START***************************Description:Failed to bind properties under 'spring.datasource' to javax.sql.DataSource: Property: spring.datasource.filters Value: stat,wall,log4j Origin: class path resource [application.yml]:24:14 Reason: org.apache.log4j.LoggerAction:Update your application's configuration

根据报错提示在配置文件的24行,查看配置文件,该行代码是 filters: stat,wall,log4j看报错原因Reason: org.apache.log4j.Logger,于是猜想少了log4j的相关依赖,在pom中引入相关依赖

log4j log4j 1.2.17

4.构建三层架构

如下图构建

1.实体类

entity类

package com.huang.parkinglotserver.entity;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;@TableName(value = "user")public class User { @TableId(value = "id") private String id; @TableField(value = "user_name") private String userName; @TableField(value = "user_password") private String userPassword; @TableField(value = "user_authority") private String userAuthority; //get、set方法 }

前端传输数据,AO接收

package com.huang.parkinglotserver.ao;public class UserAo { private String userName; private String userPassword;//get、set方法}

后端数据传送,VO传递

package com.huang.parkinglotserver.vo;public class UserVo { private String userName; private String userPassword; private String userAuthority;//get、set方法}

2.controller层package com.huang.parkinglotserver.controller;import com.huang.parkinglotserver.ao.UserAo;import com.huang.parkinglotserver.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping("/user")public class UserController { @Autowired private UserService userService; @PostMapping("/login") public boolean login(@RequestBody UserAo userAo) { userService.login(userAo); return true; } @POST @Path("/login") @Consumes({MediaType.TEXT_PLAIN}) public Response test(@QueryParam("a") Integer a) { return Response.ok(true).build(); }}

3.业务逻辑层

service层接口

package com.huang.parkinglotserver.service;import com.baomidou.mybatisplus.extension.service.IService;import com.huang.parkinglotserver.ao.UserAo;import com.huang.parkinglotserver.entity.User;public interface UserService extends IService { /** * 登录验证 * * @param userAo 账号、密码 * @return true成功、false失败 */ boolean login(UserAo userAo);}

service层接口实现类

package com.huang.parkinglotserver.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.huang.parkinglotserver.ao.UserAo;import com.huang.parkinglotserver.dao.UserDao;import com.huang.parkinglotserver.entity.User;import com.huang.parkinglotserver.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public boolean login(UserAo userAo) { User user = userDao.login(userAo.getUserName()); if(user.getUserPassword().equals(userAo.getUserPassword())){ return true; }else{ return false; } }}

4.dao层package com.huang.parkinglotserver.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.huang.parkinglotserver.entity.User;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Select;@Mapperpublic interface UserDao extends BaseMapper { /** * 登录验证 * @param userName 账号 * @return user账号密码信息 */ @Select("select * from user where user_name = '${value}'") User login(String userName);}

mybatisPlus的映射,一般在resource下的mapper

select u.id,u.user_name,u.user_password,u.user_authority from user u where user_name = "${value}"

XML形式实现多表查询

https://blog.csdn.net/weixin_42274148/article/details/121973513?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-8-121973513.pc_agg_new_rank&utm_term=mybatisplus+%E6%9F%A5%E8%AF%A2%E8%A1%A8%E4%B8%AD%E6%89%80%E6%9C%89%E6%95%B0%E6%8D%AE&spm=1000.2123.3001.4430在PriClassMapper中添加方法

public interface PriClassMapper extends BaseMapper { ClassDetail getDetailById(Serializable id);}

在XML文件中写SQL和映射

SELECT p.class_id AS class_id, p.nickname AS cname, s.student_id AS student_id, s.nickname AS sname FROM pri_class p JOIN student s ON p.class_id = s.class_id WHERE p.class_id = #{id}

再在service层中调用mapper中自定义的方法,通过getBaseMapper()来获取mapper的实例

public interface IPriClassService extends IService { ClassDetail getDetailById(Serializable id);} @Servicepublic class PriClassServiceImpl extends ServiceImpl implements IPriClassService { @Override public ClassDetail getDetailById(Serializable id) { return getBaseMapper().getDetailById(id); }}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3