java常用的一些工具类
日期工具类
Date工具类封装
package Dao;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Dateutils {
public static final SimpleDateFormat sdf=new SimpleDateFormat("yy-MM-dd");
public static java.util.Date strtoutildate(String str){
try {
Date date = sdf.parse(str);
return date;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
public static java.sql.Date utiltosqldate(java.util.Date date){
return new java.sql.Date(date.getTime());
}
public static String utildatetostr(java.util.Date date){
String format = sdf.format(date);
return format;
}
}
MD5加密工具类
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5utils {
/**
* 密码加密
*/
public static String encrypt(String password) throws NoSuchAlgorithmException {
//获得MD5加密对象
MessageDigest md5=MessageDigest.getInstance("md5");
//对原密码加密
md5.update(password.getBytes());
//获得加密后的密码字节
byte[] digest = md5.digest();
//将字节转化为密码字符串
StringBuilder builder = new StringBuilder();
for(byte b: digest)
{
//转化为16进制字符串
//将高4位转换为16进制
builder.append(Integer.toHexString(b>>4&0xf));
//将低4位转换为16进制
builder.append(Integer.toHexString(b&0xf));
}
return builder.toString();
}
}
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Util {
public static String getMD5(String password) {
try {
// 得到一个信息摘要器
MessageDigest digest = MessageDigest.getInstance("md5");
byte[] result = digest.digest(password.getBytes());
StringBuffer buffer = new StringBuffer();
// 把每一个byte 做一个与运算 0xff;
for (byte b : result) {
// 与运算
int number = b & 0xff;// 加盐
String str = Integer.toHexString(number);
if (str.length() == 1) {
buffer.append("0");
}
buffer.append(str);
}
// 标准的md5加密后的结果
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return "";
}
}
}
DBUtils工具类
package com.blb.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
private static Connection conn = null;
static{
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sys?useUnicode=true&characterEncoding=UTF-8", "root", "root");
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
/**
* 执行查询
* @param sql
* @param params
* @return
* @throws SQLException
*/
public static ResultSet executeQuery(String sql, String... params) throws SQLException{
return getParams(sql, params).executeQuery();
}
/**
* 执行添加、删除、修改
* @param sql
* @param params
* @throws SQLException
*/
public static void execute(String sql, String... params) throws SQLException{
getParams(sql, params).executeUpdate();
}
/**
* 参数处理
* @param sql
* @param params
* @return
* @throws SQLException
*/
private static PreparedStatement getParams(String sql, String... params) throws SQLException{
PreparedStatement prepareStatement = conn.prepareStatement(sql);
for (int i = 0; i < params.length; i++) {
prepareStatement.setObject(i+1, params[i]);
}
return prepareStatement;
}
}
对事务封装的DButis
package account;
import JDBC.DBUtils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DButils {
private static final Properties PROPERTIES=new Properties();
private static final ThreadLocal<Connection> THREAD_LOCAL=new ThreadLocal<>();
static {
InputStream is = DBUtils.class.getResourceAsStream("/db.properties");
try {
PROPERTIES.load(is);
Class.forName(PROPERTIES.getProperty("driver"));
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getconnection(){
Connection conn=THREAD_LOCAL.get();//获取线程中存储的connection对象
try {
if(conn==null){
//如果连接对象为空则创建连接
conn= DriverManager.getConnection(PROPERTIES.getProperty("url"),PROPERTIES.getProperty("username"),PROPERTIES.getProperty("password"));
THREAD_LOCAL.set(conn);//把连接存在当前线程共享中
}
return conn;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
//事务的开启
public static void begin()
{
Connection conn=null;
try {
conn=getconnection();
conn.setAutoCommit(false);
}catch (SQLException e)
{
e.printStackTrace();
}
}
//提交事务
public static void commit()
{
Connection conn=null;
try {
conn=getconnection();
conn.commit();
}catch (SQLException e)
{
e.printStackTrace();
}finally {
DBUtils.closeall(conn,null,null);
}
}
//回滚事务
public static void rollback()
{
Connection conn=null;
try {
conn=getconnection();
conn.rollback();
}catch (SQLException e)
{
e.printStackTrace();
}finally {
DBUtils.closeall(conn,null,null);
}
}
public static void closeall(Connection conn, PreparedStatement pst, ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(pst!=null){
try {
pst.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
THREAD_LOCAL.remove();//关闭连接后移除已关闭的connection对象
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
DaoUtils
package com.blb.utils;
import com.blb.advanced.RowMapper;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class Daoutils<T>{
/**
* 公共处理增删改的方法
* @param sql 执行的sql语句
* @param args 参数列表
* @return
*/
public int commonsUpdate(String sql,Object...args){
Connection conn=null;
PreparedStatement pst=null;
conn = DButils.getConnection();
try {
pst=conn.prepareStatement(sql);
for(int i=0;i<args.length;i++){
pst.setObject(i+1,args[i]);
}
int i = pst.executeUpdate();
return i;
} catch (SQLException e) {
e.printStackTrace();
}finally {
DButils.closeall(null,pst,null);
}
return 0;
}
public List<T> commonsSelect(String sql, RowMapper<T> rowMapper,Object...args)
{
List<T> arr=new ArrayList<>();
Connection conn=null;
PreparedStatement pst=null;
ResultSet rs=null;
try {
conn=DButils.getConnection();
pst=conn.prepareStatement(sql);
if(args!=null){
//注意要判断非空否则查询所有的时候会报错误
for(int i=0;i<args.length;i++)
{
pst.setObject(i+1,args[i]);
}
}
rs = pst.executeQuery();
while (rs.next()){
//根据查询到的结果完成orm
T t=rowMapper.getRow(rs);
arr.add(t);
}
return arr;
} catch (SQLException e) {
e.printStackTrace();
}finally {
DButils.closeall(null,pst,rs);
}
return null;
}
}
在建一个包用于实现查询里面的orm映射,并且使用泛型这样可以供所有的使用
RowMapper 接口
package com.blb.advanced;
import java.sql.ResultSet;
public interface RowMapper<T> {
public T getRow(ResultSet rs);
}
PersonRowMapper 实现类
package com.blb.advanced.Impl;
import com.blb.advanced.RowMapper;
import com.blb.entity.Person;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
public class PersonRowMapper implements RowMapper<Person> {
@Override
public Person getRow(ResultSet rs) {
Person person=null;
int id1 = 0;
try {
id1 = rs.getInt("id");
int age = rs.getInt("age");
String name = rs.getString("name");
String email = rs.getString("email");
String address = rs.getString("address");
Date date = rs.getDate("borndate");
person=new Person(id1,name,age,date,email,address);
return person;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
Druid DButils
package com.blb.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class DButils {
//声明连接池对象
private static DruidDataSource ds;
private static final ThreadLocal<Connection> THREAD_LOCAL=new ThreadLocal<>();
static {
//实例化配置对象
Properties properties=new Properties();
InputStream inputStream= DButils.class.getResourceAsStream("/db.properties");
try {
properties.load(inputStream);
ds=(DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection()
{
Connection conn=THREAD_LOCAL.get();
try {
if(conn == null){
conn=ds.getConnection();
THREAD_LOCAL.set(conn);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static void begin(){
Connection conn=null;
try {
conn=getConnection();
conn.setAutoCommit(false);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void commit(){
Connection conn=null;
try {
conn=getConnection();
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closall(conn,null,null);
}
}
public static void rollback()
{
Connection conn=null;
try {
conn=getConnection();
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}finally {
closall(conn,null,null);
}
}
public static void closall(Connection conn, PreparedStatement pst, ResultSet rs){
try {
if(rs!=null){
rs.close();
if(pst!=null){
pst.close();
}
if(conn!=null){
conn.close();
THREAD_LOCAL.remove();
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//返回一个数据源
public static DataSource getDataSource(){
return ds;
}
}
生成验证码
需要 ValidateCode.jar包
页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>登录</title>
</head>
<body>
<form action="login" method="post">
用户名:<input type="text" name="username" /><br>
密码:<input type="password" name="password" /><br>
验证码:<input type="text" name="vcode" /><img src="/servlet01_war_exploded/createcode"><br>
<input type="submit" value="登录">
</form>
</body>
</html>
生成验证码
package com.blb.demo;
import cn.dsna.util.images.ValidateCode;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/createcode")
public class CreateCode extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ValidateCode vc=new ValidateCode(100,50,4,10);
//获得生成验证码里的内容
String code = vc.getCode();
HttpSession session = request.getSession();
session.setAttribute("code",code);
//响应给客户端
vc.write(response.getOutputStream());
}
}
生成ValidateCode对象的四个参数分别是:宽,高,字符个数,划线的个数