@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> <!-- 连接数据库的地址 & 与连接符--> <property name="jdbcUrl">jdbc:mysql://localhost:3306/studentdb?useUnicode=true&characterEncoding=utf-8 &zeroDateTimeBechavior=convertToNull&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&characterEncoding=utf-8 &zeroDateTimeBechavior=convertToNull&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("删除成功"); } } }