在简单项目实战之前:
首先了解以下MVC基本架构,它分为以下几个层次
而本次JDBC实战的简单项目是从下往上搭建的。当然我们不会做的涉及太难的东西,但是整个整体框架还是要深刻地概念,之后在实战的时候才会对每一步的目的有所了解。
环境:
- JDK1.8
- 编译器eclipse
- 数据库mysql
一.创建表
结果:
二.创建model层
⭐数据库连接
1.类文件目录
import java.sql.*;
public class DBUtil {
private static final String USER = "root";
private static final String PASS="root";
private static final String URL="jdbc:mysql://localhost/fortest";
private static Connection conn = null;
static
{
//1.注册驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2.连接数据库
try {
conn = DriverManager.getConnection(URL,USER,PASS);
} catch (SQLException e) {
e.printStackTrace();
}
}
//提供getter方法让外部获取数据库连接
public static Connection getConnection() {
return conn;
}
}
⭐User用户接口
?表的字段名称
?java类目录
?User.java里基本字段
private Integer id;
private String username;
private String mobile;
private Date create_date;
private String create_user;
别忘了创建getter setter以及toString 方法方便外部调用
⭐创建方法
比如addUser
public void addUser(User usr) throws SQLException {
//1.获得数据库连接
//System.out.println("Connecting to database...");
Connection conn = DBUtil.getConnection();
String sql = "insert into user" + "(username,mobile,create_date,create_user)" + " values(?,?,current_date(),?)";
//2.执行数据库操作
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1,usr.getUsername());
ptmt.setString(2, usr.getMobile());
ptmt.setString(3,usr.getCreate_user());
ptmt.execute();
System.out.println("Successfully add to database!");
}
而update和delete并没有太多值得提及的东西,可以根据自己的java基础以及对JDBC应用的基本理解自己完成。值得一提的是queryUser方法
我们为了提高灵活性,应该可以根据任意条件查询。因此在这里引入Map<String,Object>
具体实现不难,可以看代码理解
public User queryUser(List<Map<String,Object>> params) throws SQLException {
//System.out.println("Connecting to database...");
Connection conn = DBUtil.getConnection();
StringBuilder sb = new StringBuilder();
sb.append("select * from user where 1=1 ");
if(params != null && params.size()>0)
{
for(int i=0;i<params.size();i++)
{
Map<String,Object> param = params.get(i);
sb.append(" and " + param.get("name")+" " +param.get("rela") + " " + param.get("value"));
}
}
User usr = null;
PreparedStatement ptmt = conn.prepareStatement(sb.toString());
ResultSet rs = ptmt.executeQuery();
while(rs.next())
{
usr = new User();
usr.setId(rs.getInt("id"));
usr.setUsername(rs.getString("username"));
usr.setMobile(rs.getString("mobile"));
}
//System.out.println("Successfully get the users from database !");
return usr;
}
显然,只要在某个main函数中这样写
List<Map<String,Object>> params = new ArrayList<Map<String,Object>>();
Map<String,Object> param = new HashMap<String,Object>();
param.put("name", "username");
param.put("rela","=");
param.put("value", " '小霞 ' " );
params.add(param);
User usr = usrDao.queryUser(params);
System.out.println(usr.getId() + " " + usr.getUsername());
就能查询到username=“小霞”的用户信息。
三.搭建Control层
control层主要供视图层引用,所以实际上只是调用UserDao中的接口就行
//增
public void addUser(User usr) throws SQLException {
UserDao usrDao = new UserDao();
usrDao.addUser(usr);
}
//删
public void delUser(Integer id) throws SQLException {
UserDao usrDao = new UserDao();
usrDao.delUser(id);
}
//改
public void updateUser(User usr) throws SQLException {
UserDao usrDao = new UserDao();
usrDao.updateUser(usr);
}
//查1
public List<User> getAllUser() throws SQLException {
UserDao usrDao = new UserDao();
return usrDao.getAllUser();
}
//查2
public User queryUser(List<Map<String,Object>> params) throws SQLException {
UserDao usrDao = new UserDao();
return usrDao.queryUser(params);
}
四.搭建View层
view层主要是控制台的输出输入。可以自己实现。
结果:
当然这里面还有许多可以改进的地方,比如对输入不合理值的判断还不够全面,大家可以自己在发现的过程中提出来改进。
完整代码参考:
GitHub:https://github.com/llllllllr/java-learning/tree/master/JDBC/%E9%A1%B9%E7%9B%AE%E4%B8%80