一、Mybatis入门准备:
MVC设计模式分层
- 创建bean
- 创建servlet
- 创建service(包括Inter接口和Impl接口实现类)
- 创建dao层,负责连接访问数据库
1.1JAVA中Bean是什么?
POJO类:包括私有的属性和必要的方法,以及get/set方法
简单笼统的说就是一个类,一个可复用的类。javaBean在MVC设计模型中是model,又称模型层,在一般的程序中,我们称它为数据层,就是用来设置数据的属性和一些行为,然后我会提供获取属性和设置属性的get/set方法JavaBean是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。众所周知,属性名称符合这种模式,其他Java类可以通过自身机制发现和操作这些JavaBean 属性。
用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。
JavaBean可分为两种:一种是有用户界面(UI,User
Interface)的JavaBean;还有一种是没有用户界面,主要负责处理事务(如数据运算,操纵数据库)的JavaBean。JSP通常访问的是后一种JavaBean。
1.2创建Bean:
src文件夹下创建com.hzyc.beans包
package com.hzyc.beans;
public class AnimalBeans {
//POJO类:包含[私有]属性和[公开]的get/set方法
//如果需要使用set存储自定义类,需要重写equals和hashCode方法
//如果需要对POJO类进行打印输出,重写toString()方法
private int id;
private String address;
private String name;
private int number;
private String kind;
//生成一个默认全部属性为参数的构造方法【提供一个默认无参数的构造方法,迁就是用框架】
public AnimalBeans(int id, String address, String name, int number,
String kind) {
super();
this.id = id;
this.address = address;
this.name = name;
this.number = number;
this.kind = kind;
}
public AnimalBeans(){
super();
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + id;
result = prime * result + ((kind == null) ? 0 : kind.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + number;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AnimalBeans other = (AnimalBeans) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (id != other.id)
return false;
if (kind == null) {
if (other.kind != null)
return false;
} else if (!kind.equals(other.kind))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (number != other.number)
return false;
return true;
}
@Override
public String toString() {
return "AnimalBeans [id=" + id + ", address=" + address + ", name="
+ name + ", number=" + number + ", kind=" + kind + "]";
}
}
1.3src文件下创建com.hzyc.servelts
package com.hzyc.servlets;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AnimalServlets extends HttpServlet {
private static final long serialVersionUID = 1L;
public AnimalServlets() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("doPost");
request.setCharacterEncoding("utf-8");
/*主要调用[调用对应的service、bean。。。]【业务内容】
* 查询所有动物信息。。。
*
*
* 增加动物信息。。。。
* MVC模式:jsp----view[servlet-controller C] bean --- model
* |
* service层 处理业务,写业务逻辑
* |
* dao层 负责访问数据库
*
* servlet(controller)
* 选择合适的bean去处理(传递)数据
* 调用合适的service去完成业务处理
* 选择合适的视图显示业务处理结果
*
* */
}
}
1.4创建service层:
1.4.1创建AnimalInter接口
package com.hzyc.service;
import java.util.List;
import com.hzyc.beans.AnimalBeans;
public interface AnimalInter {
//主要的业务功能,只能定义方法,没有具体的实现
/*
* 查询所有动物信息。。。
*
* 增加动物性喜。。。
*
* */
public List<AnimalBeans> findAnimal();
public int addAnimal(AnimalBeans animal);
}
1.4.2创建AniamlImpl接口实现类:
package com.hzyc.service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.hzyc.beans.AnimalBeans;
import com.hzyc.dao.JDBCTools;
public class AnimalImpl implements AnimalInter{
final JDBCTools jdbc=new JDBCTools();
@Override
public List<AnimalBeans> findAnimal() {
// TODO Auto-generated method stub
ArrayList<Map<String,String>> rslist=jdbc.find("select * from animal");
List<AnimalBeans> alist=new ArrayList<AnimalBeans>();
for(Map<String,String> map : rslist){
AnimalBeans animal = new AnimalBeans();
animal.setAddress(map.get("address"));
animal.setId(Integer.parseInt(map.get("id")));
animal.setKind(map.get("kind"));
animal.setName("name");
animal.setNumber(Integer.parseInt(map.get("number")));
alist.add(animal);
}
return alist;
}
@Override
public int addAnimal(AnimalBeans animal) {
// TODO Auto-generated method stub
String sql = "insert into animal values('"+animal.getAddress()+"',"+
animal.getId()+",'"+animal.getKind()+"','"+animal.getName()+"',"+animal.getNumber()+")";
int num = jdbc.doUpdate(sql);
return num;
}
}
1.5创建com.hzyc.dao,负责连接访问数据库:
package com.hzyc.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class JDBCTools {
Connection conn;
Statement stmt;
ResultSet rs;
private String url="jdbc:mysql://localhost:3308/testdb";
private void connect(){
try{
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(url,"root","mysql");
stmt=conn.createStatement();
}catch(Exception e){
e.printStackTrace();
}
}
public int doUpdate(String sql){
connect();
int num = 0;
try{
num = stmt.executeUpdate(sql);
}catch(Exception e){
e.printStackTrace();
}finally{
close();
}
return num;
}
public ArrayList<Map<String,String>> find(String sql){
connect();
System.out.println("创建连接成功!!");
ArrayList<Map<String,String>> rlist=new ArrayList<Map<String,String>>();
try{
rs=stmt.executeQuery(sql);
System.out.println("查询数据成功!!!");
ResultSetMetaData rsmd =rs.getMetaData();
while(rs.next()){
Map<String,String> map=new HashMap<String,String>();
for(int i=1;i<=rsmd.getColumnCount();i++){
map.put(rsmd.getColumnName(i), rs.getString(rsmd.getColumnName(i)));
}
rlist.add(map);
System.out.println("添加数据成功!!!");
}
}catch(Exception e){
e.printStackTrace();
}finally{
close();
}
return rlist;
}
private void close(){
try{
if(conn!=null){
conn.close();
}
if(stmt!=null){
stmt.close();
}
if(rs!=null){
rs.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
此种设计模式是*面向对象*的编程模式,将MVC设计模式【jsp-view】中
的view层级进行划分分成了【controller C】-【service层,处理业务,写
业务逻辑层】-【dao层,负责访问以及连接数据库】,即面向对象的开发
模式【bean-model】的模式,这样做可以避免Java代码和SQL语法的耦
合。
搭建的时候先建立bean【就是一个类,可以复用的类,model,javabean
就是模型层】,而后建立servlets,在创建service层【通常包含接口和接
口实现类】,最后在创建dao层【即JDBCTools工具类】。