文章目录
1、springboot整合mybatis
1)先在数据库建好
2)引入pom
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>jmeter_test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.1.6.RELEASE</version>
</parent>
<dependencies>
<!--web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 测试组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- jdbc组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- mybatis组件-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- druid组件-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.1</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- <version>1.18.24</version>-->
<!-- </dependency>-->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.study.MainStarter</mainClass>
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- <resources>-->
<!-- <resource>-->
<!-- <directory>src/main/java</directory>-->
<!-- <excludes>-->
<!-- <exclude>**/*.java</exclude>-->
<!-- </excludes>-->
<!-- <includes>-->
<!-- <include>**/*.xml</include>-->
<!-- </includes>-->
<!-- <filtering>false</filtering>-->
<!-- </resource>-->
<!-- <resource>-->
<!-- <directory>src/main/resources</directory>-->
<!-- <includes>-->
<!-- <include>**/*.*</include>-->
<!-- </includes>-->
<!-- <filtering>false</filtering>-->
<!-- </resource>-->
<!-- </resources>-->
</build>
</project>
3)resources目录下建好数据源配置 datasource.properties
#druid数据库连接池
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/studydb?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456789
# 清除缓存
spring.thymeleaf.cache=false
#配置mapper映射路径
mybatis.mapper-locations=classpath:mappers/armor/*.xml
#配置实体别名包路径
mybatis.type-aliases-package=com.study.model
#日志级别
logging.level.com.study.*=debug
# generator生成的位置目录
package.model=com.study.entity
package.mapper=com.study.dao.test
# springboot启动时的mapper位置
package.mappers=mappers.armor
# 索要生成实体类的具体表信息
database=studydb
table=ser_company
tablePojo=SerCompanyOperator
4)使用mybatis的generator生成实体类/mapper等,需配置generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<!-- 注意严格按照顺序 -->
<generatorConfiguration>
<!-- 配置文件 -->
<properties resource="datasource.properties"/>
<!-- 数据库驱动,可以实用java或jar路径,如果在配置文件中指定了,也可省略 -->
<!-- <classPathEntry location="my"/>-->
<!-- 会话实例 -->
<context id="MyContext" targetRuntime="MyBatis3" defaultModelType="flat">
<!-- <property name="beginningDelimiter" value="`"/>-->
<!-- <property name="endingDelimiter" value="`"/>-->
<!-- <property name="javaFileEncoding" value="UTF-8"/>-->
<!-- 为模型生成序列化方法-->
<!-- <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>-->
<!-- 为生成的Java模型创建一个toString方法 -->
<!-- <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>-->
<!-- 指定使用注释
<commentGenerator type="tiny.mybatis2.mbg.CommentGenerator">
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
<property name="addRemarkComments" value="true"/>
</commentGenerator>
-->
<!-- 数据库链接 -->
<jdbcConnection
driverClass="${spring.datasource.driverClassName}"
connectionURL="${spring.datasource.url}"
userId="${spring.datasource.username}"
password="${spring.datasource.password}">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<!-- 类型处理器,主要指数据库字段与代码字段转换情况 -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true"/>
</javaTypeResolver>
<!-- 实体类生成配置 -->
<javaModelGenerator targetPackage="${package.model}" targetProject="./src/main/java">
<!-- <property name="enableSubPackages" value="true"/>-->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 映射文件生成mapper.xml -->
<sqlMapGenerator targetPackage="${package.mappers}" targetProject="./src/main/resources">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 操作接口生成配置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="${package.mapper}" targetProject="./src/main/java">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 需要生成的数据库配置,不生成example需将后面那些配置成false -->
<table schema="${database}" tableName="${table}" domainObjectName="${tablePojo}" enableCountByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
enableUpdateByExample="false" selectByExampleQueryId="false">
</table>
</context>
</generatorConfiguration>
5)实体类和mapper生成后,使用的时候注意*mapper.xml中的sql的id要与Mapper代码中保持一致;
public interface SerCompanyOperatorMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table ser_company
*
* @mbg.generated Wed Feb 22 11:16:11 CST 2023
*/
int deleteByPrimaryKey(Integer companyId);
2、RestController和Controller的区别
1、RestController相当于Controller+ResponseBody;
- Controller的作用:声明该类是Controller层的Bean,将该类声明进入Spring容器中进行管理;
- ResponseBody的作用:表明该类的所有方法的返回值都直接进行提交而不经过视图解析器,且返回值的数据自动封装为json的数据格式;
- RestController的作用:包含上面两个的作用,且支持Restful风格的数据提交方式
2、采用RestController请求方式一般会采用Restful风格的形式(get/post/put/delete)
如果使用restful风格的接口直接使用@RestController最佳
//@Controller
@RestController
public class serCompanyController {
private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
@Autowired
private SerCompanyService serCompanyService;
@RequestMapping(method = RequestMethod.GET, value = "querySerCompanyById")
// @ResponseBody 使用@RestController注解,该注解就可以不写了
public SerCompanyOperator querySerCompanyById(Integer companyId) {
return serCompanyService.querySerCompanyById(companyId);
}
3、@Autowired和@Resource区别
@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上
但是他们的区别是:
- 提供方不同,@Autowired是spring提供的,@Resource是由J2EE提供的;
- 装配时默认类型不同,@Autowired只按type装配,@Resource默认是按name装配;
4、@RequestBody传参
使用@RequestBody注解时,用于接收Content-Type为application/json类型的请求,
数据类型是JSON:{“aaa”:“111”,“bbb”:“222”}
当入参只有一个参数的时候,此时** @RequestBody **的注解是否存在没有必要性
public ServerResponse<StrategyRuleParam> test(@RequestBody StrategyRuleParam tStrategyRule){
return auditService.audit(tStrategyRule);
}
5、@JsonIgnore
一般标记在属性或者方法上,返回的json数据即不包含该属性。此注解用于属性或者方法上(最好是属性上),作用和上面的@JsonIgnoreProperties一样。生成json 时不生成age 属性
public class user {
private String name;
@JsonIgnore
private int age;
6、解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题
需要检查的步骤:
1.是否mapper.java文件上使用了注解@Mapper 或者 在启动类上扫描了Mapper类 @MapperScan(“com.heima.model.mappers”) 【注意扫描的包名是否正确】
2.注意mapper.xml文件中的namespace是否正确指向到Mapper.java类的位置 【】
3.注意被调用的方法名在mapper.java中和mapper.xml中的id保持一致性
4.注意mapper.xml方法的parameterType尽量指定全路径的domain
5.注意Mapper.java在被调用的地方需要注入@Autowired
6.最终,一定一定要注意你建立的mapper.xml是xml文件,因为你创建的file在idea上默认会被识别为xml文件的图标,即使你没有指明后缀!!
7.如果resources中同时存在application-local.yml和datasource.properties配置文件,需要在yml配置中加上以下配置
mybatis:
mapper-locations: classpath*:/mappers/*.xml
7、==和equals()的区别
==:
a.如果比较的对象是基本数据类型,则比较数值是否相等;
b.如果比较的是引用数据类型,则比较的是对象的内存地址是否相等。
equals():
用来比较两个对象的内容是否相等
所以在判断文本是否相等时最好用equals()
8、HashMap转JsonString
// HashMap<String, HashMap<String, Object>> excelData
String s = JSONObject.toJSONString(excelData);