JDBC上

JDBC实战--打通数据库

代码实现:

 1 package com.imooc.db;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8 
 9 import com.imooc.model.Goddess;
10 
11 public class DBUtil {
12 
13     private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
14     private static final String USER = "root";
15     private static final String PASSWORD = "123456";
16 
17     public static void main(String[] args) throws Exception {
18         // 1.加载驱动程序
19         Class.forName("com.mysql.jdbc.Driver");// 反射机制,通过一个类名去反向的将这个类加载到我们的环境中
20         // 2.获得数据库的连接
21         Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);// DriverManager驱动类
22         // 3.通过数据库的连接操作数据库,实现增删改查
23         Statement stmt = conn.createStatement();
24         // 执行查询,返回ResultSet对象
25         ResultSet rs = stmt
26                 .executeQuery("select user_name,age from imooc_goddess");
27         // rs.next()返回的是true,证明对象rs里面有数据
28         while (rs.next()) {
29             // 如果对象rs里面有数据,就会循环打印出来,如果没有,这个循环就不会走
30             System.out.println(rs.getString("user_name") + ","
31                     + rs.getInt("age"));
32         }
33 
34     }
35 }

 数据库数据

imooc/imooc_goddess

运行结果:

测试数据库连接成功,能够从数据库读取到数据。

控制台输出

模型(三层架构)主要包括两个部分:对应数据库映射、对数据库映射的抽象方法(CRUD:增、删、改、查)

控制层:控制数据流通过程。把数据拼装起来,展示给视图层

视图层:对数据的展示

 模型层:数据处理,业务逻辑

把视图层的展示、业务逻辑、数据存储的过程分离开来,通过控制层来协调控制。

视图层:是用来数据展示用的,为了给用户展示出程序运行的结果

控制层(Controller):更新模型层,更新视图层

 java基础——静态块:静态块执行的是最早的

 JDBC实战--搭建模型层(DAO层)

数据库对应的实体类

  1 package com.imooc.model;
  2 
  3 import java.util.Date;
  4 
  5 public class Goddess {
  6 //这些属性分别对应数据库的字段
  7     private Integer id;
  8     private String user_name;
  9     private Integer sex;
 10     private Integer age;
 11     private Date birthday;
 12     private String email;
 13     private String mobile;
 14     private String create_user;
 15     private String update_user;
 16     private Date create_date;
 17     private Date update_date;
 18     private Integer isdel;
 19 
 20     public Integer getId() {
 21         return id;
 22     }
 23 
 24     public void setId(Integer id) {
 25         this.id = id;
 26     }
 27 
 28     public String getUser_name() {
 29         return user_name;
 30     }
 31 
 32     public void setUser_name(String user_name) {
 33         this.user_name = user_name;
 34     }
 35 
 36     public Integer getSex() {
 37         return sex;
 38     }
 39 
 40     public void setSex(Integer sex) {
 41         this.sex = sex;
 42     }
 43 
 44     public Integer getAge() {
 45         return age;
 46     }
 47 
 48     public void setAge(Integer age) {
 49         this.age = age;
 50     }
 51 
 52     public Date getBirthday() {
 53         return birthday;
 54     }
 55 
 56     public void setBirthday(Date birthday) {
 57         this.birthday = birthday;
 58     }
 59 
 60     public String getEmail() {
 61         return email;
 62     }
 63 
 64     public void setEmail(String email) {
 65         this.email = email;
 66     }
 67 
 68     public String getMobile() {
 69         return mobile;
 70     }
 71 
 72     public void setMobile(String mobile) {
 73         this.mobile = mobile;
 74     }
 75 
 76     public String getCreate_user() {
 77         return create_user;
 78     }
 79 
 80     public void setCreate_user(String create_user) {
 81         this.create_user = create_user;
 82     }
 83 
 84     public String getUpdate_user() {
 85         return update_user;
 86     }
 87 
 88     public void setUpdate_user(String update_user) {
 89         this.update_user = update_user;
 90     }
 91 
 92     public Date getCreate_date() {
 93         return create_date;
 94     }
 95 
 96     public void setCreate_date(Date create_date) {
 97         this.create_date = create_date;
 98     }
 99 
100     public Date getUpdate_date() {
101         return update_date;
102     }
103 
104     public void setUpdate_date(Date update_date) {
105         this.update_date = update_date;
106     }
107 
108     public Integer getIsdel() {
109         return isdel;
110     }
111 
112     public void setIsdel(Integer isdel) {
113         this.isdel = isdel;
114     }
115 
116     @Override
117     public String toString() {
118         return "Goddess [id=" + id + ", user_name=" + user_name + ", sex="
119                 + sex + ", age=" + age + ", birthday=" + birthday + ", email="
120                 + email + ", mobile=" + mobile + ", create_user=" + create_user
121                 + ", update_user=" + update_user + ", create_date="
122                 + create_date + ", update_date=" + update_date + ", isdel="
123                 + isdel + "]";
124     }
125 }

模型层:CRUD(增、删、改、查)

控制层:接收视图层的参数,调用模型层,模型层把结果通知给控制层,控制层把结果更新给视图层,展示给用户,起着桥梁的作用

新的执行sql语句的方法:预编译sql语句

测试新增女神的方法:

 

测试结果:

数据库更新

 java.sql.Date是java.util.Date的子集

新增女神代码实现:

 1 //新增女神
 2     public void addGoddess(Goddess g) throws Exception{
 3         Connection conn=DBUtil.getConnection();//1、获得数据库连接
 4         //编译sql语句,给sql语句传递参数
 5         //2、拼写sql语句,执行SQL语句
 6         String sql="" +
 7                 "insert into imooc_goddess" +
 8                 "(user_name,sex,age,birthday,email,mobile," +
 9                 "create_user,create_date,update_user,update_date,isdel)" +
10                 "values(" +
11                 //参数用问号表示,相当于占位符,有几个参数就有几个问号,再给这些参数来进行赋值,到真正执行的时候,这些参数会加载到这个sql语句,把这个sql语句拼接完整,再去执行。这样就会减少对数据库操作
12                 //要是不用前台传递参数,可以在sql语句里面直接写入。例:current_date()
13                 "?,?,?,?,?,?,?,current_date(),?,current_date(),?)";
14         //将sql语句加载到驱动程序的执行程序中,但是并不直接执行,而是当它调用execute方法的时候才真正执行
15         //3、预编译
16         PreparedStatement ptmt=conn.prepareStatement(sql);
17             
18         //4、传参给预编译符?去赋值
19         //ptmt.setString(1,user_name);
20         //传递参数,user_name这个值不能写死,应该通过方法来传进来,这样我们就可以在视图层插入数据
21         //前台只需将值通过setter方法,就可以把数据集成的传递过来
22         ptmt.setString(1, g.getUser_name());//传递第一个参数,设置第一个?占位符的值
23         ptmt.setInt(2, g.getSex());
24         ptmt.setInt(3, g.getAge());
25         //ptmt.setDate(4, g.getBirthday());需要的参数是sql.Date类型的日期类型,但是传进来的值是java.util.Date,类型不符,需要转换
26         ////定义一个java.sql.Date类型的data,new Date(date),然后将我们的值g.getBirthday().getTime()传进去
27         //getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。
28         ptmt.setDate(4, new Date(g.getBirthday().getTime()));
29         ptmt.setString(5, g.getEmail());
30         ptmt.setString(6, g.getMobile());
31         ptmt.setString(7, g.getCreate_user());
32         ptmt.setString(8, g.getUpdate_user());
33         ptmt.setInt(9, g.getIsdel());
34         //5、调用execute方法的时候才真正执行
35         ptmt.execute();
36     }

新增女神功能测试:

 1 public static void main(String[] args) throws Exception {
 2         
 3         //1、测试新增女神功能
 4         GoddessDao g=new GoddessDao();
 5         
 6         //定义女神对象
 7         Goddess g1=new Goddess();
 8         
 9         g1.setUser_name("小夏");
10         g1.setAge(22);
11         g1.setSex(1);
12         g1.setBirthday(new Date());
13         g1.setEmail("xiaxia@imooc.com");
14         g1.setMobile("18766888866");
15         g1.setCreate_user("ADMIN");
16         g1.setUpdate_user("ADMIN");
17         g1.setIsdel(1);
18         
19         g.addGoddess(g1);
20     }

运行结果:

数据库表格imooc_goddess数据更新:

JDBC实战--搭建视图层

课程总结

检验代码采用MVC三层架构模式

模型层:实体类+DAO层(封装了对数据库操作的代码),和数据库打交道

Control(控制层):负责调用模型层

View(视图层):调用控制层

这种方式将应用程序和数据库分开了,没有中间的过程,没有中间ODBC,厂商API,也没有中间服务器,是直接和数据库打交道,所有效率上会很高。

具体代码实现:

模型层:实体类+DAO层

  1 package com.imooc.model;
  2 
  3 import java.util.Date;
  4 //模型层(实体类+DAO层:封装了对数据库操作的代码)
  5 //实体类第一个字母一定要大写
  6 public class Goddess {
  7 //这些属性分别对应数据库的字段
  8     private Integer id;
  9     private String user_name;
 10     private Integer sex;
 11     private Integer age;
 12     private Date birthday;
 13     private String email;
 14     private String mobile;
 15     private String create_user;//创建人
 16     private String update_user;//更新人
 17     private Date create_date;//创建时间
 18     private Date update_date;//更新时间
 19     private Integer isdel;//是否删除的标记。setIsdel(1):不删除
 20 
 21     public Integer getId() {
 22         return id;
 23     }
 24 
 25     public void setId(Integer id) {
 26         this.id = id;
 27     }
 28 
 29     public String getUser_name() {
 30         return user_name;
 31     }
 32 
 33     public void setUser_name(String user_name) {
 34         this.user_name = user_name;
 35     }
 36 
 37     public Integer getSex() {
 38         return sex;
 39     }
 40 
 41     public void setSex(Integer sex) {
 42         this.sex = sex;
 43     }
 44 
 45     public Integer getAge() {
 46         return age;
 47     }
 48 
 49     public void setAge(Integer age) {
 50         this.age = age;
 51     }
 52 
 53     public Date getBirthday() {
 54         return birthday;
 55     }
 56 
 57     public void setBirthday(Date birthday) {
 58         this.birthday = birthday;
 59     }
 60 
 61     public String getEmail() {
 62         return email;
 63     }
 64 
 65     public void setEmail(String email) {
 66         this.email = email;
 67     }
 68 
 69     public String getMobile() {
 70         return mobile;
 71     }
 72 
 73     public void setMobile(String mobile) {
 74         this.mobile = mobile;
 75     }
 76 
 77     public String getCreate_user() {
 78         return create_user;
 79     }
 80 
 81     public void setCreate_user(String create_user) {
 82         this.create_user = create_user;
 83     }
 84 
 85     public String getUpdate_user() {
 86         return update_user;
 87     }
 88 
 89     public void setUpdate_user(String update_user) {
 90         this.update_user = update_user;
 91     }
 92 
 93     public Date getCreate_date() {
 94         return create_date;
 95     }
 96 
 97     public void setCreate_date(Date create_date) {
 98         this.create_date = create_date;
 99     }
100 
101     public Date getUpdate_date() {
102         return update_date;
103     }
104 
105     public void setUpdate_date(Date update_date) {
106         this.update_date = update_date;
107     }
108 
109     public Integer getIsdel() {
110         return isdel;
111     }
112 
113     public void setIsdel(Integer isdel) {
114         this.isdel = isdel;
115     }
116 
117     //重写一个toString方法
118     @Override
119     public String toString() {
120         return "Goddess [id=" + id + ", user_name=" + user_name + ", sex="
121                 + sex + ", age=" + age + ", birthday=" + birthday + ", email="
122                 + email + ", mobile=" + mobile + ", create_user=" + create_user
123                 + ", update_user=" + update_user + ", create_date="
124                 + create_date + ", update_date=" + update_date + ", isdel="
125                 + isdel + "]";
126     }
127 }
  1 package com.imooc.dao;
  2 
  3 import java.sql.Connection;
  4 import java.sql.Date;
  5 import java.sql.PreparedStatement;
  6 import java.sql.ResultSet;
  7 import java.sql.SQLException;
  8 import java.util.ArrayList;
  9 import java.util.List;
 10 import java.util.Map;
 11 
 12 import com.imooc.db.DBUtil;
 13 import com.imooc.model.Goddess;
 14 //模型层(实体类+DAO层:封装了对数据库操作的代码)
 15 //执行业务方法
 16 public class GoddessDao {
 17 //新增女神
 18     public void addGoddess(Goddess g) throws Exception{
 19         Connection conn=DBUtil.getConnection();//1、获得数据库连接
 20         //编译sql语句,给sql语句传递参数
 21         //2、拼写sql语句,执行SQL语句
 22         String sql="" +
 23                 "insert into imooc_goddess" +
 24                 "(user_name,sex,age,birthday,email,mobile," +
 25                 "create_user,create_date,update_user,update_date,isdel)" +
 26                 "values(" +
 27                 //参数用问号表示,相当于占位符,有几个参数就有几个问号,再给这些参数来进行赋值,到真正执行的时候,这些参数会加载到这个sql语句,把这个sql语句拼接完整,再去执行。这样就会减少对数据库操作
 28                 //要是不用前台传递参数,可以在sql语句里面直接写入。例:current_date()
 29                 "?,?,?,?,?,?,?,current_date(),?,current_date(),?)";
 30         //将sql语句加载到驱动程序的执行程序中,但是并不直接执行,而是当它调用execute方法的时候才真正执行
 31         //3、预编译
 32         PreparedStatement ptmt=conn.prepareStatement(sql);
 33             
 34         //4、传参给预编译符?去赋值
 35         
 36         //ptmt.setString(1,user_name);
 37         //传递参数,user_name这个值不能写死,应该通过方法来传进来,这样我们就可以在视图层插入数据
 38         //前台只需将值通过setter方法,就可以把数据集成的传递过来
 39         ptmt.setString(1, g.getUser_name());//传递第一个参数,设置第一个?占位符的值
 40         ptmt.setInt(2, g.getSex());
 41         ptmt.setInt(3, g.getAge());
 42         //ptmt.setDate(4, g.getBirthday());需要的参数是sql.Date类型的日期类型,但是传进来的值是java.util.Date,类型不符,需要转换
 43         ////定义一个java.sql.Date类型的data,new Date(date),然后将我们的值g.getBirthday().getTime()传进去
 44         //getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。
 45         ptmt.setDate(4, new Date(g.getBirthday().getTime()));
 46         ptmt.setString(5, g.getEmail());
 47         ptmt.setString(6, g.getMobile());
 48         ptmt.setString(7, g.getCreate_user());
 49         ptmt.setString(8, g.getUpdate_user());
 50         ptmt.setInt(9, g.getIsdel());
 51         //5、调用execute方法的时候才真正执行
 52         ptmt.execute();
 53     }
 54     //修改女神
 55     public void updateGoddess(Goddess g) throws SQLException{//参数通过对象的形式Goddess g传进来
 56         Connection conn=DBUtil.getConnection();
 57         //sql语句之间加上空格,因为等到执行的时候会变成一行,如果不加空格的话,前后的字符就会在一起,这样就会报sql错误
 58         String sql="" +
 59                 //更新女神表
 60                 " update imooc_goddess " +
 61                 //设置用户名···等于新的值
 62                 " set user_name=?,sex=?,age=?,birthday=?,email=?,mobile=?, " +
 63                 //更新人,更新时间,是否删除
 64                 " update_user=?,update_date=current_date(),isdel=? " +
 65                 //通过where条件更新其中一条记录,而不是更新所有记录即整个女神表
 66                 " where id=? ";
 67         PreparedStatement ptmt=conn.prepareStatement(sql);
 68         
 69         ptmt.setString(1, g.getUser_name());
 70         ptmt.setInt(2, g.getSex());
 71         ptmt.setInt(3, g.getAge());
 72         ptmt.setDate(4, new Date(g.getBirthday().getTime()));
 73         ptmt.setString(5, g.getEmail());
 74         ptmt.setString(6, g.getMobile());
 75         ptmt.setString(7, g.getUpdate_user());
 76         ptmt.setInt(8, g.getIsdel());
 77         ptmt.setInt(9, g.getId());
 78         ptmt.execute();
 79     }
 80     //删除女神
 81     public void delGoddess(Integer id) throws SQLException{//参数不用传递对象,只需要传递一个id进来就可以了
 82         Connection conn=DBUtil.getConnection();
 83         
 84         String sql="" +
 85                 " delete from imooc_goddess " +
 86                 //根据主键id来删
 87                 " where id=? ";
 88         PreparedStatement ptmt=conn.prepareStatement(sql);
 89         //需要一个参数id就可以了
 90         ptmt.setInt(1, id);
 91         ptmt.execute();
 92     }
 93     //查询女神,相当于全部查询,不管这张表里面有对少条记录我们都会查询出来,没有加过滤条件
 94     public List<Goddess> query() throws Exception{
 95         List<Goddess> result=new ArrayList<Goddess>();
 96         
 97         Connection conn=DBUtil.getConnection();
 98         StringBuilder sb=new StringBuilder();
 99         sb.append("select id,user_name,age from imooc_goddess  ");//没有加过滤条件
100         
101         PreparedStatement ptmt=conn.prepareStatement(sb.toString());
102         //执行查询,返回ResultSet对象
103         ResultSet rs=ptmt.executeQuery();
104         
105         Goddess g=null;
106         //rs.next()返回的是true,证明对象rs里面有数据
107         while(rs.next()){
108             g=new Goddess();
109             g.setId(rs.getInt("id"));
110             g.setUser_name(rs.getString("user_name"));
111             g.setAge(rs.getInt("age"));
112             result.add(g);
113         }
114         return result;
115     }
116     
117     //优化的查询方法,加一个查询参数:女神姓名
118     //查询女神,相当于全部查询,不管这张表里面有对少条记录我们都会查询出来,没有加过滤条件
119         public List<Goddess> query(String name) throws Exception{
120             List<Goddess> result=new ArrayList<Goddess>();
121             
122             Connection conn=DBUtil.getConnection();
123             StringBuilder sb=new StringBuilder();
124             sb.append("select * from imooc_goddess  ");
125             
126             sb.append(" where user_name=? ");
127             //预编译sql语句
128             PreparedStatement ptmt=conn.prepareStatement(sb.toString());
129             //把参数传入
130             ptmt.setString(1, name);
131             //将sql语句打印出来
132             System.out.println(sb.toString());
133             //执行查询
134             ResultSet rs=ptmt.executeQuery();
135             
136             Goddess g=null;
137             //rs.next()返回的是true,证明对象rs里面有数据
138             //遍历结果集
139             while(rs.next()){
140                 g=new Goddess();
141                 g.setId(rs.getInt("id"));
142                 g.setUser_name(rs.getString("user_name"));
143                 g.setAge(rs.getInt("age"));
144                 g.setSex(rs.getInt("sex"));
145                 g.setBirthday(rs.getDate("birthday"));
146                 g.setEmail(rs.getString("email"));
147                 g.setMobile(rs.getString("mobile"));
148                 g.setCreate_date(rs.getDate("create_date"));
149                 g.setCreate_user(rs.getString("create_user"));
150                 g.setUpdate_date(rs.getDate("update_date"));
151                 g.setUpdate_user(rs.getString("update_user"));
152                 g.setIsdel(rs.getInt("isdel"));
153                 
154                 result.add(g);
155             }
156             return result;
157         }
158         
159     //通过一个参数一个参数传进来
160     //查询女神,参数:姓名、手机号、邮箱,按照女神的姓名、手机号、邮箱来查询
161     public List<Goddess> query(String name,String mobile,String email) throws Exception{
162         List<Goddess> result=new ArrayList<Goddess>();
163         
164         Connection conn=DBUtil.getConnection();
165         StringBuilder sb=new StringBuilder();
166         sb.append("select * from imooc_goddess  ");//全部查询,没有过滤条件
167         //加上查询参数
168         sb.append(" where user_name like ? and mobile like ? and email like ?");
169         
170         PreparedStatement ptmt=conn.prepareStatement(sb.toString());
171         //这边的查询参数是写死的,但可以通过集合方式传进来,更加便捷
172         ptmt.setString(1, "%"+name+"%");//%通配符
173         ptmt.setString(2, "%"+mobile+"%");
174         ptmt.setString(3, "%"+email+"%");
175         System.out.println(sb.toString());
176         ResultSet rs=ptmt.executeQuery();
177         
178         Goddess g=null;
179         while(rs.next()){
180             g=new Goddess();
181             g.setId(rs.getInt("id"));
182             g.setUser_name(rs.getString("user_name"));
183             g.setAge(rs.getInt("age"));
184             g.setSex(rs.getInt("sex"));
185             g.setBirthday(rs.getDate("birthday"));
186             g.setEmail(rs.getString("email"));
187             g.setMobile(rs.getString("mobile"));
188             g.setCreate_date(rs.getDate("create_date"));
189             g.setCreate_user(rs.getString("create_user"));
190             g.setUpdate_date(rs.getDate("update_date"));
191             g.setUpdate_user(rs.getString("update_user"));
192             g.setIsdel(rs.getInt("isdel"));
193             //循环放到集合里面,返回集合
194             result.add(g);
195         }
196         return result;
197     }
198     //不通过一个参数一个参数传进来,传递一个集合,通过集合的方式List ,把这些参数放到集合里面,然后再传进来,查询的条件也可以通过集合方式Map<String, Object>传进来,这种方式更便捷
199     //查询参数通过集合传过来params
200     public List<Goddess> query(List<Map<String, Object>> params) throws Exception{
201         List<Goddess> result=new ArrayList<Goddess>();
202         
203         Connection conn=DBUtil.getConnection();
204         StringBuilder sb=new StringBuilder();
205         //1=1永远成立,后面再追加and就没问题了,where后面不能直接加and
206         sb.append("select * from imooc_goddess where 1=1 ");
207         //判断集合是否为空
208         if(params!=null&&params.size()>0){
209             //遍历集合
210             for (int i = 0; i < params.size(); i++) {
211                 Map<String, Object> map=params.get(i);
212                 //拼装sql语句,查询变量name,查询关系rela(例:=),变量的值value
213                 //就不会像sb.append(" where user_name like ? and mobile like ? and email like ?");把查询条件写死
214                 //这里可以改变查询参数
215                 //如果把and去掉,第一条参数可以,第二条就没有and来连接了,所以可以在前面的sql语句加上where 1=1
216                 //name:要查询的字段,rela:查询的关系(=,>,<,like),value:要传输查询参数的值
217                 sb.append("  and "+map.get("name")+" "+map.get("rela")+" "+map.get("value")+" ");
218                 
219             }
220         }
221         
222         PreparedStatement ptmt=conn.prepareStatement(sb.toString());
223         
224         System.out.println(sb.toString());//打印sql语句
225         ResultSet rs=ptmt.executeQuery();
226         
227         Goddess g=null;
228         while(rs.next()){
229             g=new Goddess();
230             g.setId(rs.getInt("id"));
231             g.setUser_name(rs.getString("user_name"));
232             g.setAge(rs.getInt("age"));
233             g.setSex(rs.getInt("sex"));
234             g.setBirthday(rs.getDate("birthday"));
235             g.setEmail(rs.getString("email"));
236             g.setMobile(rs.getString("mobile"));
237             g.setCreate_date(rs.getDate("create_date"));
238             g.setCreate_user(rs.getString("create_user"));
239             g.setUpdate_date(rs.getDate("update_date"));
240             g.setUpdate_user(rs.getString("update_user"));
241             g.setIsdel(rs.getInt("isdel"));
242             
243             result.add(g);
244         }
245         return result;
246     }
247     //查询一个女神,得到其中一个女神的详细信息
248     public Goddess get(Integer id) throws SQLException{//根据id来查
249         Goddess g=null;
250         Connection conn=DBUtil.getConnection();
251         String sql="" +
252                 " select * from imooc_goddess " +
253                 " where id=? ";
254         //预编译sql语句
255         PreparedStatement ptmt=conn.prepareStatement(sql);
256         //传入参数
257         ptmt.setInt(1, id);
258         //execute()方法用来执行更改数据库的操作,包括新增、修改、删除。
259         //executeQuery()方法:查询
260         ResultSet rs=ptmt.executeQuery();//执行查询,返回结果集rs
261         //遍历结果集
262         while(rs.next()){
263             g=new Goddess();
264             g.setId(rs.getInt("id"));
265             g.setUser_name(rs.getString("user_name"));
266             g.setAge(rs.getInt("age"));
267             g.setSex(rs.getInt("sex"));
268             //g.setBirthday:java.util.Date
269             //rs.getDate:java.sql.Date
270             //注意:这里的java.sql.Date不需要转成java.util.Date,因为java.sql.Date是java.util.Date的子集
271             g.setBirthday(rs.getDate("birthday"));
272             g.setEmail(rs.getString("email"));
273             g.setMobile(rs.getString("mobile"));
274             g.setCreate_date(rs.getDate("create_date"));
275             g.setCreate_user(rs.getString("create_user"));
276             g.setUpdate_date(rs.getDate("update_date"));
277             g.setUpdate_user(rs.getString("update_user"));
278             g.setIsdel(rs.getInt("isdel"));
279         }
280         return g;//返回女神对象
281     }
282 }

控制层

  1 package com.imooc.action;
  2 //控制层
  3 import java.sql.SQLException;
  4 import java.util.ArrayList;
  5 import java.util.Date;
  6 import java.util.HashMap;
  7 import java.util.List;
  8 import java.util.Map;
  9 
 10 import com.imooc.dao.GoddessDao;
 11 import com.imooc.model.Goddess;
 12 
 13 public class GoddessAction {
 14 
 15     public void add(Goddess goddess) throws Exception{
 16         GoddessDao dao=new GoddessDao();
 17         goddess.setSex(1);
 18         goddess.setCreate_user("ADMIN");
 19         goddess.setUpdate_user("ADMIN");
 20         goddess.setIsdel(0);
 21         dao.addGoddess(goddess);
 22     }
 23     
 24     public Goddess get(Integer id) throws SQLException{
 25         GoddessDao dao=new GoddessDao();
 26         return dao.get(id);
 27     }
 28     
 29     public void edit(Goddess goddess) throws Exception{
 30         GoddessDao dao=new GoddessDao();
 31         dao.updateGoddess(goddess);
 32     }
 33     public void del(Integer id) throws SQLException{
 34         GoddessDao dao=new GoddessDao();
 35         dao.delGoddess(id);
 36     }
 37     
 38     public List<Goddess>  query() throws Exception{
 39         GoddessDao dao=new GoddessDao();
 40         return dao.query();
 41     }
 42     public List<Goddess> query(List<Map<String, Object>> params) throws Exception{
 43         GoddessDao dao=new GoddessDao();
 44         return dao.query(params);
 45     }
 46     
 47     public static void main(String[] args) throws Exception {
 48         
 49 //        //1、测试新增女神功能
 50 //        GoddessDao g=new GoddessDao();
 51 //        
 52 //        //定义女神对象
 53 //        Goddess g1=new Goddess();
 54 //        
 55 //        g1.setUser_name("小夏");
 56 //        g1.setAge(22);
 57 //        g1.setSex(1);
 58 //        g1.setBirthday(new Date());
 59 //        g1.setEmail("xiaxia@imooc.com");
 60 //        g1.setMobile("18766888866");
 61 //        g1.setCreate_user("ADMIN");
 62 //        g1.setUpdate_user("ADMIN");
 63 //        g1.setIsdel(1);
 64 //        
 65 //        g.addGoddess(g1);
 66 /**************************************************************************/        
 67 //        //1-1、测试新增女神功能
 68 //        GoddessDao g=new GoddessDao();
 69 //        
 70 //        //定义女神对象
 71 //        Goddess g1=new Goddess();
 72 //        
 73 //        g1.setUser_name("小美");
 74 //        g1.setAge(22);
 75 //        g1.setSex(1);
 76 //        g1.setBirthday(new Date());
 77 //        g1.setEmail("xiaxia@imooc.com");
 78 //        g1.setMobile("18766888866");
 79 //        g1.setCreate_user("ADMIN");
 80 //        g1.setUpdate_user("ADMIN");
 81 //        g1.setIsdel(1);
 82 //        
 83 //        g.addGoddess(g1);
 84 /**************************************************************************/        
 85 //        //2、测试更新女神功能
 86 //        GoddessDao g=new GoddessDao();
 87 //        
 88 //        //定义女神对象
 89 //        Goddess g1=new Goddess();
 90 //        
 91 //        g1.setUser_name("小夏");
 92 //        g1.setAge(21);
 93 //        g1.setSex(1);
 94 //        g1.setBirthday(new Date());
 95 //        g1.setEmail("xiaxia@imooc.com");
 96 //        g1.setMobile("18712345678");
 97 //        g1.setUpdate_user("ADMIN");
 98 //        g1.setIsdel(1);
 99 //        
100 //        g1.setId(7);
101 //        
102 //        g.updateGoddess(g1);
103     
104 /**************************************************************************/    
105 //        //3、测试删除女神功能
106 //        GoddessDao g=new GoddessDao();
107 //        
108 //        //定义女神对象
109 //        Goddess g1=new Goddess();
110 //        
111 //        g1.setUser_name("小夏");
112 //        g1.setAge(21);
113 //        g1.setSex(1);
114 //        g1.setBirthday(new Date());
115 //        g1.setEmail("xiaxia@imooc.com");
116 //        g1.setMobile("18712345678");
117 //        g1.setUpdate_user("ADMIN");
118 //        g1.setIsdel(1);
119 //        
120 //        g1.setId(7);
121 //        
122 //        g.delGoddess(7);
123         
124 /**************************************************************************/    
125 //        //4、测试查询单个女神的信息
126 //        GoddessDao g=new GoddessDao();
127 //        
128 //        //定义女神对象
129 //        Goddess g1=new Goddess();
130 //        
131 //        g1.setUser_name("小夏");
132 //        g1.setAge(21);
133 //        g1.setSex(1);
134 //        g1.setBirthday(new Date());
135 //        g1.setEmail("xiaxia@imooc.com");
136 //        g1.setMobile("18712345678");
137 //        g1.setUpdate_user("ADMIN");
138 //        g1.setIsdel(1);
139 //        
140 //        g1.setId(7);
141 //        
142 //        //返回一个女神对象
143 //        Goddess g2=g.get(9);
144 //        //把查询到的女神信息打印到控制台
145 //        System.out.println(g2.toString());
146         
147 /**************************************************************************/    
148 //        //5、测试查询女神的信息
149 //        GoddessDao g=new GoddessDao();
150 //        //查询小美的信息
151 //        List<Goddess> result=g.query("小夏");
152 //        //遍历结果集
153 //        for (int i = 0; i < result.size(); i++) {
154 //            //将信息打印到控制台上面
155 //            System.out.println(result.get(i).toString());
156 //        }
157 //        //定义女神对象
158 //        Goddess g1=new Goddess();
159 //        
160 //        g1.setUser_name("小美");
161 //        g1.setAge(22);
162 //        g1.setSex(1);
163 //        g1.setBirthday(new Date());
164 //        g1.setEmail("xiaxia@imooc.com");
165 //        g1.setMobile("18766888866");
166 //        g1.setCreate_user("ADMIN");
167 //        g1.setUpdate_user("ADMIN");
168 //        g1.setIsdel(1);
169         
170 /**************************************************************************/    
171         //6、测试通过集合方式查询女神的信息
172         GoddessDao g=new GoddessDao();
173         
174         List<Map<String, Object>> params=new ArrayList<Map<String,Object>>();
175         Map<String,Object> param=new HashMap<String,Object>();
176         param.put("name", "user_name");
177 //        param.put("rela", "=");
178 //        param.put("value", "'小夏'");
179         
180         param.put("rela", "like");
181         param.put("value", "'%小美%'");
182         //把参数放到集合里面去
183         params.add(param);//这一句一定要加,否则会被后面的覆盖
184 /**************************************************************************/    
185         //加入查询条件:按手机号查询
186         param=new HashMap<String,Object>();
187         param.put("name", "mobile");
188 //        param.put("rela", "=");
189 //        param.put("value", "'18712345678'");
190         
191         param.put("rela", "like");
192         param.put("value", "'%18712345678%'");
193         //把参数放到集合里面去
194         params.add(param);
195 /**************************************************************************/        
196         param=new HashMap<String,Object>();
197         param.put("name", "email");
198         param.put("rela", "=");
199         param.put("value", "'xiaxia@imooc.com'");
200         //把参数放到集合里面去
201         params.add(param);
202 /**************************************************************************/            
203         
204         
205         List<Goddess> result=g.query(params);
206         //遍历结果集
207         for (int i = 0; i < result.size(); i++) {
208             //将信息打印到控制台上面
209             System.out.println(result.get(i).toString());
210         }
211 //               定义女神对象
212         Goddess g1=new Goddess();
213         
214         g1.setUser_name("小美");
215         g1.setAge(22);
216         g1.setSex(1);
217         g1.setBirthday(new Date());
218         g1.setEmail("xiaxia@imooc.com");
219         g1.setMobile("18766888866");
220         g1.setCreate_user("ADMIN");
221         g1.setUpdate_user("ADMIN");
222         g1.setIsdel(1);
223     }
224         
225 }
226     

视图层

  1 package com.imooc.view;
  2 
  3 import java.text.ParseException;
  4 import java.text.SimpleDateFormat;
  5 import java.util.Date;
  6 import java.util.List;
  7 import java.util.Scanner;
  8 
  9 import com.imooc.action.GoddessAction;
 10 import com.imooc.model.Goddess;
 11 
 12 public class View {
 13     //提示语
 14     private static final String CONTEXT="欢迎来到女神禁区:
" +
 15             "下面是女神禁区的功能列表:
" +
 16             "[MAIN/M]:主菜单
" +
 17             "[QUERY/Q]:查看全部女神的信息
" +
 18             "[GET/G]:查看某位女神的详细信息
" +
 19             "[ADD/A]:添加女神信息
" +
 20             "[UPDATE/U]:更新女神信息
" +
 21             "[DELETE/D]:删除女神信息
" +
 22             "[SEARCH/S]:查询女神信息(根据姓名、手机号来查询)
" +
 23             "[EXIT/E]:退出女神禁区
" +
 24             "[BREAK/B]:退出当前功能,返回主菜单";
 25     //操作标记
 26     private static final String OPERATION_MAIN="MAIN";//访问主菜单(功能列表)
 27     private static final String OPERATION_QUERY="QUERY";
 28     private static final String OPERATION_GET="GET";
 29     private static final String OPERATION_ADD="ADD";
 30     private static final String OPERATION_UPDATE="UPDATE";
 31     private static final String OPERATION_DELETE="DELETE";
 32     private static final String OPERATION_SEARCH="SEARCH";
 33     private static final String OPERATION_EXIT="EXIT";
 34     private static final String OPERATION_BREAK="BREAK";
 35 
 36     public static void main(String[] args) {
 37         
 38         System.out.println(CONTEXT);
 39         //怎么保持程序一直运行,永真循环 while(true){}
 40         
 41         //接收控制台输入参数
 42         Scanner scan=new Scanner(System.in);
 43         Goddess goddess=new Goddess();
 44         GoddessAction action=new GoddessAction();
 45         String prenious=null;//记忆变量,记忆上一次请求的是哪一个分支哪一个模块
 46         Integer step=1;//标记步骤
 47         while(scan.hasNext()){//有输入值的时候才循环
 48             String in=scan.next().toString();
 49             if(OPERATION_EXIT.equals(in.toUpperCase())
 50                     //OPERATION_EXIT.substring(0, 1)截取E,toUpperCase()转换成大写
 51                     ||OPERATION_EXIT.substring(0, 1).equals(in.toUpperCase())){
 52                 System.out.println("您已成功退出女神禁区。");
 53                 break;
 54             }else if(OPERATION_QUERY.equals(in.toUpperCase())
 55                     ||OPERATION_QUERY.substring(0, 1).equals(in.toUpperCase())){
 56                 try {
 57                     List<Goddess> list=action.query();
 58                     for (Goddess go : list) {
 59                         System.out.println(go.getId()+",姓名:"+go.getUser_name());
 60                     }
 61                 } catch (Exception e) {
 62                     // TODO Auto-generated catch block
 63                     e.printStackTrace();
 64                 }
 65                 
 66                 
 67             }else if(OPERATION_ADD.equals(in.toUpperCase())
 68                     ||OPERATION_ADD.substring(0, 1).equals(in.toUpperCase())
 69                     ||OPERATION_ADD.equals(prenious)){
 70                 prenious=OPERATION_ADD;
 71                 //新增女神
 72                 
 73                 if(1==step){
 74                     System.out.println("请输入女神的[姓名]");
 75                 }else if(2==step){
 76                     goddess.setUser_name(in);
 77                     System.out.println("请输入女神的[年龄]");
 78                 }else if(3==step){
 79                     goddess.setAge(Integer.valueOf(in));
 80                     System.out.println("请输入女神的[生日],格式如:yyyy-MM-dd");
 81                 }else if(4==step){
 82                     SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
 83                     Date birthday=null;
 84                     try {
 85                         birthday = sf.parse(in);
 86                         goddess.setBirthday(birthday);
 87                         System.out.println("请输入女神的[邮箱]");
 88                     } catch (ParseException e) {
 89                         e.printStackTrace();
 90                         System.out.println("您输入的格式有误,请重新输入");
 91                         step=3;
 92                     }
 93                 }else if(5==step){
 94                     goddess.setEmail(in);
 95                     System.out.println("请输入女神的[手机号]");
 96                 }else if(6==step){
 97                     goddess.setMobile(in);
 98                     
 99                     try {
100                         action.add(goddess);
101                         System.out.println("新增女神成功");
102                     } catch (Exception e) {
103                         e.printStackTrace();
104                         System.out.println("新增女神失败");
105                     }
106                 }
107                 if(OPERATION_ADD.equals(prenious)){
108                     step++;                    
109                 }
110             }else{
111                 System.out.println("您输入的值为:"+in);                
112             }
113             
114         }
115     }
116 }

数据库

 1 package com.imooc.db;
 2 
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.SQLException;
 6 //获得数据库连接
 7 public class DBUtil {
 8 
 9     private static final String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
10     private static final String USER="root";
11     private static final String PASSWORD="123456";
12     
13     private static Connection conn=null;
14     
15     static {
16         try {
17             //1.加载驱动程序
18             Class.forName("com.mysql.jdbc.Driver");
19             //2.获得数据库的连接
20             conn=DriverManager.getConnection(URL, USER, PASSWORD);
21         } catch (ClassNotFoundException e) {
22             e.printStackTrace();
23         } catch (SQLException e) {
24             e.printStackTrace();
25         }
26     }
27     //对外提供一个方法来获得数据库连接
28     public static Connection getConnection(){
29         return conn;
30     }
31 
32 }
原文地址:https://www.cnblogs.com/songsongblue/p/9790935.html