JDBC优化之路-2(添加工具类DBUtil)
来源:互联网 发布:数字化校园软件 编辑:程序博客网 时间:2024/06/06 11:38
2.两个实例对象
users数据表:
admin数据表:
项目目录:
dao层:IUserDao.java
package com.hpe.dao;import java.util.List;import com.hpe.pojo.User;public interface IUserDao {User login(User user);List<User> selectAll();int add(User user);}
dao层:IAdminDao.java
package com.hpe.dao;import com.hpe.pojo.Admin;public interface IAdminDao {Admin login(Admin admin);}dao实现层:UserDaoImpl.java
package com.hpe.dao.impl;import java.util.List;import com.hpe.dao.IUserDao;import com.hpe.pojo.User;import com.hpe.util.DBUtil;public class UserDaoImpl implements IUserDao {@Overridepublic User login(User user) {String sql = "select * from users where name=? and pwd=?";Object[] params = {user.getName(),user.getPwd()};User resUser =DBUtil.selectObject(sql, params, User.class);return resUser;}@Overridepublic List<User> selectAll() {String sql = "select * from users ";List<User>list=DBUtil.select(sql, null,User.class);return list;}@Overridepublic int add(User user) {String sql = "insert into users (name,pwd) values(?,?)";Object[] params = {user.getName(),user.getPwd()};int res = DBUtil.update(sql, params);return res;}}
dao实现层:AdminDaoImpl.java
package com.hpe.dao.impl;import com.hpe.dao.IAdminDao;import com.hpe.pojo.Admin;import com.hpe.util.DBUtil;public class AdminDaoImpl implements IAdminDao {@Overridepublic Admin login(Admin admin) {String sql = "select * from admin where adminname=? and adminpassword=?";Object[] params = {admin.getAdminname(),admin.getAdminpassword()};Admin resAdmin = DBUtil.selectObject(sql, params,Admin.class);return resAdmin;}}
实体类:User.java
package com.hpe.pojo;public class User {private int id;private String name;private String pwd;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";}}
实体类:Admin.java
package com.hpe.pojo;public class Admin {private int adminid;private String adminname;private String adminpassword;public int getAdminid() {return adminid;}public void setAdminid(int adminid) {this.adminid = adminid;}public String getAdminname() {return adminname;}public void setAdminname(String adminname) {this.adminname = adminname;}public String getAdminpassword() {return adminpassword;}public void setAdminpassword(String adminpassword) {this.adminpassword = adminpassword;}@Overridepublic String toString() {return "Admin [adminid=" + adminid + ", adminname=" + adminname + ", adminpassword=" + adminpassword + "]";}}
工具类:DBUtil.java
package com.hpe.util;import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;public class DBUtil {/* * 获取数据库连接 */public static Connection getConn() throws ClassNotFoundException, SQLException{Class.forName("com.mysql.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/work?useUnicode=true&characterEncoding=utf-8";String username="root";String password="root"; Connection conn=DriverManager.getConnection(url, username, password); return conn;}/* * 关闭数据库资源 */public static void close(ResultSet rs,PreparedStatement ps,Connection conn){try {if(rs!=null){rs.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if(ps!=null){ps.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if(conn!=null){conn.close();}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/* * Class<T> type创建什么类型的对象 * T用来保存一个参数类型 */public static <T> List<T> select(String sql,Object[] params,Class<T> type){Connection conn=null;PreparedStatement ps=null;ResultSet rs=null;List<T>list =new ArrayList<>();try {conn=getConn();ps=conn.prepareStatement(sql);if(params != null){for(int i=0;i<params.length;i++){ps.setObject(i+1, params[i]);}}rs = ps.executeQuery();ResultSetMetaData metaData = rs.getMetaData();//int colCount = metaData.getColumnCount();//获取列的数量while(rs.next()){/* * 把数据库查询出来的通过内省丢给Object */T obj = type.newInstance();BeanInfo beanInfo = Introspector.getBeanInfo(type);//obj的属性PropertyDescriptor[] properties = beanInfo.getPropertyDescriptors();//属性信息的数组for (int i = 0; i < colCount; i++) {String cloName = metaData.getColumnName(i+1);//获取到列名Object value = rs.getObject(i+1);//列的值/* * 遍历properties数组,找到一个名字和cloName一样的属性 */for(int j=0;j<properties.length;j++){PropertyDescriptor property = properties[j];String propertyName = property.getName();//属性名字Method method = property.getWriteMethod();//写方法if(propertyName.equals(cloName)){//属性名与数据表的列名一样,将值传给objmethod.invoke(obj, value);}}}list.add(obj);}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();System.out.println("请正确配置驱动程序");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IntrospectionException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {close(rs, ps, conn);}return list;}public static <T> T selectObject(String sql,Object[] params,Class<T> type){List<T> list = select(sql, params,type);T resObj = null;if(list.size()>0){resObj=list.get(0);} return resObj;}/* * UPdate方法, 支持增,删,改 */public static int update(String sql, Object[] params){Connection conn = null;PreparedStatement ps = null;int res = 0;try {conn = getConn();ps = conn.prepareStatement(sql);if (params != null){for (int i=0; i<params.length; i++){ps.setObject(i+1, params[i]);}}res = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {close(null, ps, conn);}return res;}}测试类:MainTest.java
package com.hpe.test;import java.util.List;import org.junit.Test;import com.hpe.dao.IAdminDao;import com.hpe.dao.IUserDao;import com.hpe.dao.impl.AdminDaoImpl;import com.hpe.dao.impl.UserDaoImpl;import com.hpe.pojo.Admin;import com.hpe.pojo.User;public class MainTest {@Testpublic void user_login(){IUserDao iUserDao = new UserDaoImpl();User user = new User();user.setName("admin");user.setPwd("123");User resUser = iUserDao.login(user);if (resUser != null){System.out.println("登录成功");System.out.println(resUser);}else{System.out.println("登录失败");}}@Testpublic void selectAll(){IUserDao iUserDao = new UserDaoImpl();List<User> list = iUserDao.selectAll();for (User user : list) {System.out.println(user);}}@Testpublic void user_add(){IUserDao iUserDao = new UserDaoImpl();User user = new User();user.setName("mq");user.setPwd("111");int res = iUserDao.add(user);if(res == 1){System.out.println("添加成功");}else{System.out.println("添加失败");}}@Testpublic void admin_login(){IAdminDao iAdminDao = new AdminDaoImpl();Admin admin = new Admin();admin.setAdminname("admin");admin.setAdminpassword("123");Admin resAdmin = iAdminDao.login(admin);if(resAdmin !=null){System.out.println("管理员登录成功");System.out.println(resAdmin);}else {System.out.println("管理员登录失败");}}}
阅读全文
0 0
- JDBC优化之路-2(添加工具类DBUtil)
- jdbc数据库操作工具类--DBUtil
- 利用JDBC中的XXMetaData(元数据)和 .properties属性文件书写DBUtil工具类
- JDBC连接MySQL的一个工具类DBUtil
- DBUtil工具类
- DBUtil工具类JdbcUtil
- 数据库工具类DBUtil
- DBUtil工具类
- DBUtil 数据库工具类
- 工具类之数据库工具类:DBUtil(采用反射机制)
- Python 边做边学 8.3 工具类--数据库工具(DbUtil)
- (26)数据库工具类DbUtil
- DBUtil数据库操作工具类
- JAVA 自己写的JDBC数据库工具类,并作相关的测试DBUtil
- JDBC的一个简单封装类DBUtil
- Qt数据库之数据库访问工具 DBUtil
- 简单的数据库连接工具类DBUtil
- JAVA- DBUtil 封装数据库工具类
- 实验:实现基于MYSQL的FTP虚拟用户
- SpringBoot 使用AOP处理请求
- Java WebSocket连接302错误 或者 握手失败错误
- atm(选做)——实现信用卡程序 python
- CKeditor4.7.3标准版图片上传及相关配置
- JDBC优化之路-2(添加工具类DBUtil)
- 好的博客0709
- 【Android】Android6.0+ 动态申请权限
- typedef和#define的用法与区别
- Laravel 下配置 Redis 让缓存、Session 各自使用不同的 Redis 数据库
- HDU-1175 连连看(DFS)
- 如何不择手段提升scroll事件的性能
- Codeforces 875D High Cry st表+分治
- JVM之类文件结构