持久化

学习推荐插件

easy code
alibaba java 代码规范
findbug 空指针异常发现

持久化层 dao

加入两个jar包
在maven镜像站中查找:
如下:

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

    <!-- https://mvnrepository.com/artifact/com alibaba/druid -->
    <dependency>
      <groupId> com.alibaba</groupId>
      <artifactId>druid </artifactId>
      <version>1.1.22</version>
    </dependency>

查询Driver地址很重要
在External Libraries里的mysql-connection-java里找
这个东西会有些许不同

在java.dao.impl里新建一个MySqlDbUtil.java用于配置数据库
如下:

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;

public class MySqlDbUtil {
    //配置连接池
    private static DruidDataSource dataSource = null;
    private static void initDateSource() throws Exception{
                            //抛出所有异常
        if(dataSource== null){ //等于空才创建
            dataSource = new DruidDataSource();
            dataSource.setUrl("jdbc:mysql://localhost:3306/stu_test");//传递数据库地址
            //如果数据库出现乱码,在stu_test后面加入useUnicode = true&characterEncoding=UTF-8
            //如果还不行就去数据库管理系统里修改字符编码
            dataSource.setDriverClassName("com.mysql.jdbc.Driver");//告知驱动类,入口类名
            dataSource.setUsername("root");//告知用户名,密码
            dataSource.setPassword("root");//密码

            dataSource.setInitialSize(1);//初始化配置
            dataSource.setMinIdle(1);//设置最小访问人数
            dataSource.setMaxActive(10);//设置最大访问人数

            //设置访问调整阀值,间隔20秒自检一次
            dataSource.setTimeBetweenEvictionRunsMillis(20000);

            //设置超时等待时间,20秒
            dataSource.setMaxWait(20000);

            //在空闲的时候不停去访问sql,返回1,以保持与sql的连接
            dataSource.setValidationQuery("select'x'");//返回x
            dataSource.setTestWhileIdle(true);//空闲时
            dataSource.setTestOnBorrow(true);//
        }
    }
    //获取连接的方法
    public static Connection getConnect() throws Exception{
        Connection conn = null;
        //判断
        initDateSource();//调用上面的判断方法
        conn = dataSource.getConnection();
        return conn;
    }
}

在Test文件夹下
新建一个测试类,写增删改查
TestDataSource.java
如下:

import cn.edu.mju.band2_36_text01_controller.dao.impl.MySqlDbUtil;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TestDataSource {

    @Test
    public void testConnection() {
        //建立连接
        try {
            MySqlDbUtil.getConnect();//光标移动到getConnect,点击try/catch,进行异常处理
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @Test
    //增
    public void testInsert(){
        //建立连接
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "INSERT INTO band(name,remark) VALUES(?,?)";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setString(1,"19软工2班");
            pstmt.setString(2,"这是备注信息");
            pstmt.execute();//执行对象
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    //改
        public void testUpdate(){
        //建立连接
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "UPDATE band SET name=?,remark=? WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setString(1,"新班级名称");//控制name
            pstmt.setString(2,"新班级的备注信息");//控制remark
            pstmt.setInt(3,1);//控制id,其中id是自增长的int
            pstmt.execute();//执行对象
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    //删除
    public void testDelete(){
        //建立连接
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "DELETE FROM band  WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setInt(1,1);//控制删除行数

            pstmt.execute();//执行对象,返回一个boolean值
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    //查询
    public void testFindAll(){
        //建立连接
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "SELECT * FROM band  ";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            ResultSet rs = pstmt.executeQuery();//返回一个结果集,类似excel
            while(rs.next()){
                Integer id =rs.getInt("id");
                String name = rs.getString("name");
                String remark = rs.getString("remark");
                System.out.println("id="+id+",name="+name+",remark="+remark);
            }
            rs.close();//关闭结果集
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    //查询
    public void testFindById(){
        //建立连接
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "SELECT * FROM band WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setInt(1,1);
            ResultSet rs = pstmt.executeQuery();//返回一个结果集,类似excel
            while (rs.next()){
                Integer id =rs.getInt("id");
                String name = rs.getString("name");
                String remark = rs.getString("remark");
                System.out.println("id="+id+",name="+name+",remark="+remark);
            }
            rs.close();//关闭结果集
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

接口IBandDao的实现类
BandDao.java如下:

import cn.edu.mju.band2_36_text01_controller.dao.IBandDao;
import cn.edu.mju.band2_36_text01_controller.entity.Band;
import cn.edu.mju.band2_36_text01_controller.entity.User;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class BandDao implements IBandDao {
    @Override
    //增加
    public boolean insert(Band band) {
        boolean result = false;
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "INSERT INTO band(name,remark) VALUES(?,?)";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setString(1, band.getName());
            pstmt.setString(2, band.getRemarks());
            result = pstmt.execute();//执行对象,并将值返回给result
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    @Override
    //删除
    public boolean delete(Integer id) {
        boolean result = false;
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "DELETE FROM band  WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setInt(1,id);//控制删除行数

            result = pstmt.execute();//执行对象,返回一个boolean值
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    @Override
    //修改
    public boolean update(Band band) {
        boolean result = false;
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "UPDATE band SET name=?,remark=? WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setString(1,band.getName());//控制name
            pstmt.setString(2,band.getRemarks());//控制remark
            pstmt.setInt(3,band.getId());//控制id,其中id是自增长的int
            result = pstmt.execute();//执行对象
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

    @Override
    //通过主键来查询
    public Band findById(int id) {
       Band band = null;
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "SELECT * FROM band WHERE id=?";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            pstmt.setInt(1,id);
            ResultSet rs = pstmt.executeQuery();//返回一个结果集,类似excel
            if (rs.next()){
                band = new Band();
                band.setId(rs.getInt("id"));
                band.setName(rs.getString("name"));
                band.setRemarks(rs.getString("remark"));

            }
            rs.close();//关闭结果集
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
        return band;
    }

    @Override
    //条件查询
    public List<Band> findAll() {
        List<Band> bands = new ArrayList<>();//定义一个列表变量
        try {
            Connection conn = MySqlDbUtil.getConnect();//获取连接对象
            String sql = "SELECT * FROM band  ";//注意大小写,将关键字区分开来
            PreparedStatement pstmt = conn.prepareStatement(sql);//准备statement对象,预处理sql语句,可以传sql参数
            // conn.createStatement();//创建对象,只能拼接sql语句
            ResultSet rs = pstmt.executeQuery();//返回一个结果集,类似excel
            while(rs.next()){//while遍历
                Band band = new Band();
                band.setId(rs.getInt("id"));
                band.setName(rs.getString("name"));
                band.setRemarks(rs.getString("remark"));
                bands.add(band);//将读取出来的band,一个个添加进bands里
            }
            rs.close();//关闭结果集
            pstmt.close();//关闭对象
            conn.close();//与连接池断开服务
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bands;
    }

    @Override
    public List<Band> find(Band band) {
        return null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值