java高级基础知识点
1. Idea创建项目
认识idea可以创建的项目类别
以创建一个简单的java项目为例
提前安装好本地的java环境
配置jdk
创建一个具有模板的普通java项目
设置项目基本信息
项目基本框架
搭建项目结构
- dao层: 数据库访问对象包
- service层: 控制层中控制业务逻辑的服务包,也是应用逻辑处理的包
- vo 层: 模型对象包,通常存储实体类(跟数据库中的表相对应)
- servlet:控制层中负责转发操作的类包
以用户管理系统增删改查操作为例
设计数据库(具体见后面数据库的开发和设计)
创建实体类User.class
User.java
package com.ctgu.vo;
public class User {
private int id;
private String username;
private String password;
private String realName;
private String logoUrl;
private int age;
private String sex;
private int deptId;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getLogoUrl() {
return logoUrl;
}
public void setLogoUrl(String logoUrl) {
this.logoUrl = logoUrl;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getDeptId() {
return deptId;
}
public void setDeptId(int deptId) {
this.deptId = deptId;
}
}
创建UserDao.java与数据库相关联
1. 连接数据库
驱动程序名称与数据库系统相关。注册驱动程序的最常见方法是使用Java的Class.forName()方法将驱动程序的类文件加载到内存中,并自动注册它。
我们可以使用DriverManager.getConnection()方法打开一个连接。
有三种重载的DriverManager.getConnection()方法:
getConnection(String url);
getConnection(String url,Properties prop);
getConnection(String url,String user,String password);
常见的JDBC驱动程序名称和数据库URL
RDBMS | Class.forName | DriverManager.getConnection |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://localhost:3306/数据库名称 |
ORACLE | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@ hostname:port Number:databaseName |
DB2 | COM.ibm.db2.jdbc.net.DB2Driver | jdbc:db2: hostname:port Number / databaseName |
Sybase | com.sybase.jdbc.SybDriver | jdbc:sybase:Tds: hostname:port Number / databaseName |
2.创建主类,测试数据库是否连接成功
测试数据库是否连接成功
3.与数据库交互实现增删改查操作
定义相关变量
PreparedStatement用于多次执行SQL语句。
- JDBC中的所有参数都由?符号。?被称为参数标记。我们必须在执行SQL语句之前为每个参数提供值。
- PreparedStatement 中的setXXX()方法将值绑定到参数,其中XXX表示Java数据类型。
- 与Java数组或List中的集合框架不同。PreparedStatement中的参数索引从位置1开始。
ResultSet处理从SQL select语句返回的结果。
ResultSet对象维护一个指向结果集中当前行的游标。对于某一行,我们可以使用 java.sql.ResultSet 中的方法来获取数据逐列。
增:插入数据
删:根据用户名删除用户
改:根据用户名修改对应用户名的密码
注意:此处若根据id修改密码updateById(User user)会出错。数据库中User的id设置为自动分配且自增的(从1开始自增),即此时在main方法中定义的user的id为0(只有当定义的user数据已经存储到数据库中才会为其分配具体的id值),则此时传到updateById中的user的id为0,数据库中查询不到id为0的记录,故会出错。
查:根据用户名查找用户
查找所有用户
UserDao.java
package com.ctgu.dao;
import com.ctgu.vo.User;
import java.sql.*;
import java.util.*;
public class UserDao {
// 连接数据库
Connection con;
// 与数据库相联系,将想要执行的操作在数据库中体现出来
PreparedStatement pstate;
// 处理从SQL select语句返回的结果,维护一个指向结果集中当前行的游标
ResultSet rset;
public UserDao() throws SQLException, ClassNotFoundException {
// 连接数据库
// 注册JDBC驱动程序
Class.forName("com.mysql.jdbc.Driver");
// 加载驱动程序后,使用DriverManager.getConnection()方法打开一个连接
this.con = DriverManager.getConnection("jdbc:mysql://localhost:3306/java-work01","root","root");
if (con != null){
System.out.println("数据库连接成功!!");
System.out.println("---------------------------------------------------");
}
else{
System.out.println("数据库连接失败");
System.out.println("---------------------------------------------------");
}
}
// 增加
public int insert(User user) throws SQLException {
String sql = "insert into users(username,password,real_name,logo_url,age,sex,dept_id) values(?,?,?,?,?,?,?)";
// pstate准备插入到数据库中的一条记录,pstate中存放即将插入的数据
pstate = con.prepareStatement(sql);
pstate.setString(1,user.getUsername());
pstate.setString(2, user.getPassword());
pstate.setString(3, user.getRealName());
pstate.setString(4, user.getLogoUrl());
pstate.setInt(5,user.getAge());
pstate.setString(6, user.getSex());
pstate.setInt(7,user.getDeptId());
// executeUpdate执行操作并跟新数据库
return pstate.executeUpdate();
}
// 删除
public void deleteByUsername(String username) throws SQLException {
String sql = "delete from users where username = ?";
pstate = con.prepareStatement(sql);
pstate.setString(1, username);
pstate.executeUpdate();
}
// 修改用户密码
public int updatePassword(User user) throws SQLException {
String sql = "update users set password = ? where username = ?";
pstate = con.prepareStatement(sql);
pstate.setString(1,user.getPassword());
pstate.setString(2,user.getUsername());
return pstate.executeUpdate();
}
// 根据用户名查找用户
public User findByUsername(String username) throws SQLException {
String sql = "select * from users where username = ?";
pstate = con.prepareStatement(sql);
pstate.setString(1,username);
// executeQuery执行命令并返回查询结果
ResultSet rset = pstate.executeQuery();
User user = new User();
if (rset.next()) {
user.setId(rset.getInt("id"));
user.setUsername(username);
user.setRealName(rset.getString("real_name"));
user.setAge(rset.getInt("age"));
user.setSex(rset.getString("sex"));
user.setLogoUrl(rset.getString("logo_url"));
user.setPassword(rset.getString("password"));
user.setDeptId(rset.getInt("dept_id"));
}
return user;
}
// 查找所有用户
public List<User> findAll() throws SQLException {
String sql = "select * from users";
pstate = con.prepareStatement(sql);
ResultSet rset = pstate.executeQuery();
List<User> userList = new ArrayList<User>();
while (rset.next()){
User user = new User();
user.setId(rset.getInt("id"));
user.setUsername(rset.getString("username"));
user.setRealName(rset.getString("real_name"));
user.setAge(rset.getInt("age"));
user.setSex(rset.getString("sex"));
user.setLogoUrl(rset.getString("logo_url"));
user.setPassword(rset.getString("password"));
user.setDeptId(rset.getInt("dept_id"));
userList.add(user);
}
return userList;
}
// 输出用户信息
public static void printUserInfo(User user){
System.out.println("id = " + user.getId() + ", username = " + user.getUsername() + ", password = " + user.getPassword() +
", realName = " + user.getRealName() + ", age = " + user.getAge() + ", sex = " + user.getSex() +
", deptId = " + user.getDeptId() +", logoUrl = " + user.getLogoUrl() + "\n");
}
// 创建实体对象
public static User createUser(int age, String sex, String username, String realName, String password, String logoUrl, int deptId){
User user = new User();
user.setAge(age);
user.setSex(sex);
user.setUsername(username);
user.setLogoUrl(logoUrl);
user.setPassword(password);
user.setRealName(realName);
user.setDeptId(deptId);
return user;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// 创建数据库访问对象
UserDao dao = new UserDao();
// 创建实体对象
User user1 = createUser(18,"女","withlan","ljy","000427","/img/cat.png",3);
User user2 = createUser(3,"男","leon","wh","123456","/img/dog.png",1);
User user3 = createUser(20,"男","lan","wsy","000607","/img/pig.png",2);
User user4 = createUser(40,"女","Tom","rered","000331","/img/girl.png",3);
将数据插入到数据库中
// System.out.println("插入数据");
// dao.insert(user1);
// dao.insert(user2);
// dao.insert(user3);
// dao.insert(user4);
//
// printUserInfo(user1);
// printUserInfo(user2);
// printUserInfo(user3);
// printUserInfo(user4);
// System.out.println("---------------------------------------------------");
根据用户名删除用户
// System.out.println("删除用户名为\"withlan\"的用户数据");
// dao.deleteByUsername("withlan");
// System.out.println("---------------------------------------------------");
//
修改密码
// System.out.println("修改用户的密码为\"root\"");
// user2.setPassword("root");
// dao.updatePassword(user2);
// printUserInfo(user2);
// System.out.println("---------------------------------------------------");
//
// 根据用户名查找用户
System.out.println("根据id查找用户");
User user = dao.findByUsername("Tom");
printUserInfo(user);
System.out.println("---------------------------------------------------");
// 查找所有用户
System.out.println("查找所有用户");
List<User> uList = dao.findAll();
for (int i = 0;i < uList.size();i++){
System.out.println("i = " + i + "\n");
printUserInfo(uList.get(i));
}
System.out.println("---------------------------------------------------");
}
}
补充:导jar包
File->Project Structure->modules->项目->±>JARs or Directories->添加jar包
添加完成,直接运行即可。