JDBC:MYSQL
JDBC是连数据库的统称 ,不仅只能练mysql
- file->setting->project str…->moudle->depen…->选择包
- maven在pom.xml中自动导包
Class.forname("com.mysql.jdbc.Driver");
String url="jdbc:mysql://master:3306/shujia";
String username="root";
String password="123456";
Connection conn=DriverManage.getConnection(url,username,password);
# PreparedStatement 和 Statement(sql注入的问题);
String sql="sql语句";
PreparedStatement ps=conn.preparedStatement(sql);
# 执行后去结果 1.执行DQL(获取结果集) 2.执行DML(受影响行数)
配置文件
方便与后期的维护和更更新
不应该写在代码中,应该从配置文件中读取
java中有一个资源目录 专门存放配置文件
1.创建一个普通目录
2.设置为资源目录
配置文件的后缀必须为peoperties
Peoperties p=new Peoperties();
# 通过反射读取配置文件
InputStream is=当前类.class.getClassLoader().getResourceAsStream("配置文件的名字");
# 加载配置文件
p.load(is);
# 通过k获取v
String v=p.getProperty("K")
Spring
是一个框架 一个模板 前后端的操作
Spring需要通过注解
Spring自动扫描当前包下的所有类(启动Spring的java类所在的包),如果有注解Controller和RestController会自动创建对象
@Controller:
1.让方法的返回值 当作数据返回到前端,需要手动加上注解才能实现@ResponseBody
2.让方法的返回值当做一个页面 去映射与之对应的页面
@RestController: 让方法的返回值 当作数据返回到前端
方法上的注解:
@GetMapping(“路径例如/test/show”):会让当前方法绑定一个前端地址(http://localhost:8080/test/show)
MVC
分层的思想
作用:方便与代码的书写和后期的维护
bean->controller->service->dao->util
bean:存放实体类(从数据库中获取的数据,应该用实体类返回)
controller:前后端交互(表现层)
service:业务逻辑判断(业务层)
dao:持久层(查询数据库的)
util:存放工具类(JDBCUtil)
面向接口开发
接口 API 数据接口:spring中加了注解的方法
spring中加了注解的方法:会绑定一个前端的地址,所有人都可以访问
1.为了保证数据的安全性,应该给API加个验证 String key
@GetMapping("/API/login")
public String login(String username,String password,String key){}
面向接口开发->分层
针对于dao和service的修改,可以直接使用一点一点满足所有的变化
dao会被service使用:一旦dao发生该变 与之对应的service也会发生改变
service会被controller使用一旦service发生该变 与之对应的controller也会发生改变
dao会被service使用
#dao中的代码用来连数据库
public class MysqlDao( #seriver new MysqlDao.selectById();
public string selectById();
)
public class HiveDao( #seriver new HiveDao.selectId
public string selectId();
)
书写Dao层
首先创建一个接口Dao:规定了方法做了统一
public interface UserDao(
String selectById();
)
下面的实体类叫做DaoImpl
书写Service
接口xxxService
实体类XXXServiceImpl
通过多态创建对象
xxxDao dao=new xxxDaoImpl();
数据库重启
spring项目正在运行 但是数据库所在的服务器重启
通过mysql连接池使用
DBCP:使用之后在给他放回去(conn.close())
/**
* 1.创建线程池
* 2.指定连接属性
*/
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://master:3306/shujia");
basicDataSource.setUsername("root");
basicDataSource.setPassword("123456");
/**
* 创建连接池中,连接数量为2
*/
basicDataSource.setInitialSize(2);
/**
* 允许最大连接
*/
basicDataSource.setMaxActive(5);
/**
* 超时时间
*/
basicDataSource.setMaxIdle(10);
C3P0
/**
* 1.创建池
* 2.指定连接信息
*/
ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass("com.mysql.jdbc.Driver");
ds.setJdbcUrl("jdbc:mysql://master:3306/shujia");
ds.setUser("root");
ds.setPassword("123456");
/**
* 创建连接池中,连接数量为2
*/
ds.setInitialPoolSize(2);