欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何将自己写的项目打成jar包,再引用到其他项目中

程序员文章站 2022-03-30 16:29:57
...

首先需要自己做一个项目,本文是操作数据库的项目Jdbcutil2,主要包括对数据库中数据的增删改查操作,来看一下:

如何将自己写的项目打成jar包,再引用到其他项目中

Colume:

package com.xintouyun.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD}) //注解可以写到属性上面
@Retention(RetentionPolicy.RUNTIME) //注解在运行范围有效
public @interface Colume {
    String value() default "";
}

 Id:

package com.xintouyun.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD}) //注解可以写到属性上面
@Retention(RetentionPolicy.RUNTIME) //注解在运行范围有效
public @interface Id {
	String value();
	public boolean isAutoIncrease();
}

Table:

package com.xintouyun.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE) //注解可以写到类上面
@Retention(RetentionPolicy.RUNTIME) //注解在运行范围有效
public @interface Table {
	String value();
}

BaseDao:

package com.xintouyun.dao;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.xintouyun.annotation.Colume;
import com.xintouyun.annotation.Id;
import com.xintouyun.annotation.Table;
import com.xintouyun.util.JdbcUtil;

public class BaseDao <E> {
	private Class<?> cls;
	private Map<String,String> columnPropertyMap = new HashMap<>();
	public BaseDao() {
		//得到父类的泛型
		Type sType=getClass().getGenericSuperclass();
		//得到实际的类型参数数组
		Type[] generics=((ParameterizedType) sType).getActualTypeArguments();
		 //得到第一个泛型的Class
		cls=(Class<?>) (generics[0]);
	}
	/**
	 * 传入主键值,删除对应的一条记录
	 * @param id 主键
	 * @return 受影响行数
	 */
	public int delete(Object id) {
		/*我们需要将sql语句进行封装
		 * 1.因为是删除语句所以前面都是delete from+数据库中对应的表的名字+where+主键名+=?
		 * 2.如何获取表名?表明跟对象名是有联系的,一般实体类跟表明是对应的。但是如果用户在数据库中建表的时候跟实体类不是一一对应的,那我们就需要加上类的注解
		 * 3.如何获取主键名?首先要获取这个类中所有的属性,然后判断那个是主键,最后获取这个主键名
		 * 4.将sql语句拼接完之后,可以调用我们底层的update方法来执行操作
		 * 5.当然,如果这个表中不存在主键的话就没有必要执行下面的操作了,所以我们要先进行一下判断,看主键是否存在
		 * */
		int affectRow=0;
		if(scanId()==null) {
			throw new IdMistakeException("没有Id设置,请设置Id");
		} else {
		String sql="delete from "+scanTableName()+" where "+scanId()+"=?";
		System.out.println(sql);
			affectRow=update(sql,id);
		}
		return affectRow;		
	} 
	/**
	 * 传入一个对象,根据主键更新这个对象里面其他的值
	 * @param e 实例对象
	 * @return 受影响行数,返回值大于零,更新成功,否则更新失败
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws SQLException
	 * @throws IntrospectionException
	 */
	public int update(E e) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, SQLException, IntrospectionException {
		//1.先根据传入的对象得到他所有的属性值,然后找到他的主键,调用delete(Object id)将这个对象中的数据删除掉
		//2.然后调用save(E e)把新的对象数据存进去	
		String methodname="get"+scanId().substring(0, 1).toUpperCase()+scanId().substring(1);
		System.out.println(methodname);		
		Method getmethod=e.getClass().getDeclaredMethod(methodname);
		Object obj=getmethod.invoke(e);
		int i=delete(obj);
		System.out.println(i);
		int affectedow=save(e);
		return affectedow;		
	}
	/**
	 * 传入一个对象,和要更新的这个对象在数据库中对应属性的列名,只更新这一列的值
	 * @param e 实体对象
	 * @param columeName 列名
	 * @return
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalAccessException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 */
	public int update(E e,String columeName) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		//1.先根据传入的对象得到他所有的属性值,然后找到他的主键
		//2.然后根据传入的列名和得到的主键执行更新语句,只更新这一列的值
		String methodname="get"+scanId().substring(0, 1).toUpperCase()+scanId().substring(1);
		String methodname1="get"+columeName.substring(0, 1).toUpperCase()+columeName.substring(1);
		Method getmethod=e.getClass().getDeclaredMethod(methodname);
		Method getmethod1=e.getClass().getDeclaredMethod(methodname1);
		Object obj=getmethod.invoke(e);
		Object obj1=getmethod1.invoke(e);
		System.out.println(obj1.getClass().getName());
		Connection conn=null;
		PreparedStatement st=null;
		ResultSet rs=null;
		int affectRow=0;
		try {
		conn=JdbcUtil.getConnection();//加载驱动,创建连接
		String sql="update "+scanTableName()+" set "+columeName+"=?"+" where "+scanId()+"="+obj;
		System.out.println(sql);
		//从传入的对象解析出sql语句
		st = conn.prepareStatement(sql);//连接数据库	
		if(obj1.getClass().getName().equals("java.lang.String")) {
			st.setString(1, (String)obj1);
		}
		if(obj1.getClass().getName().equals("int")) {
			st.setString(1, (String)obj1);
		}
		affectRow=st.executeUpdate();
		}catch(Exception i) {
			i.printStackTrace();
		}finally {
			JdbcUtil.closeAll(rs, st, conn);
		} 
	        return affectRow;
	}
	/**
	 * 拼装字符串的时候根据传入的对象自动生成所对应的属性值
	 * @return 返回拼装好的sql语句中属性名这一部分
	 */
	public String fields() {
		String result=null;
		String field2=null;
		List<Object> list2= getField_ColumnName();
		StringBuffer sb2=new StringBuffer();
		for (int i = 0; i < list2.size(); i++) {
			field2=list2.get(i).toString()+",";
			sb2.append(field2);
		}
		result=sb2+"";
		String result1=result.substring(0, result.length()-1);
		System.out.println("fields拼接后是:"+result1);
		return result1;
	}
	/**
	 * 拼装字符串的时候根据传入的对象自动生成的占位符部分
	 * @return 返回拼装好的sql语句占位符这一部分
	 */
	public String placeholder() {
		String result=null;
		String field=null;
		StringBuffer sb=new StringBuffer();
		Field[] fields=cls.getDeclaredFields();//获取所有属性放到一个数组中
		Object obj=scanId();
		for (int i = 0; i < fields.length; i++) {
		if(fields[i].equals(obj)) {//判断是不是主键,如果是主键的话就将其的值设置为空,否则就是占位符?
			//判断主键是否是自增的,如果是就不需要用户自己设置,如果不是自增的就需要用户自己设置
			if(idIsPrimaryKey(fields[i])) {
				field=null+",";
				System.out.println("主键是自增的");
			}else {
				field="?,";
				System.out.println("主键不是自增的");
			}			
			}else {
					field="?,";			
			}
			sb.append(field);
		}
		result=sb+"";
		result=result.substring(0, result.length()-1);
		return result;
	}
	/**
	 * 传入一个对象并将他的值保存到数据库中
	 * @param e 实体对象
	 * @return 受影响行数,保存成功大于零,否则等于零
	 */
	public int save(E e)  {	
		String sql="insert into "+scanTableName()+"("+fields()+")"+" values("+placeholder()+")";
		System.out.println(sql);	
		Field[] fields = e.getClass().getDeclaredFields();
	    List<Object> list=new ArrayList<>();
	    for (Field field : fields) {
	        PropertyDescriptor pd;
			try {
				pd = new PropertyDescriptor(field.getName(), e.getClass());
				Method getMethod = pd.getReadMethod();
				list.add(getMethod.invoke(e));
			} catch (Exception ex) {
				ex.printStackTrace();
			}	       	        
	    }	
	    for (Object object : list) {
			System.out.println(object);
		}
	    return update(sql,list.toArray());
	}
	
//根据注解获取列名以及列名
private List<Object> getField_ColumnName(){
	Field[] fields = cls.getDeclaredFields();
	 List<Object> list1=new ArrayList<>();
	for (Field field : fields) {
//如果属性上有对应的列注解类型则获取这个注解类型
	 Colume colume = field.getAnnotation(Colume.class);
	 if(colume!=null) {
	 String columename1=colume.value();		
			 list1.add(columename1);
	 }else {
		 String fieldname=field.getName();
		 list1.add(fieldname);
	 }
		}
		return list1;
}
//判断主键是否是自增的
public boolean idIsPrimaryKey(Object obj) {
	boolean flag=false;
	Field[] fileds=cls.getDeclaredFields();
	for (Field field : fileds) {
		Id id=field.getDeclaredAnnotation(Id.class);
		if(id.isAutoIncrease()) {
			flag=true;
		}else {
			flag=false;
		}
	}
	return flag;
}
//根据注解获取主键名
	/*private String scanId() {
		Field[] fileds=cls.getDeclaredFields();
		for (Field field : fileds) {
			Id id=field.getDeclaredAnnotation(Id.class);
			if(id!=null) {	
			String columeName=id.value();
			columeName=field.getName();
			return columeName;
			}
		}
		return null;
	}*/
private String scanId() {
	//获取所有声明的属性
	Field[] fields = cls.getDeclaredFields();
	for (Field field : fields) {
		//检查这个属性上是否有@Id
		Id id = field.getDeclaredAnnotation(Id.class);
		
		if(id != null) {
			String columnName = id.value();
			if(columnName.trim().equals("")) {
				columnName = field.getName();
			}
			columnPropertyMap.put(columnName, field.getName());
			return columnName;
		}
	}
	return null;
}
//根据注解获取对应的表名
	private String scanTableName() {
		Table table=cls.getAnnotation(Table.class);
		String tableName=null;
		if(table!=null) {		
				tableName = table.value();
			} else {
				tableName = cls.getSimpleName();
			}
		return tableName;
		}
		
	/**
	 * 通用的增删改操作,传入对应的增加,删除,修改操作的sql语句,以及对应的占位符中的参数,即可执行此操作
	 * @param sql 通用的增加,删除,修改操作的sql语句
	 * @param parameters SQL语句中占位符对应的参数
	 * @return
	 */
	public int update(String sql,Object...parameters) {
		Connection conn=null;
		PreparedStatement st=null;
		ResultSet rs=null;
		int affectedRow=0;
		conn=JdbcUtil.getConnection();
		try {
			st=conn.prepareStatement(sql);
			setParameters(st,parameters);
			affectedRow=st.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.closeAll(rs, st, conn);
		}	
		return affectedRow;
	}
	/**
	 * 
	 * @param sql 单条查询语句
	 * @param parameters sql语句对应的占位符
	 * @return 返回查询到的这个对象
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 */
	public E get(String sql,Object...parameters) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
		Connection conn=null;
		PreparedStatement st=null;
		ResultSet rs=null;
		E obj=null;
		try {
			conn=JdbcUtil.getConnection();
			st=conn.prepareStatement(sql);
			setParameters(st,parameters);
			rs=st.executeQuery();
			while(rs.next()) {
				obj=oneRowToObject(rs);
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.closeAll(rs, st, conn);
		}	
		return obj;
	}
	/**
	 * 多表连接查询
	 * @param sql
	 * @param rowMapper
	 * @param parameters
	 * @return
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 */
	public List<E> get(String sql,RowMapper<E> rowMapper,Object...parameters) throws InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
		Connection conn=null;
		PreparedStatement st=null;
		ResultSet rs=null;
		List<E> list=new ArrayList<>();
		try {
			conn=JdbcUtil.getConnection();
			st=conn.prepareStatement(sql);
			setParameters(st,parameters);
			rs=st.executeQuery();
			while(rs.next()) {
				E obj=rowMapper.moreRowToObject(rs);
				list.add(obj);
			}
		}catch (SQLException e) {
			e.printStackTrace();
		}finally {
			JdbcUtil.closeAll(rs, st, conn);
		}	
		return list;
	}
	/**
	 * 单表多条查询,将查询到的多条记录传入一个对象,然后再将这些存入一个集合中,返回这个集合
	 * @param sql 传入对应的sql查询语句
	 * @param parameters 传入对应的占位符的值
	 * @return 返回查询到的记录转化成的对象的集合
	 */
	public List<E> list(String sql,Object...parameters) {
		Connection conn = null;
		PreparedStatement st = null;
		ResultSet rs = null;
		List<E> list = new ArrayList<>();
		
		try {
			conn = JdbcUtil.getConnection();
			st = conn.prepareStatement(sql);
			setParameters(st, parameters);
			rs = st.executeQuery();
			while(rs.next()) {
				E obj = oneRowToObject(rs);
				list.add(obj);
			}			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			JdbcUtil.closeAll(rs, st, conn);
		}	
		return list;
	}
	/**
	 * 统计版块中主贴数
	 * @param bid
	 * @return
	 */
	public int count(int bid) {
		
		
		return bid;
		
	}
	/**
	 * 把得到的一列数据存入到一个对象中
	 * @param rs
	 * @return
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws SQLException
	 * @throws NoSuchMethodException
	 * @throws SecurityException
	 * @throws IllegalArgumentException
	 * @throws InvocationTargetException
	 */
	@SuppressWarnings("unchecked")
	private E oneRowToObject(ResultSet rs) throws InstantiationException, IllegalAccessException, SQLException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {
		E obj;
		obj=(E) cls.newInstance();
		//获取结果集元数据(获取此 ResultSet 对象的列的编号、类型和属性。)
		ResultSetMetaData rd=rs.getMetaData();
		for (int i = 0; i < rd.getColumnCount(); i++) {
			//获取列名
			String columnName=rd.getColumnLabel(i+1);
			//组合方法名
			String methodName="set"+columnName.substring(0, 1).toUpperCase()+columnName.substring(1);
			//获取列类型
			int columnType=rd.getColumnType(i+1);
			Method method=null;
			switch(columnType) {
			case java.sql.Types.VARCHAR:
			case java.sql.Types.CHAR:
				method=cls.getMethod(methodName, String.class);
				if(method!=null) {
					method.invoke(obj, rs.getString(columnName));	
				}
				break;			
			case java.sql.Types.INTEGER:
			case java.sql.Types.SMALLINT:
				method=cls.getMethod(methodName, int.class);
				if(method!=null) {
					method.invoke(obj, rs.getInt(columnName));	
				}
				break;
			case java.sql.Types.BIGINT:
				method=cls.getMethod(methodName, long.class);
				if(method!=null) {
					method.invoke(obj, rs.getLong(columnName));	
				}
				break;
			case java.sql.Types.DATE:
			case java.sql.Types.TIMESTAMP:
				try {
					method=cls.getMethod(methodName, Date.class);
					if(method!=null) {						
						method.invoke(obj, rs.getTimestamp(columnName));	
					}
				} catch(Exception e) {
					method=cls.getMethod(methodName, String.class);
					if(method!=null) {
						method.invoke(obj, rs.getString(columnName));	
					}
				}				
				break;
			case java.sql.Types.DECIMAL:
				method=cls.getMethod(methodName, BigDecimal.class);
				if(method!=null) {
					method.invoke(obj, rs.getBigDecimal(columnName));	
				}
				break;
			case java.sql.Types.DOUBLE:
			case java.sql.Types.NUMERIC:
				method=cls.getMethod(methodName, double.class);
				if(method!=null) {
					method.invoke(obj, rs.getDouble(columnName));	
				}
				break;
			case java.sql.Types.BIT:
				method=cls.getMethod(methodName, boolean.class);
				if(method!=null) {
					method.invoke(obj, rs.getBoolean(columnName));	
				}
				break;
			default:
				break;
			}	
		}
		return obj;
	}	
	/**
	 * 设置占位符
	 * @param st 预处理
	 * @param parameters 占位符数组
	 */
	private void setParameters(PreparedStatement st, Object[] parameters) {
		if(parameters!=null&&parameters.length>0) {
			for(int i=0;i<parameters.length;i++) {
				try {
					st.setObject(i+1,parameters[i] );
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}	
		}
	}
}

IdMistakeException:

package com.xintouyun.dao;

public class IdMistakeException extends RuntimeException {
	public IdMistakeException(String message) {
		super.setStackTrace(getStackTrace());
	}
}

RowMapper:

package com.xintouyun.dao;

import java.sql.ResultSet;

public interface RowMapper<E> {
	E moreRowToObject(ResultSet rs);
}

JdbcUtil:

package com.xintouyun.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/*
 * 
 * @author Jianghaoqiang
 *
 */
public class JdbcUtil {
	private static String DRIVER_CLASS;
	private static String URL; 
	private static String USER;
	private static String PASSWORD;
	static {
		try {
			//properties一般放配置信息的,存放的是键值对格式.如userName=root 这样便于管理!
			//jdbcUtil.class 得到的是class JdbcUtil ,class对象是java.lang.Class<T>这个类生成的对象,每个类都有一个class对象
			//getResourceAsStream(),返回的是InputStream 对象
			InputStream is = JdbcUtil.class.getClassLoader().getResourceAsStream("db-config.properties");
			//从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象
			Properties properties = new Properties();
			//加载属性列表
			properties.load(is);			
			DRIVER_CLASS = properties.getProperty("DRIVER_CLASS");
			URL = properties.getProperty("URL");
			USER = properties.getProperty("USER");
			PASSWORD = properties.getProperty("USERPWD");
			//加载jdbc驱动
			Class.forName(DRIVER_CLASS);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(URL,USER,PASSWORD);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	public static void closeAll(ResultSet rs,Statement st,Connection conn) {
		try {
			if(rs != null) {
				rs.close();
			}
			if(st != null) {
				st.close();
			}
			if(conn != null) {
				conn.close();
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
}

以上就是我写的Jdbcutil2的源码,下面就需要我们把这个工程打成jar包:

步奏:

在工程目录上点击右键--Export..--Java--Jar file--next--将classpath和project,然后选择保存路径,点击finish就可以了

如何将自己写的项目打成jar包,再引用到其他项目中

如何将自己写的项目打成jar包,再引用到其他项目中 

如何将自己写的项目打成jar包,再引用到其他项目中 找到保存好的jar包,如果你想看一下保存的是不是你的项目,就可以把他解压缩看一下。

jar包打好后,就需要来用一下,只要是涉及到数据库的增删改查操作都可以。下面找个项目试一下:

我们就找之前做过的学生管理系统试一下:

如何将自己写的项目打成jar包,再引用到其他项目中

我们首先将jdbcutil2.jar导入这个项目中,然后写一个StudentDao继承jar包中的BaseDao,这样就可以直接使用BaseDao中直接写好的对数据库增删改查的操作。

StudentDao:

package com.xintouyun.sm.dao;

import com.xintouyun.dao.BaseDao;
import com.xintouyun.sm.entity.Student;

public class StudentDao extends BaseDao<Student>{
	
}

Student:

package com.xintouyun.sm.entity;

import com.xintouyun.annotation.Id;

public class Student {
	@Id(isAutoIncrease = false,value="studentNo")	
	private String name;
	private String studentNo;
	private int age;
	private String sex;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	public String getStudentNo() {
		return studentNo;
	}
	public void setStudentNo(String studentNo) {
		this.studentNo = studentNo;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}

MangerStore:

package com.xintouyun.sm.service;

import com.xintouyun.sm.entity.Student;
/**
 * 
 * @author Jianghaoqiang
 *
 */
public interface MangerStore {
	/**
	 *添加学生方法
	 * @param student 对象为学生对象
	 * @return 添加成功返回true,添加失败返回false
	 */
	boolean addStudent(Student student);
	/**
	 * 查找学生方法
	 * @param studentNo 根据学生学号查找
	 * @return 查找成功返回这个学生对象,查找失败返回null
	 */
	Student findStudent(String studentNo);
	/**
	 * 删除学生方法
	 * @param studentNo 根据学生学号进行查找,然后删除
	 * @return 删除成功返回true,删除失败返回false
	 */
	boolean deleteStudent(String studentNo);
	/**
	 * 修改学生信息方法
	 * @param studentNo 根据学生学号查找,然后修改信息
	 * @return 修改成功返回学生对象,修改失败返回null
	 */
	Student updateStudent(String studentNo,String name,String sex,int age);
	/**
	 * 显示所有学生信息,包括姓名,学号,性别,年龄。
	 */
	void showAll();
	
}

impl4:

package com.xintouyun.sm.service.impl;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;

import com.xintouyun.sm.dao.StudentDao;
import com.xintouyun.sm.entity.Student;
import com.xintouyun.sm.service.MangerStore;

public class impl4 implements MangerStore{
private StudentDao studentDao = new StudentDao();
	
	public boolean addStudent(Student student) {
		return studentDao.save(student) > 0 ;
	}

	public Student findStudent(String studentNo) {
		try {
			return studentDao.get("select * from student where studentNo=?", studentNo);
			
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return null;
	}

	public boolean deleteStudent(String studentNo) {
		Student existStudent = findStudent(studentNo);
		if(existStudent!=null) {
			return studentDao.delete(studentNo) > 0;
		}
		return false;
	}

	public void showAll() {
		Iterator <Student> it = studentDao.list("select * from student").iterator();
		System.out.println("学号\t姓名\t年龄\t性别");
		while(it.hasNext()) {
			Student student = it.next();
			System.out.println(student.getStudentNo()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.getSex());
		}
	}
	
	@Override
	public Student updateStudent(String studentNo, String name, String sex, int age) {
		//Student existStudent=findStudent(studentNo);
		//if(existStudent!=null) {
			studentDao.update("update student set name=?,sex=?,age=? where studentNo=?", name,sex,age,studentNo);
			//studentDao.update(studentNo, name, age, sex);
		//}
		return null;
	}
}

配置文件:db-config-properties:

DRIVER_CLASS=com.mysql.jdbc.Driver
URL=jdbc:mysql:///mangerstore
USER=root
USERPWD=123456

我的sm的数据库名字是mangerstore:

如何将自己写的项目打成jar包,再引用到其他项目中

如何将自己写的项目打成jar包,再引用到其他项目中 

客户端Client

package com.xintouyun.sm;
import java.util.Scanner;

import com.xintouyun.sm.entity.Student;
import com.xintouyun.sm.service.impl.impl4;

public class Client {

	public static void main(String[] args) {
		impl4 data=new impl4();
		String nextor="y";
		System.out.println("-----------------欢迎使用学生管理系统-------------------");
		do { 
			Scanner sc=new Scanner(System.in);
			System.out.println("1.添加2.查找3.删除4.修改5.显示"); 
		int i=0;
		try {
		i=sc.nextInt();
		switch(i) {
		case 1:
			//Student s=new Student();
			System.out.println("请输入学生学号");
			String id=sc.next();
			System.out.println("请输入学生年龄");
			int age=sc.nextInt();
			System.out.println("请输入学生姓名");
			String name=sc.next();
			System.out.println("请输入学生性别");
			String sex=sc.next();
			Student student=new Student();
			student.setAge(age);
			student.setName(name);
			student.setStudentNo(id);
			student.setSex(sex);
			boolean result=data.addStudent(student);
			if(result) {
				System.out.println("添加成功");
				data.showAll();
			}else {
				System.out.println("添加失败");
			}
			break;
		case 2:
			System.out.println("请输入要查找的学生学号");
			id=sc.next();
			Student existStudent=data.findStudent(id);
			if(existStudent!=null) {
			System.out.println("查找到学生信息如下");
			System.out.println(existStudent.getAge()+"\t"+existStudent.getName()+"\t"+existStudent.getStudentNo()+"\t"+existStudent.getSex());
			}else {
			System.out.println("未查找到相关信息");
			}
		break;
			
		case 3:
			System.out.println("请输入要删除的学生学号");
			id=sc.next();
			result=data.deleteStudent(id);
			if(result) {
				System.out.println("删除成功");
				data.showAll();
			}else {
				System.out.println("删除失败");
			}
			break;
			
		case 4:
			System.out.println("请输入要更新的学生学号");
			id=sc.next();
				System.out.println("请输入要更新的学生姓名");
				String name1=sc.next();
				System.out.println("请输入要更新的学生年龄");
				int age1=sc.nextInt();
				System.out.println("请输入要更新的学生性别");
				String sex1=sc.next();
				data.updateStudent(id, name1, sex1, age1);
			break;
		case 5:
			data.showAll();
			break;
		
		}System.out.println("是否继续y/n");
			nextor=sc.next();
		}catch (Exception e) {
		}
	}while(nextor.equalsIgnoreCase("y"));
}
}

 好了,我们测试一下:

添加学生--对应数据库的插入操作

如何将自己写的项目打成jar包,再引用到其他项目中

查找学生:

如何将自己写的项目打成jar包,再引用到其他项目中

 删除操作:

如何将自己写的项目打成jar包,再引用到其他项目中

 修改操作:

如何将自己写的项目打成jar包,再引用到其他项目中

 好了:测试成功,当然,这里面还有很多异常没有处理,还有待进一步完善。

相关标签: jar