lombok 包使用 和 IJ idea 加 jar 的另一种方法。
左上角IntelliJ IDEA -> Preferences -> Plugins -> Marketplace 搜索 Lombok 下载。
左上角File -> Project Structure -> Libraries 添加 jar 包。
Preferences -> Build,Execution,Deployment -> Compiler -> Annotation Processors 勾选 Enable annotation processing。
用户数据库增删查改例子。lombok 用来注解直接生成set、get、构造器方法。
// user
@Data //自动生成set get
@AllArgsConstructor //设置一个全参构造器
@NoArgsConstructor // 设置一个无参构造器
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private Integer sex;
@Override
public String toString() {
String sexName = "";
if (sex == 1) {
sexName = "男";
} else if (sex == 2) {
sexName = "女";
} else {
sexName = "程序员";
}
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}
// 工具类
public class DBUtiles {
public static final String URL = "jdbc:mysql://localhost:3306/mydb1?characterEncoding=utf-8";
public static final String USERNAME = "root";
public static final String PASSWORD = "Liu01234";
public static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
public static Connection getConnection() {
try {
Class.forName(DRIVER_CLASS);
return DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return null;
}
public static void close(AutoCloseable ...args) {
for (AutoCloseable c : args) {
if (c != null) {
try {
c.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
// 用户管理
public class UserManager {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("欢迎");
while (true) {
System.out.println("1.添加 2.修改 3.删除 4.查询 5.退出");
int num = 0;
while (true) {
try {
String text = scanner.next();
num = Integer.parseInt(text);
break;
} catch (NumberFormatException e) {
System.out.println("请出入正确的编号");
}
}
if (num == 1) {
addUser();
} else if (num == 2) {
updateUser();
} else if (num == 3) {
deleteUser();
} else if (num == 4) {
getUserList();
} else if (num == 5) {
System.out.println("good bye...");
System.exit(-1);
}
}
}
private static void getUserList() {
Connection connection = DBUtiles.getConnection();
PreparedStatement prst = null;
ResultSet resultSet = null;
try {
prst = connection.prepareStatement("select * from t_user");
resultSet = prst.executeQuery();
List<User> userlist = new ArrayList<>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
int sex = resultSet.getInt("sex");
int age = resultSet.getInt("age");
User user = new User(id,username,password,sex,age);
userlist.add(user);
}
for (User user: userlist) {
System.out.println(user);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(resultSet, prst, connection);
}
}
private static void deleteUser() {
System.out.println("请输入要删除的用户名");
String username = scanner.next();
User user = getUserByUsername(username);
if (user != null) {
Connection connection = DBUtiles.getConnection();
PreparedStatement prst = null;
try {
prst = connection.prepareStatement("delete from t_user where username = ?");
prst.setString(1, user.getUsername());
int i = prst.executeUpdate();
if (i > 0) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(prst, connection);
}
} else {
System.out.println(username + "\t" + "用户不存在");
}
}
private static void updateUser() {
System.out.println("请输入要修改的用户名");
String username = scanner.next();
User user = getUserByUsername(username);
if (user != null) {
User newUser = inputUserInfo();
Connection connection = DBUtiles.getConnection();
PreparedStatement prst = null;
try {
prst = connection.prepareStatement("update t_user set password=?,age=?,sex=? where username=?");
prst.setString(1,newUser.getPassword());
prst.setInt(2,newUser.getAge());
prst.setInt(3,newUser.getSex());
prst.setString(4,user.getUsername());
int i = prst.executeUpdate();
if (i > 0) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(prst, connection);
}
} else {
System.out.println(username + "\t" + "用户不存在");
}
}
private static User inputUserInfo() {
System.out.println("输入用户的密码:");
String password = scanner.next();
System.out.println("输入用户的年龄:");
int age = scanner.nextInt();
System.out.println("输入用户的性别:");
int sex = scanner.nextInt();
User user = new User();
user.setPassword(password);
user.setSex(sex);
user.setAge(age);
return user;
}
private static User getUserByUsername(String username) {
if (username == null || username.length() == 0) {
System.out.println("用户名不能为空");
return null;
}
Connection connection = DBUtiles.getConnection();
PreparedStatement prst = null;
ResultSet resultSet = null;
User user = null;
try {
prst = connection.prepareStatement("select * from t_user where username = ?");
prst.setString(1,username);
resultSet = prst.executeQuery();
if (resultSet.next()) {
user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
user.setPassword(resultSet.getString("password"));
user.setAge(resultSet.getInt("age"));
user.setSex(resultSet.getInt("sex"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(resultSet,prst,connection);
}
return user;
}
private static void addUser() {
System.out.println("输入用户的姓名:");
String username = scanner.next();
User user = inputUserInfo();
user.setUsername(username);
Connection connection = DBUtiles.getConnection();
PreparedStatement prst = null;
try {
prst = connection.prepareStatement("insert into t_user(username,password,age,sex) value(?,?,?,?)");
prst.setString(1,user.getUsername());
prst.setString(2,user.getPassword());
prst.setInt(3,user.getAge());;
prst.setInt(4,user.getSex());;
int i = prst.executeUpdate();
if (i > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(prst, connection);
}
}
}
注意编码问题,jdbc:mysql://localhost:3306/mydb1?characterEncoding=utf-8。
数据库时间问题。java.sql.Date 继承 java.util.Date,大转小通过时间戳。
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入时间yyyyMMdd:");
String time = scanner.next();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
Date date = null;
try {
date = formatter.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
// 时间戳
long longdate = date.getTime();
// java 时间转 数据库时间
java.sql.Date sqldate = new java.sql.Date(longdate);
Connection connection = DBUtiles.getConnection();
String sql = "insert into t_date(dateTest) value(?)";
PreparedStatement statement = null;
PreparedStatement selectStatement = null;
ResultSet resultSet = null;
try {
statement = connection.prepareStatement(sql);
// 写入时间
statement.setDate(1,sqldate);
int i = statement.executeUpdate();
if (i > 0) {
System.out.println("添加成功");
selectStatement = connection.prepareStatement("select * from t_date");
resultSet = selectStatement.executeQuery();
while (resultSet.next()) {
int id = resultSet.getInt("id");
Date curdate = resultSet.getDate("dateTest");
String curDateString = formatter.format(curdate);
System.out.println(id + "\t" + curDateString);
}
} else {
System.out.println("添加失败");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtiles.close(resultSet,statement,connection);
}
}
}
Data Access Object,DAO 数据访问对象。DAO 实现了业务逻辑与数据库访问相分离。相当于 mvc,用户界面和业务模型封装,通过控制器调用。
将刚才的用户代码新建一个工程的方法。
复制一份刚才的工程文件夹,修改文件名和 .iml 名。
左上角File -> Project Structure -> Modules -> + Import Module,添加 .iml -> 右下角 OK。
修改工程包名如下。