Mysql(课时一)(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Mysql(课时一)

@A-3方案三:针对@A-2的优化,便于修改代码。

package dao;
import java.sql.*;
import entily.Student;
import util.*;
public class  StudentDao2  {
    Connection conn=null;
    public StudentDao2() {
        conn=DBUtil.getConnection();
    }
    //对学生增加
    public void  insert(int stuId , String stuName,String  stuSex,int  stuAge)  throws Exception{
        try {
              String sql="insert into studenta (stuId,stuName,stuSex,stuAge) values(?,?,?,?)";
          PreparedStatement ps=conn.prepareStatement(sql);
          ps.setInt(1,stuId);
          ps.setString(2,stuName);
          ps.setString(3,stuSex);
          ps.setInt(4,stuAge);
          //定义叁数
          long count= ps.executeLargeUpdate();
               if(count>0) {
                   System.out.println("学生插入成功");
               }
            } catch (Exception e) {
            e.printStackTrace();
        }
    }
        public  void  delete(int s)  throws Exception{
            Connection conn=DBUtil.getConnection();
                try {
                      String sql="select from studenta where stuId '?'";
                  PreparedStatement ps=conn.prepareStatement(sql);
                  ps.setInt(1, s);
                  //定义叁数
                  int count= (int) ps.executeLargeUpdate();
                       if(count>0) {
                           System.out.println("学生删除成功");
                       }
                    } catch (Exception e) {
                    e.printStackTrace();
                }
            }   
        public  void  update(int Id) {  
        try {
            Connection conn =   DBUtil.getConnection();
              String sql="update stu set stuSex='男' where stuId=?";
              PreparedStatement ps=conn.prepareStatement(sql);
              ps.setInt(1, Id);
               int count=(int) ps.executeLargeUpdate();
               if(count>0) {
                   System.out.println("学生修改成功");
               }
            } catch (Exception e) {
            e.printStackTrace();
        }
    }
        //根据性别查询
        public  void  find() {  
            try {
                Connection conn =   DBUtil.getConnection();
                 Statement stmt =conn.createStatement();
                  String sql="select * from stu ";
                   ResultSet rs =   stmt.executeQuery(sql);
                   while(rs.next()) {
                       System.out.printf("%s\t%s\t%s\t%s\n",
                      rs.getInt("stuid"),
                      rs.getString("stuName"),
                      rs.getString("stuSex"),
                      rs.getInt("stuAge"));
                   }
                   System.out.println("stu");
                } catch (Exception e) {
                e.printStackTrace();
        }
}

方案二:采用框架的形式对数据的增删改查。利用少量的java代码。

@B-0第一个框架c3p0-config.xml框架

@B1配置文件信息。

<c3p0-config>
  <!-- 使用默认的配置读取连接池对象 -->
  <default-config>
    <!--  连接参数 -->
    <!-- 加载JDBC的插件  -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <!--  连接数据库的地址  &amp 与连接符-->
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/studentdb?useUnicode=true&amp;characterEncoding=utf-8 &amp;zeroDateTimeBechavior=convertToNull&amp;serverTimeZone=UTC";</property>
     <!--  连接数据库的用户名,密码-->
    <property name="user">root</property>
    <property name="password">123456</property>
     <!-- 连接池参数 初始连接池创建5个 -->
    <!-- 设置初始化使用连接池的个数   最大的连接池的个数   3秒后自动断开 -->
    <!-- 连接池参数 -->
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">10</property>
    <property name="checkoutTimeout">3000</property>
  </default-config>
<!-- 针对不过功能 调用不同的连接池  -->
  <named-config name="otherc3p0"> 
    <!--  连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/book?useUnicode=true&amp;characterEncoding=utf-8 &amp;zeroDateTimeBechavior=convertToNull&amp;serverTimeZone=UTC";</property>
    <property name="user">root</property>
    <property name="password">123456</property>
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">8</property>
    <property name="checkoutTimeout">3000</property>
  </named-config>
</c3p0-config>

@B2对数据增删改查。

package com.db.text;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
public class JDBC1 {
    public Connection con=null;
    /**
     * 定义方法,用于连接数据库
     */
    public void getConnection() {
        //1.加载插件
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //2.准备连接数据的信息:要连接的数据库的地址      用户名     密码
            String url="jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimeZone=UTC";
            String username="root";
            String password="@2580A369b369@";
            //使用设备管理器类根据提供的信息连接数据库
            con=DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 增加一条的数据记录
     */
    @Test
    public void test1() {
        //添加数据
        getConnection();
        //判断是否连接成功
        if (con!=null) {
            //准备要执行的添加sql语句
            //在jdbc连接数据库中,使用占位符?
            String sql="insert into tb_students(name,age) VALUES(?,?)";
            //准备执行sql语句
            try {
                PreparedStatement ps=con.prepareStatement(sql);
                ps.setString(1, "你好 mysqls");
                ps.setInt(2, 22);
                int count=ps.executeUpdate();
                if (count>0) {
                    System.out.println("添加成功");
                }
                //执行完成之后,要断开数据库连接
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 修改一条数据内容
     */
    @Test
    public void test2() {
        //修改语句
        getConnection();
        if (con!=null) {
            String sql="update tb_students set age=? where id=?";
            try {
                PreparedStatement ps=con.prepareStatement(sql);
                ps.setInt(1, 15);
                ps.setInt(2, 1);
                int i=ps.executeUpdate();
                if (i>0) {
                    System.out.println("修改成功");
                }
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 删除一条数据内容
     */
    @Test
    public void test3() {
        //删除语句
        getConnection();
        if (con!=null) {
            String sql="delete from tb_students where id=?";
            try {
                PreparedStatement ps=con.prepareStatement(sql);
                ps.setInt(1, 5);
                int i=ps.executeUpdate();
                if (i>0) {
                    System.out.println("删除成功");
                }
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 查询的内容
     */
    @Test
    public void test4() {
        //查询语句
        //根据id=1查询学生的信息
        getConnection();
        if (con!=null) {
            String sql="select * from tb_students where id=?";
            try {
                PreparedStatement ps=con.prepareStatement(sql);
                ps.setInt(1, 1);
                ResultSet rs=ps.executeQuery();
                //因为查询出来的数据是一张表的结构,游标默认停留在第一行,是字段名
                //所有需要获得的数据要从第二行开始
                if (rs.next()) {
                    int id=rs.getInt(1);
                    String name=rs.getString(2);
                    int age=rs.getInt(3);
                    System.out.println(id+"--"+name+"--"+age);
                }
                //断开连接
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 修改的数据内容
     */
    @Test
    public void test5() {
        List<Map<String, Object>> oList=new ArrayList<Map<String,Object>>();
        //查询多行数据
        getConnection();
        if (con!=null) {
            String sql="select * from tb_student";
            try {
                PreparedStatement ps=con.prepareStatement(sql);
                ResultSet rs=ps.executeQuery();
                while (rs.next()) {
                    int id=rs.getInt(1);//4
                    String name=rs.getString(2);//王六
                    int age=rs.getInt(3);//25
                    Map<String, Object> oMap=new HashMap<String, Object>();
                    oMap.put("id", id);
                    oMap.put("name", name);
                    oMap.put("age", age);
                    oList.add(oMap);
                }
                //断开连接 colse()
                rs.close();
                ps.close();
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        //循环遍历集合,显示所有数据
        for (Map<String, Object> map : oList) {
            System.out.println(map);
        }
        //jdk1.8的新特性
        List<String> o=new ArrayList<String>();
        o.add("abc");
        o.add("123");
        o.add("456");
        o.add("789");
        //labdam表达式
        o.forEach(s->System.out.println(s));
    }

A-2第二个框架druid.properties框架

@B2文件配置信息;

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBechavior=convertToNull&serverTimeZone=UTC";
username=root
password=@2580A369b369@
initialSize=5
maxActive=10
maxWait=3000
package com.db.text;
import java.io.InputStream;
import java.util.Properties;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.pool.DruidDataSourceFactory;
public class JDBCTemplateDemo2 {
    public static JdbcTemplate  jt =null;
    static {
        //建立连接
                    InputStream is=DruidDemo.class
                            .getClassLoader().getResourceAsStream("com/db/text/druid.properties");
                    Properties properties =new Properties();
                    try {
                        properties.load(is);
                        DataSource ds=DruidDataSourceFactory.createDataSource(properties);
                        jt=new JdbcTemplate(ds);
                                //并不是断开连接,而是将用完的对象放入连接池
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
        }
    @Test
    public void test1() {
        //增加语句
        String sql="INSERT INTO `studentdb`.`tb_student2`(`name`, `age`, `sex`) VALUES (?, ?, ?)";
        int i = jt.update(sql,"黄二年",25,"男");
        if(i>0) {
            System.out.println("数据增加成功");
        }
    }
    //删除表的所有数据内容
    @Test
    public void text2() {
        String sql="DELETE FROM `studentdb`.`tb_student2` ";
        int i=jt.update(sql );
        if(i>0) {
            System.out.println("数据表成功删除");
        }
    }
    //修改数据
    @Test
    public void text3() {
        String sql="UPDATE `studentdb`.`tb_students` SET `name` = ?WHERE `id` = ?";
        int i=jt.update(sql ,"我是修改后的数据内容",1002);
        if(i>0) {
            System.out.println("数据修改成功");
        }
    }
    //查询语句
     @Test
    public void test5() {
    String sql="select *from tb_students";
    List<java.util.Map<String, Object>> olList =jt.queryForList(sql);
    olList.forEach(map->System.out.println(map));
} 
}

C-1MyBatis的环境配置信息。在mybatis-config.xml文件中。

<?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">
<!-- 注释的快捷方式: ctrl+shift+/ -->
<!--添加配置标签-->
<configuration>
    <!--将database.properties文件加载至该主配置文件进行统一管理-->
    <properties resource="database.properties"></properties>
    <!--设置项目的运行环境-->
    <!--注意:default标签上填写的内容必须要和id属性的内容一致-->
    <environments default="development">
        <environment id="development">
            <!--配置操作数据库的事务管理器-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"></property>
                <property name="url" value="${url}"></property>
                <property name="username" value="${user}"></property>
                <property name="password" value="${password}"></property>
            </dataSource>
        </environment>
    </environments>
    <!--将映射文件导入-->
    <mappers>
        <mapper resource="com/book/dao/Mapper.xml"></mapper>
    </mappers>
</configuration>

C-2MyBatis连接数据库的插件配置信息。database.properties文件中。

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mdb?useUnicode=true&characterEncoding=utf-8
user=root
password=@2580A369b369@

C-3MyBatisDao层中对数据的增删改查。Mapper.xml。

<?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">
<!--该映射文件作用:用于存储和管理需要操作的sql语句-->
<!--命名空间一般填写的是该映射文件所处在的包的路径-->
<!--命名空间+id-->
<!--数据反问层实现对数据的增删改查询的这些基础操作-->
<!--suppress ALL -->
<mapper namespace="com.book.dao">
    <!--查询book表中一共有多少本书-->
    <!--在编写映射文件的sql语句的时候,需要分析出是否需要传入数据,是否有返回值,并且要判断返回值类型-->
    <!-- resultType="int" 作用是表示该sql语句执行结束后,得到的返回值的类型 -->
    <!--不传参数 查一个数据-->
    <select id="getBookNumber" resultType="int">
        select count(*) from book
    </select>
    <!--查询书籍-->
    <!--@1 MyBatis框架中使用的占位符#{字段名}等价于jdbc?        ${字段名} 等价于java+连接符-->
    <!--parameterType="int"  该属性控制转入的数据的数据类型的数值
-->
    <select id="getBookName" resultType="String" parameterType="int">
        select name from book where id=#{id}
    </select>
<!--查询作者为曹雪芹 价格为100 的书名-->
    <!--如果sql需要转入两个条件 parameterType=""Map集合或者自定义实体类 -->
<select id="getBookName1" resultType="String" parameterType="Map">
    select name from book where author=#{author} and price=#{price}
</select>
<!--parameterType="com.book.entity.book"  实体类-->
    <select id="getBookName2" resultType="String" parameterType="com.book.entity.book">
    select name from book where author=#{author} and price=#{price}
</select> 
<!-- Map 集合方向-->
    <select id="getBookName3" parameterType="Map" resultType="com.book.entity.book" >
        select id, name ,count from book where  author=#{author} and price=#{price}
    </select
<!--传一个参数查多个字段数局-->
    <!--查书籍编号7 的书名 作者 数量-->
    <select id="getBookNameId" parameterType="int" resultType="Map" >
        select  name ,author,price,count from book where id=#{id}
    </select>
<!--传一个参数查多个字段数端-->
    <select id="getBookNameId1" parameterType="int" resultType="com.book.entity.book" >
        select  name ,author,price,count from book where id=#{id}
    </select>
<!--list里面调用map集合或者是实体类-->
    <select id="selectAll" resultType="Map">
        select *from book
    </select>
<!--查书名关于人字的-->
    <select id="selectlike" parameterType="String"  resultType="com.book.entity.book">
        select *from book where name = #{name}
    </select>
    <!--2022/3/11号-->
    <!-- @1 利用mysql增加语句<insert>  id   parameterType   resultType  -->
    <!--在执行增删改操作 数据库 一定返回 int 类型值-->
    <insert id="addBook" parameterType="map" >
        insert into book(name,author,price,count) values (#{name},#{author},#{price},#{count})
    </insert>
    2 利用mysql修改语句<update>   id   parameterType   resultType  -->
    <update id="updateBook" parameterType="com.book.entity.book">
        update book set price=#{price},count=#{count} where id=#{id}
    </update>
    <!-- @3利用mysql删除语句<delete>   id   parameterType   resultType  -->
    <!--查除图书为一的书籍信息-->
    <delete id="deleteBook" parameterType="String">
        delete from book where name =#{name}
   </delete>
</mapper>

C-4MyBatis测试类。Test的测试类。

package com.book.test;
import com.book.entity.book;
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.Test;
/**
 *
 * 2022/3/10
 */
import java.awt.print.Book;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class BookTet2 {
    SqlSession ss = null;
    public void init() {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //创建sql工厂生成器
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            //获得工厂对象
            SqlSessionFactory factory = builder.build(is);
            //通过工厂对象获得操作sql语句的对象
            /* SqlSession ss = factory.openSession();*/
            ss = factory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void one() {
        //将mybatis的主配置文件加载至java代码
        //查询的结果是一个单个的数据
        //命名空间+id的值
        init();
        int i = ss.selectOne("com.book.dao.getBookNumber");
        System.out.println("查询到的书籍总数量为第  :" + i + "本");
    }
    @Test
    public void two() {
        //将mybatis的主配置文件加载至java代码
        //查询的结果是一个单个的数据
        //命名空间+id的值
        init();
        /* String name=ss.selectOne("com.book.dao.getBookName",转入的数字类型);*/
        String name = ss.selectOne("com.book.dao.getBookName", 2);
        System.out.println("查询的书籍名称为:" + name);
    }
    @Test
    public void three() {
        /*封装到MaP集合数值名称与sql占位符保持一致*/
        init();
        Map<String, Object> map = new HashMap<>();
        map.put("author", "曹雪芹");
        map.put("price", 100);
        String name = ss.selectOne("com.book.dao.getBookName1", map);
        System.out.println("查询的书籍名称为:" + name);
    }
    @Test
    public void three1() {
        /*封装到MaP集合数值名称与sql占位符保持一致*/
        init();
        //创建book实体类
        book book = new book();
        book.setAuthor("曹雪芹");
        book.setPrice(100);
        String name = ss.selectOne("com.book.dao.getBookName2", book);
        System.out.println("查询的书籍名称为:" + name);
    }
    @Test
    public void four() {
        /*封装到MaP集合数值名称与sql占位符保持一致*/
        init();
        Map<String, Object> map = ss.selectOne("com.book.dao.getBookNameId", 7);
        System.out.println(map);
    }
    @Test
    public void four1() {
        /*封装到MaP集合数值名称与sql占位符保持一致*/
        init();
        //创建book实体类
        book book = new book();
        book = ss.selectOne("com.book.dao.getBookNameId1", 123);
        System.out.println(book);
    }
    @Test
    public void nine() {
        init();
        book book = new book();
        book.setPrice(134);
        book.setCount(56);
        book.setId(2);
        int i = ss.update("com.book.dao.updateBook", book);
        ss.commit();
        if (i > 0) {
            System.out.println("修改成功");
        }
    }
    @Test
    public void ten() {
        init();
        int i = ss.update("com.book.dao.deleteBook", "人生的意义");
        ss.commit();
        if (i > 0) {
            System.out.println("删除成功");
        }
    }
}


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 监控 关系型数据库
MySQL进阶(一)
MySQL进阶(一)
43 0
|
7月前
|
存储 安全 关系型数据库
MySQL进阶(二)
MySQL进阶(二)
32 0
|
存储 缓存 关系型数据库
132.【MySQL_进阶】(十)
132.【MySQL_进阶】
146 1
|
存储 SQL 关系型数据库
132.【MySQL_进阶】(二)
132.【MySQL_进阶】
77 0
|
SQL 关系型数据库 MySQL
132.【MySQL_进阶】(九)
132.【MySQL_进阶】
120 0
|
存储 SQL 数据库
132.【MySQL_进阶】(八)
132.【MySQL_进阶】
96 0
|
存储 SQL 关系型数据库
132.【MySQL_进阶】(六)
132.【MySQL_进阶】
119 0
|
存储 SQL 关系型数据库
132.【MySQL_进阶】(一)
132.【MySQL_进阶】
71 0
|
存储 SQL Java
132.【MySQL_进阶】(七)
132.【MySQL_进阶】
117 0
|
SQL 关系型数据库 MySQL
132.【MySQL_进阶】(五)
132.【MySQL_进阶】
137 0