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 {
@Override
public 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;
}
@Override
public List<User> selectAll() {
String sql = "select * from users ";
List<User>list=DBUtil.select(sql, null,User.class);
return list;
}
@Override
public 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 {
@Override
public 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;
}
@Override
public 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;
}
@Override
public 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 block
e.printStackTrace();
}
try {
if(ps!=null){
ps.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.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)){
//属性名与数据表的列名一样,将值传给obj
method.invoke(obj, value);
}
}
}
list.add(obj);
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("请正确配置驱动程序");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IntrospectionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.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 block
e.printStackTrace();
}finally {
close(null, ps, conn);
}
return res;
}
}
测试类:MainTest.javapackage 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 {
@Test
public 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("登录失败");
}
}
@Test
public void selectAll(){
IUserDao iUserDao = new UserDaoImpl();
List<User> list = iUserDao.selectAll();
for (User user : list) {
System.out.println(user);
}
}
@Test
public 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("添加失败");
}
}
@Test
public 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("管理员登录失败");
}
}
}