java基础知识
StringBuilder 操作字符串
/*
public StringBuilder append(任意类型): 添加数据,并返回对象本身
public StringBuilder reberse() : 返回相反的字符序列
public int length(): 返回长度(字符出现的个数)
publis String toString(): 通过toString() 可以实现把StringBuilder转换为String
*/
StringBuilder res = new StringBuilder();
res.append("xx");//添加数据
res.reverse();//翻转字符串
res.length();//返回长度(字符出现的个数)
res.toString();//转换为String类型
常用API
Random //随机数
Math //数学运算
System //System 类包含一些有用的类字段和方法。它不能被实例化。
Object //所有类的父类
toString
equals //也是使用的== 进行比较 比较的是内存地址 重写可以比较内容,自动生成
BigDecimal // 精确计算 使用字符形式
//特殊:divide(另一个BigDecimal对象,精确几位,舍入模式)
自动装箱,自动拆箱
装箱:把基本数据类型转换为对应的包装类型
拆箱:把包装类型转换为基本数据类型
数组的高级操作
- 二分查找 (数组顺序按照大小顺序排列)每次去掉一半的查找范围
int max = arr.length - 1;
int min = 0;
while (min <= max){
int mid = (min + max) >> 1;
if (arr[mid] > num){
max = mid -1;
}else if (arr[mid] < num){
min = mid + 1;
}else{
return mid;
}
}
return -1;
- 冒泡排序
for (int i = 0; i < arr.length - 1 ; i++) {
for (int j = 0;j < arr.length - 1 - i;j++){
if (arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
- 快速排序
时间
Date() //当前时间
Date(毫秒) //根据毫秒获取日期 long格式
SimpleDateFormate //格式化Date日期 与 解析日期格式的日期
异常
- 首先会看程序中是否有异常处理 代码,如果没有,交给本方法的调用者,也就是虚拟机,虚拟机针对于异常做了那些事情?
- 将异常信息打印出来
- 停止程序运行,哪里出现了异常,就在哪里停止。
异常处理
throws
编译时异常,因为在编译时就会进行检查,一定要在方法后面进行显示声明
运行时异常,因为是在运行时才会发生,可以不在方法名后面进行声明
集合 Collection
集合
Collection 单列几个
- List
List集合特点: - 有序:存储和取出的顺序一直 - 有索引:可以通过索引取出元素 - 可重复:存储的元素可以重复 List集合特有的方法: - add 在指定位置插入指定的元素 - remove 移除指定索引处的元素 - set 修改指定索引处的元素 - get 获取指定索引的元素
ArrayList
LinkedList
Set 不可重复
HashSet
TreeSet
- List
Map 双列结合
- HashMap
- TreeMap
遍历集合:Iterator
- For 如果操作需要用到索引,使用for
- 迭代器 Iterator 如果需要删除元素,使用迭代器
- 增强for 如果仅仅只是遍历,使用增强for
File类 表示文件的位置,对文件以及文件夹进行操作
File path = new File("C:\\test\\a.txt");
boolean res = path.createNewFile(); //只能创建文件
//如果文件存在,不创建,返回false
//如果文件不存在,创建成功后,返回true
IO 对硬盘中的文件进行读写
Maven学习
- 安装自行看文档
命令
mvn compile //编译
mvn clean //删除编译
mvn test //做测试使用的
mvn package //打包
mvn install //安装到本地仓库
UTF-8问题
- 解决
Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform depend
<project.build.sourceEncoding>
UTF-8
</project.build.sourceEncoding>
Assert
弃用
import junit.framework.Assert;
改为import org.junit.Assert;
POMxml配置项先关信息
xml头信息
project 根元素
modelVersion 对象模型版本号
groupId 项目
artifactId 项目名称
version 项目版本
packaging 项目最终是什么 jar包 就写jar
dependencies 项目运行依赖的资源
<?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/maven-v4_0_0.xsd">
<!--指定pom的模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--打包方式,web为war包,java程序为jar包-->
<packaging>war</packaging>
<name>web01</name><!--可以删掉-->
<!-- 组织id-->
<groupId>cn.zhangfayuan</groupId>
<!-- 项目id-->
<artifactId>web01</artifactId>
<!-- 版本号 release (完成版) snapshot(开发板)-->
<version>1.0-SNAPSHOT</version>
<!--设置当前工程的所有依赖-->
<dependencies>
<!-- 具体的依赖-->
<!-- <dependency>-->
<!-- <groupId></groupId>-->
<!-- <artifactId></artifactId>-->
<!-- </dependency>-->
</dependencies>
<!--构建插件-->
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8088</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
依赖管理
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
依赖传递
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<!-- 依赖传递,同样使用依赖管理的格式,在project02中的依赖,当前引入的程序中也可以进行使用 -->
<dependency>
<groupId>cn.zhangfayuan</groupId>
<artifactId>project02</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
可选依赖(不透明,隐藏依赖)
<!-- 依赖传递,同样使用依赖管理的格式,在project02中的依赖,当前引入的程序中也可以进行使用 -->
<dependency>
<groupId>logkit</groupId>
<artifactId>logkit</artifactId>
<version>1.0.1</version>
<optional>true</optional><!-- 可选依赖 -->
</dependency>
排除依赖
<dependency>
<groupId>cn.zhangfayuan</groupId>
<artifactId>project02</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion><!-- 排除依赖 -->
<groupId>logkit</groupId>
<artifactId>logkit</artifactId>
</exclusion>
</exclusions>
</dependency>
依赖的范围
简介
配置
scope
依赖传递的范围
Maven项目构建生命周期
- Maven对项目构建的生命周期划分为:
- clean:清理工作
- pre-clean:执行一些需要在clean之前完成的工作
- Clean:移除所有上一次构建生成的文件
- post-clean:执行一些需要在clean之后立刻完成的工作
- default:核心工作,例如:编译、测试、打包、部署等
- site:产生报告、发布站点等
IOC 入门案例
步骤
- 加载spring
- 创建资源
- 配置资源
- 使用资源
Ioc配置
bean
MyBatis学习
设置
1、pom文件中引入相关坐标
或者是以内包 libs
目录下,并加入包
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2、新增配置文件
UsersMapper.xml
[src目录下 或 resources资源目录下]
<?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="UsersMapper">
<select id="getAll" resultType="users"> <!-- 使用了类别名,全名 cn.pithy.bean.Users -->
SELECT * FROM users
</select>
<select id="findById" resultType="cn.pithy.bean.Users" parameterType="java.lang.Integer">
SELECT * from users where id = #{id}
</select>
<insert id="insert" parameterType="cn.pithy.bean.Users" useGeneratedKeys="true" keyProperty="id">
INSERT into users (username, password) values (#{username},#{password})
</insert>
<update id="update" parameterType="cn.pithy.bean.Users">
UPDATE users set username = #{username},password=#{password} where id = #{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
DELETE from users where id = #{id}
</delete>
</mapper>
3、新增核心配置文件
MybatisConfig.xml
[src目录下 或 resources资源目录下]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 类名起别名 -->
<typeAliases>
<typeAlias type="cn.pithy.bean.Users" alias="users" />
</typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="jdbc"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:8889/sprinigboot_data"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UsersMapper.xml" />
</mappers>
</configuration>
4、编写对象类
5、编写程序
public class UsersDao {
public List<Users> getAll() throws IOException {
//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml");
//实例化Sql session工厂对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
//通过工厂对象获取sql session 对象
// SqlSession sqlSession = build.openSession(true); 自动提交事务
SqlSession sqlSession = build.openSession();
//执行xml中的sql语句
List<Users> users = sqlSession.selectList("UsersMapper.getAll");
//释放资源
sqlSession.close();
resourceAsStream.close();
return users;
}
public Users getById(int id) throws IOException{
InputStream resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
// SqlSession sqlSession = build.openSession(true); 自动提交事务
SqlSession sqlSession = build.openSession();
Users user = sqlSession.selectOne("UsersMapper.findById", id);
sqlSession.close();
resourceAsStream.close();
return user;
}
public void insert() throws IOException{
InputStream resourceAsStream = Resources.getResourceAsStream("MybatisConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
// SqlSession sqlSession = build.openSession(true); 自动提交事务
SqlSession sqlSession = build.openSession();
Users user = new Users();
user.setUsername("woCao");
user.setPassword("99999999");
int insert = sqlSession.insert("UsersMapper.insert", user);
if (insert > 0){
sqlSession.commit();
System.out.println("Success" + insert + user.getId());
}else {
System.out.println("Error" + insert);
}
sqlSession.close();
resourceAsStream.close();
}
public void update() throws IOException{
InputStream resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
Users user = sqlSession.selectOne("UsersMapper.findById", 6);
user.setUsername("woCaoLei哈哈哈");
int update = sqlSession.update("UsersMapper.update",user);
if (update > 0){
System.out.println("Success" + update + user.getId());
}else {
System.out.println("Error" + update);
}
sqlSession.close();
resourceAsStream.close();
}
public void delete(int id) throws IOException{
InputStream resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession(true);
int delete = sqlSession.delete("UsersMapper.delete", id);
if (delete > 0){
System.out.println("Success" + delete );
}else {
System.out.println("Error" + delete);
}
sqlSession.close();
resourceAsStream.close();
}
}
相关配置项
传统方式实现DAO层
控制层=》业务层=》接口层
package
—-dao
—-controller 控制层
|—-UsersController.java
—-service 业务接口层
|—-impl
|—-UsersServiceImp.java 业务接口实现
|—-UsersService.java 业务接口类
—- mapper 持久层接口、
|—-impl *** 接口代理方式实现的话 这个目录不要***
|—- UsersMapperImpl.java 接口的实现类
resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
sqlSession = build.openSession(true);
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class); //注意这个部分
list = mapper.getAll();
|—-UsersMapper.java 接口类 *** 定义接口类以及实现方法 ***
LOG4J 打印sql信息
设置步骤
导入jar包【pom文件中加入LOG4J坐标】
配置核心配置文件
<!-- 集成LOG4J日志 -->
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
- src目录下配LOG4J配置文件【maven项目配置在resources资源目录下】
MyBatis 进阶
接口代理的方式实现DAO持久层
分页(使用查看文档)
一对一查询
封装映射对象关系
一对多查询
多对多查询
MyBatis高级操作
MyBatis注解开发
常用单标操作注解
@Select(”sql语句“)
- bean下创建类文件
package cn.pithy.bean; public class Users { private int id; private String username; private String password; .... }
- mapper下创建接口文件
package cn.pithy.mapper; import cn.pithy.bean.Users; import org.apache.ibatis.annotations.Select; import java.util.List; /** * @author zhangfayuan */ public interface UsersMapper { /** * 查询所有 * @return List */ @Select("select * from users") public abstract List<Users> selectAll(); }
- 核心配置文件中配置映射关系
<!-- 配置映射关系 --> <mappers> <package name="cn.pithy.mapper"/><!-- mapper所在的包地址 --> </mappers>
- 然后直接使用
@Test public void selectAll() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("MyBatisConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(true); UsersMapper mapper = sqlSession.getMapper(UsersMapper.class); List<Users> users = mapper.selectAll(); for (Users user : users) { System.out.println(user); } sqlSession.close(); resourceAsStream.close(); }
@Insert(”sql语句“)
@Update(”sql语句“)
Delete(”sql语句“)
注解实现多表操作
一对一操作
MyBatis-plus+SpringBoot
1、安装SpringBoot
2、安装依赖
- 安装
mybatis-plus-boot-starter
<!-- 引入mybatis依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
- 安装
druid
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
3、入口文件扫描Dao
@SpringBootApplication
@MapperScan("cn.pithy.dao")
public class SpringTest1Application {
public static void main(String[] args) {
SpringApplication.run(SpringTest1Application.class, args);
}
}
4、编写配置文件
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot_data?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=zha
5、编写类
package cn.pithy.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
@Data
@AllArgsConstructor //有参构造
@NoArgsConstructor //无参构造
@ToString //tostring
@Accessors(chain = true) //开启链式操作
public class Users {
private int id;
private String name;
private int age;
private String address;
private String phone;
}
6、创建dao接口,继承BaseMapper
7、可以使用了
SpringBoot配置
读取配置内容
@Value
@Value("${message1}")
private String message1;
@RequestMapping("/getValue")
public String getValue()
{
String envGetName = env.getProperty("name");
return envGetName;
}
Environment
@Autowired
private Environment env;
@RequestMapping("/getValue")
public String getValue()
{
String envGetName = env.getProperty("name");
return envGetName;
}
@ConfigurationProperties
- 先定义一个类
package cn.pithy.springbootinit;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author zhangfayuan
*/
@Component
@ConfigurationProperties(prefix = "persion")
public class Persion {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Persion{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
- 注入
@Autowired
private Persion persion;
@RequestMapping("/getValue")
public String getValue()
{
return persion.toString();
}
profile不同环境切换
1、配置方式
多profile配置方式
## -- application.properties
spring.profiles.active=pro
## -- application-dev.properties
server.port=8081
## -- application-test.properties
server.port=8082
## -- application-pro.properties
server.port=8083
yml多文档方式
---
server:
port: 8081
spring:
profiles: dev
---
server:
port: 8082
spring:
profiles: test
---
server:
port: 8083
spring:
profiles: pro
---
spring:
profiles:
active: pro
2、profile激活方式
配置文件
上面的方式
虚拟机参数
-Dspring.profiles.active=dev
命令行参数
--spring.profiles.active=dev
注解大全
url: jdbc:mysql://47.92.25.174:3336/ai_algo_aat?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=CTT&allowMultiQueries=true&allowPublicKeyRetrieval=true
username: algo
password: algo123QAZ
目录结构
- 数据实体类
domain
:com.bajins.entity - 数据接口访问层
Dao
: com.bajins.mapper - 数据服务接口层
Service
:com.bajins.service - 数据服务接口实现层: com.bajins.service.impl
- 前端控制器层:com.bajins.controller
- 工具类库:com.bajins.utils
- 配置类:com.bajins.config
- 数据传输对象:com.bajins.dto