发表于: 2021-11-08 12:07:12

1 970


任务一总结:

一.开发环境的安装与使用,

          我是用了1天半的时间装好IDEA JAVA MAVEN  Mysql 写出自己的第一个Helloword,在这个过程中配置和熟悉设置中最重要的一点是设置每个服务的PATH 路径,与配置文件,因为我使用的是MacOs 和服务器系统CentOs类似,大部分是使用命令行来使用的

1. 安装下载好MySql 服务后

 配置mysql 文件,因为都是包安装,没有有配置文件,系统默认的文件,直接启动服务就可以了

macOs启动 在系统偏好设置中的 Mysql 应用中直接启动,停止 与重置数据库就可以了

Centos 因为是yum包安装的  安装好以后 setemctl systemctl start mysqld.service

mysql使用中最容易遇到的问题是安装好以后系统默认的是没有密码的 ,用mysql直接可以进入数据中的,但是要用navicat 之类的工具访问数据库,也是为了安全性考虑,要设置密码。

使用 mysql -u -root -p 会提示你输入新密码

2 .安装MAVEN的问题与总结这个问题:

从网上下载好maven 后解压到自己需要的目录,因为我使用的是macos 以为自己就是管理员权限,在更改maven中settings.xml的时候总是提示只能读不能写,这个时候我以为我是有权限的,一直在更改,然后各种给权限,还是改不了文件属性,后面想到使用root 账号登陆,这才更改过来

设置setting中的localRepository的配置 改为<localRepository> /Users/kiven/App/repository<localRepository>

在<mirrors></mirrors>添加
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

来配置maven 阿里云远程中央仓库

3.下载并安装JDK

在终端输入 java -varsion

java version "17.0.1" 2021-10-19 LTS

Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)

Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

表示安装成功

4.安装下载Intellj IDEA 下载安装以后设置Preferences  >Build,Execution,Deployment > Build Tools >Maven 中
Maven home path:/Users/kiven/App/apache-maven-3.8.3
User settings files:/Users/kiven/App/apache-maven-3.8.3/conf/settings.xml
Local repository: /Users/kiven/App/repository 

5.下载安装navicat并连接mysql数据库

二.在完成任务过程中的收获

    在完成任务的过程中重新回顾,并学习SQL语句,并设计了报名表,并明白了任务中的create_at,update_at要求的意义。并设置为MyISAM 引擎,为了

测试插入数据更加快。

这个是表的字段设置

Idea中创建项目首先就是要学会编辑pom.xml,然后就去学习了xml的简史与各个字段的用法

学会JDBC的用法

需要在pom.xml加载mysql-connector-java-8.0.11.jar

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>

创建Conn类

import java.sql.Connection;       //导入Java.sql包
import java.sql.DriverManager;
import java.sql.SQLException;
//创建类Conn
public class Conn {
    //声明Connection 对象
    static Connection con;
    //建立返回值为Connection的方法
    public Connection getConnection(){
        try{
            //加载数据库驱动类
            Class.forName("com.mysql.jdbc.Driver");
            System.out.println("数据库驱动加载成功");
        }catch(ClassNotFoundException e){
            e.printStackTrace();
        }
        try{
            //通过访问数据库的URL获取数据库连接对象
            con= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/application","root","deng796443");
            System.out.println("数据库连接成功");
        }catch(SQLException e){
            e.printStackTrace();
        }
        return con;//按方法要求返回一个Connection对象
    }
    //主方法
    public static void main(String[] args){
        //创建本类对象
        Conn c=new Conn();
        //调用数据库连接的方法
        c.getConnection()
}

运行结果如下
数据库驱动加载成功
数据库连接成功

之后便学会了mybatis连接数据库的方法,了解了项目的结构组成,在这个过程中学会了Debug 调试的方法,与单元测试

并能设计数据库的表格

这是在在数据库服务中大批量插入数据项目中的项目结构

这个是插入数据的主要方法,详细的数据代码在上一篇日报中。

package com.jnshu.task.app
import com.jnshu.task.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.mybatis.spring.SqlSessionTemplate
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class MybatisTest {
private SqlSession sqlSession;
private UserMapper dao;
private InputStream is;
@BeforeAll
   public void init() throws IOException{
//1)读取配置文件
       is = Resources.getResourceAsStream("SqlMapConfig.xml");
//2)创建SqlSessionFactory
       SqlSessionFactoryBuilder sqlBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlFactory = sqlBuilder.build(is);
//3)使用工厂创建SqlSession对象 openSession(falshe) 为手动提交事务
       sqlSession = sqlFactory.openSession(false);
//4)使用SqlSession创建Dao接口的代理对象
       dao = sqlSession.getMapper(UserMapper.class);
}
@Test
   public void testBatchInsert() {
List<User> users = new ArrayList<User>();
int userCount = 10000;
User user = new User();
for (int i = 0; i != userCount; i++) {
user.setUsername("聂小倩");
user.setBirthday(new Date());
user.setSex("女");
user.setAddress("长沙");
user.setCourse("UI");
user.setEducation("本科");
user.setPhone("1889220708");
user.setSchool("深圳大学");
user.setTerget("不工作就没有放吃");
Date date = new Date();
date.setTime(108L);
user.setBirthday(date);
users.add(user);
}
//按批次插入
          for (int j=0;j<200;j++) {
dao.insertBatch(users);
//清理缓存
              sqlSession.clearCache();
//这里需要提交事务
              sqlSession.commit();
}
}
@AfterAll
   public void close() throws IOException{
//6)释放资源
       sqlSession.close();
is.close();
}
}

这个是插入数据库是是否按批次插入的测试表

               不按批次所用时间                                          按批次所用时间

  • 1w               3.56s                                                              3.56s
  • 2w              7.779s                                                             5.393s
  • 5w              13.426s                                                           9.594s
  • 10w             39s                                                                15.559s
  • 20w            1m37s                                                             26.868s
  • 30w             4m32s                                                           40.323s
  • 50w             内存不够                                                           58s

  • 100w                                                                                  1m44s
  • 1000w                                                                                22m

在这个测试过程中,先是使用的数据库引擎为Innodb;后面改为MyISAM引擎,插入速度有明显提升

最最主要的是在这个过程中都是积累经验的过程,各种软件安装与配置,软件的报错,程序的报错,然后根据软件的报错程序的报错一步步的去找答案,思考为什么会出这样的问题。有没有更好的方法来避免以后再出这样的问题。收获了解决问题的能力与如何设计数据库,如何配置服务器,如何使用命令行,学会了如何通过jdbc 来对数据库的增删改查,深度的去测试数据库的性能,测试索引对数据库的影响

经验就是多去写代码多跑程序,去慢慢了解各种类的用法,多去实践各种想法,看能不能行的通,思考还有没有其他的解决办法,会不会更好




返回列表 返回列表
评论

    分享到