一 :工具类介绍
将对应的jar 导入到项目中
1.1主要方法介绍
主要使用的方法 populate
功能实现将map集合中的数据封装到对象中
public static void populate(Object bean, Map properties) throws IllegalAccessException, InvocationTargetException {
BeanUtilsBean.getInstance().populate(bean, properties);
}
1.2示例代码和运行结果
示例代码
public class beanutilsDemo {
public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
HashMap<String, Object> stringObjectHashMap = new HashMap<>();
stringObjectHashMap.put("icon","6225123456788");
stringObjectHashMap.put("name","zly");
stringObjectHashMap.put("pwd","zly_123");
stringObjectHashMap.put("mobile","13211112222");
stringObjectHashMap.put("idcard","410102199001018978");
stringObjectHashMap.put("balance",2000.00);
User user = new User();
BeanUtils.populate(user,stringObjectHashMap);
System.out.println("user = " + user);
}
}
运行结果
这样就通过populate实现了将对象封装的操作
1.3 注意 这方法只能实现基本类型的转换
示例代码
class Demo{
private String name;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
public class beanutilsDemo {
public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
ConverterDemo();
}
public static void ConverterDemo() throws InvocationTargetException, IllegalAccessException {
HashMap<String, Object> demoMap = new HashMap<>();
demoMap.put("name","demo");
demoMap.put("date",new Date().toString());
Demo demo = new Demo();
BeanUtils.populate(demo,demoMap);
System.out.println("demo = " + demo);
}
}
运行结果
不可以正常转化string -> date
这时候就需要写自定义的转换器实现方法 注册到类中
编写自定义转化器 MyConverter
public class MyConverter implements Converter {
@Override
public Object convert(Class aClass, Object o) {
String o1 = (String) o;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
return simpleDateFormat.parse(o1);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
代码演示
class Demo{
private String name;
private Date date;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
public class beanutilsDemo {
public static void main(String[] args) throws InvocationTargetException, IllegalAccessException {
ConverterDemo();
}
public static void ConverterDemo() throws InvocationTargetException, IllegalAccessException {
HashMap<String, Object> demoMap = new HashMap<>();
demoMap.put("name","demo");
demoMap.put("date","2000-01-30");
Demo demo = new Demo();
ConvertUtils.register(new MyConverter(), Date.class);
BeanUtils.populate(demo,demoMap);
System.out.println("demo = " + demo);
}
}
二项目使用
1 原始代码查看
@WebServlet("/update")
public class UserUpdateServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String icno = req.getParameter("icno");
String name = req.getParameter("name");
String pwd = req.getParameter("pwd");
String mobile = req.getParameter("mobile");
String idcard = req.getParameter("idcard");
Double balance=null;
if (req.getParameter("balance")!=null){
balance = Double.parseDouble(req.getParameter("balance"));
}
User user = new User();
user.setBalance(balance);
user.setIdcard(idcard);
user.setPwd(pwd);
user.setMobile(mobile);
user.setName(name);
user.setIcno(icno);
boolean result = userService.updateUser(user);
if (result){
resp.sendRedirect("/list");
}else {
resp.getOutputStream().print("更新失败");
}
}
}
代码过于臃肿,大部分代码是获取值和赋值的操作接下来我们实用工具类简化操作
2 优化代码
@WebServlet("/update")
public class UserUpdateServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// req.setCharacterEncoding("UTF-8");
// String icno = req.getParameter("icno");
// String name = req.getParameter("name");
// String pwd = req.getParameter("pwd");
// String mobile = req.getParameter("mobile");
// String idcard = req.getParameter("idcard");
// Double balance=null;
// if (req.getParameter("balance")!=null){
// balance = Double.parseDouble(req.getParameter("balance"));
// }
// User user = new User();
// user.setBalance(balance);
// user.setIdcard(idcard);
// user.setPwd(pwd);
// user.setMobile(mobile);
// user.setName(name);
// user.setIcno(icno);
Map<String, String[]> parameterMap = req.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
boolean result = userService.updateUser(user);
if (result){
resp.sendRedirect("/list");
}else {
resp.getOutputStream().print("更新失败");
}
}
}
/**
* 添加用户
*/
@WebServlet("/insert")
public class UserAddServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String icno = req.getParameter("icno");
String name = req.getParameter("name");
String mobile = req.getParameter("mobile");
String idcard = req.getParameter("idcard");
Double balance=null;
if (req.getParameter("balance")!=null){
balance = Double.parseDouble(req.getParameter("balance"));
}
User user = new User();
user.setBalance(balance);
user.setIdcard(idcard);
user.setPwd("123456");
user.setMobile(mobile);
user.setName(name);
user.setIcno(icno);
if (result){
//页面显示
resp.sendRedirect("/list");
}else {
resp.getOutputStream().print("添加失败");
}
}
}
/**
* 添加用户
*/
@WebServlet("/insert")
public class UserAddServlet extends HttpServlet {
private UserService userService=new UserServiceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Map<String, String[]> parameterMap = req.getParameterMap();
User user = new User();
try {
BeanUtils.populate(user, parameterMap);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
}
//设置初始密码
user.setPwd("123456");
//业务添加
boolean result = userService.addUser(user);
if (result){
//页面显示
resp.sendRedirect("/list");
}else {
resp.getOutputStream().print("添加失败");
}
}
}
代码明显减少 有助于代码的可读性
三 总结
善于使用工具类可以简化代码的编写,提高工作效率。提高代码的可读性,即使后续代码有所更改,也可以快速理解