JavaWeb day01 约束 JDBC 数据库 02 Maven MyBatis Mapper
00-JavaWeb整体介绍

前端工程师负责网页    Java工程师负责JavaWeb程序和数据库搭建
01-JDBC简介-快速入门 使用Java语言操作关系型数据库的一套API



package com.itheima.jdbc;
import com.sun.jdi.ClassNotLoadedException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
//JDBC快速入门
public class JDBCDemo {
    public static void main(String[] args) throws Exception {
        //1.注册驱动 MySQL5 之后的驱动包 可以不写这行
        Class.forName("com.mysql.jdbc.Driver");
        //2.获取链接
        String url="jdbc:mysql://127.0.0.1:3306/db1";
        String username="root";
        String password="1234";
        Connection conn=DriverManager.getConnection( url,username ,password);
        //3.定义sql
        String sql="update account set money=2000 where id= 1";
        //4.获取执行sql的 对象statement
        Statement stmt =conn.createStatement();
        //5.执行sql
        int count=stmt.executeUpdate(sql); //受影响的 行 数
        //6.处理结果
        System.out.println(count);
        //7.释放资源
        stmt.close();
        conn.close();
    }
}02-JDBC-API详解-DriverManager(驱动管理类)



03-JDBC-API详解-Connection



04-JDBC-API详解-Statement

05-JDBC-API详解-ResultSet




为啥test rs 运行不来了??? 因为:import org.junit.Test;
06-JDBC-API详解-PreparedStatement-SQL注入演示

import com.itheima.pojo.Account;import org.junit.Test;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import java.util.ArrayList;import java.util.List;
/**
 * 用户登录
 */
public class JDBCDemo6_UserLogin {
    @Test
    public void testLogin() throws  Exception {
       //2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写
       String url = "jdbc:mysql:///db1?useSSL=false";
       String username = "root";
       String password = "1234";
       Connection conn = DriverManager.getConnection(url, username, password);
       // 接收用户输入 用户名和密码
        String name = "zhangsan";
        String pwd = "fhsjkfhdsk";
        String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'";
        // 获取stmt对象
        Statement stmt = conn.createStatement();
        // 执行sql
        ResultSet rs = stmt.executeQuery(sql);
        // 判断登录是否成功
        if(rs.next()){
            System.out.println("登录成功~");
        }else{
            System.out.println("登录失败~");
        }
        //7. 释放资源
        rs.close();
        stmt.close();
        conn.close();
    }
    /**
     * 演示SQL注入
     */
    @Test
    public void testLogin_Inject() throws  Exception {
        //2. 获取连接:如果连接的是本机mysql并且端口是默认的 3306 可以简化书写
        String url = "jdbc:mysql:///db1?useSSL=false";
        String username = "root";
        String password = "1234";
        Connection conn = DriverManager.getConnection(url, username, password);
        // 接收用户输入 用户名和密码
        String name = "hfkjsfhskj";
        String pwd = "' or '1' = '1";
        String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'";
        System.out.println(sql);
        // 获取stmt对象
        Statement stmt = conn.createStatement();
        // 执行sql
        ResultSet rs = stmt.executeQuery(sql);
        // 判断登录是否成功
        if(rs.next()){
            System.out.println("登录成功~");
        }else{
            System.out.println("登录失败~");
        }
        //7. 释放资源
        rs.close();
        stmt.close();
        conn.close();
    }
}

修改预先定义好的SQL语句
07-JDBC-API详解-PreparedStatement

08-JDBC-API详解-PreparedStatement-原理
09-数据库连接池-简介&DRUID使用

10-JDBC练习-环境准备
alt +鼠标左键: 整列调整
在实体类中,基本数据类型建议使用其对应的包装类型
  // 状态:0:禁用  1:启用
private Integer status             ;
//因为 int 的默认值为0 所以用integer 对象的默认值为null
11-JDBC练习-查询所有
代码写完了,但是运行不了 我推测是java包没导入成功的事
没错自动导入的Test包是import org.testng.annotations.Test;
 Error:(5, 30) java: 程序包org.test ng.annotations不存在
照着视频修改的包是import org.junit.Test;
//查询所有
    //1.SQL:select * from tb_brand;
    //2.参数 :不需要
    //3.结果 :List<Brand>
    @Test
    public void test( ) throws Exception {
        //1.获取connection
        //3.加载配置文件
        Properties prop =new Properties();
        prop.load(new FileInputStream("jdbc-demo/src/druid.properties"));
        //4.获取连接对象
        DataSource dataSource= DruidDataSourceFactory.createDataSource(prop);
        //5.获取数据库连接Connection
        Connection conn= dataSource.getConnection();
        //2.定义SQL
        String sql="select * from tb_brand";
        //3.获取pstmt 对象
        PreparedStatement pstmt = conn.prepareStatement(sql);
        //4.设置参数  无
        //5.执行SQL
        ResultSet rs=pstmt.executeQuery();
        //6.处理结果 List<Brand> 封装Brand对象,装载List集合
        Brand brand=null;
        List<Brand> brands = new ArrayList<>();
        while(rs.next()) {
            //获取数据
            int id=rs.getInt("id");
            String name=rs.getString("brand_name");
            String brandName=rs.getString("brand_name");
            String companyName=rs.getString("company_name");
            int ordered=rs.getInt("ordered");
            String description=rs.getString("description");
            int status=rs.getInt("status");
            //封装Brand对象
            brand =new Brand();
            brand.setId(id);
            brand.setBrandName(brandName);
            brand.setCompanyName(companyName);
            brand.setOrdered(ordered);
            brand.setDescription(description);
            brand.setStatus(status);
            //装载集合
            brands.add(brand);
        }
        System.out.println(brands);
        //7.释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }12-JDBC练习-添加&修改&删除
 Maven请看另一篇笔记
Maven项目管理 SSM 04 Maven高级 私服_软工菜鸡的博客-CSDN博客
01-MyBatis:
 免除了几乎所有JDBC代码以及设置参数和获取结果集的工作


02-MyBatis快速入门
 导入<!--mybatis 依赖-->报错
 The project group that produced the dependency, e.g. org.apache.maven.
maven工程关于pom.xml文件导入mybatis版本失败_等你说等我说的博客-CSDN博客_maven导入mybatis不行
!!!就nima无语 我卡这块最少卡一个小时就是解决不了
 后来重新打开apache-maven文件从里面翻出来org.mybatis !!!pom.xml就不报错了 服了
03-解决SQL语句警告提示
IDEA 配置连接数据库报错 Server returns invalid timezone. Need to set ‘serverTimezone‘ property._小薛的BUG日志的博客-CSDN博客
 04-Mapper代理开发

[FATAL] Non-parseable settings D:\黑马Java资料\Javaweb\apache-maven-3.6.1\conf\settings.xml: end tag name </mirror> must match start tag name <mirrors> from line 147 (position: TEXT seen ...</mirror>\n     -->\n    </mirror>... @160:14)  @ D:\黑马Java资料\Javaweb\apache-maven-3.6.1\conf\settings.xml, line 160, column 14
 真nima服了
 <mirror>    原来因为/是结束标签  弄反了        </mirror>
Maven 编译遇到 Process terminated【四种情况全部解决】_是我,Zack的博客-CSDN博客_maven process terminated
05-Mybatis核心配置文件

environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
06-Mybatis案例-环境准备
 蓝鸟代表Mapper接口 红鸟代表SQL映射文件
蓝鸟代表Mapper接口 红鸟代表SQL映射文件
[已解决] idea插件下载不了_罪恶老司机的博客-CSDN博客_idea下载不了插件
07-查询-查询所有&结果映射

 都是这三步 难点在于:面对不同需求 !!!SQL语句咋写;要不要参数;返回什么结果
java:提示程序包org.junit不存在时的解决方法_错在贪恋你温柔的博客-CSDN博客_java: 程序包org.junit不存在
         数据库表的字段名称 和 实体类的属性名称 不一样,则不能自动封装数据
         * 起别名: 对不一样的列名起别名,让别名和实体类属性名一样
              select id,brand_name as brandname, ordered      from tb_brand;
             *缺点: 每次查询都要定义别名 解决方法:定义SQL片段
                 *缺点: 不够灵活
         *resultMap(非常常用):就是将名字不一样的放在外面起别名
             id:唯一标识
             type:映射类型 支持别名
         *resultMap使用步骤:
             1.定义<resultMap>标签
             2.在<select>标签中,使用resultMap属性替换 resultType属性
        <resultMap id="brandResultMap" type="brand">
            <!--子标签:
            id:完成主键字段的映射
                column:表的列名
                property:实体类的属性名
            result:完成一般字段的映射-->
            <result column="brand_name" property="brandName" />
            <result column="company_name" property="companyName" />
        </resultMap>
    <select id="selectAll" resultMap="brandResultMap">
        select *
        from tb_brand;
    </select>08-查询-查看详情
 *参数占位符:
     1.#{}:会将其(#)替换为?(作为占位符) 为了防止SQL注入
     2.${}:直接把{}里面的拼SQL参数,会存在SQL注入问题
     3.使用时机:
         *参数传递的时候:#{}
         *表名或者列名不固定情况下:${} 存在SQL注入问题
  *参数类型: "parameterType: int"  一般都省略 麻烦
 *SQL语句中特殊字符处理:
         1.转义字符;
         2.CDATA区:
                 <![CDATA[
                       <(特殊字符)
                  ]]>
09-查询-条件查询

存在BUG,必须三个条件都有才能查询
10-查询-动态条件查询 动态SQL



 11-添加&修改功能


就加这两个属性就能返回 添加数据的主键 
 <set>
 <set>
12-删除功能

mybatis会将数组参数,封装为一个Map集合
     *默认:array =数组
     *使用@Param 改变map集合的默认key名称
      void deleteByIds( @Param("ids") int[] ids);
    </delete>
    <delete id="deleteByIds">
        delete from tb_brand where id
        in 
            <foreach collection="array" item="id" separator="," open="(" close=")">
                #{id}
            </foreach>
            ;
    </delete>13-参数传递


14-注解开发

本文来自博客园,作者:软工菜鸡,转载请注明原文链接:https://www.cnblogs.com/SElearner/p/17676719.html
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号