学习推荐插件
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;
}
}