package s2jsp.bysj.dao; //此類所在包的名稱
創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的做網(wǎng)站、成都網(wǎng)站制作和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶上1000家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
import java.sql.Connection; //導(dǎo)入Connection類
import java.sql.PreparedStatement; //導(dǎo)入PreparedStatement類
import java.sql.ResultSet; //導(dǎo)入ResultSet類
import java.util.ArrayList; //導(dǎo)入ArrayList類
import java.util.List; //導(dǎo)入List類
import s2jsp.bysj.entity.Users; //導(dǎo)入U(xiǎn)sers實(shí)體類
public class UserDao extends BaseDao { //UserDao類繼承了BaseDao類
private Connection conn; //聲明私有變量:Connection對象
private PreparedStatement pstmt; //聲明私有變量:PreparedStatement對象
private ResultSet rs; //聲明私有變量:ResultSet數(shù)據(jù)集對象
/**
* 根據(jù)用戶名和密碼,查找相關(guān)用戶信息
* @return Users類的對象:用戶對象
*@userName 用戶名
*@password 用戶密碼
*/
public Users findUsers(String userName, String password) {
Users user = null; //聲明實(shí)體類Users對象
String sql = "select * from users where userName=? and password=? "; //定義sql變量,此變量用來代替執(zhí)行的SQL語句
try { //將會發(fā)生異常的代碼放在了try{}catch{}塊中
conn = this.getConn(); //初始化了Connection對象:conn,getConn()方法是繼承自BaseDao的方法
pstmt = conn.prepareStatement(sql); //初始化PreparedStatement對象:pstmt
pstmt.setString(1, userName); //為SQL語句中的參數(shù)1設(shè)置值
pstmt.setString(2, password); //為SQL語句中的參數(shù)2設(shè)置值
rs = pstmt.executeQuery(); //用PreparedStatement的對象的executeQuery()方法初始化ResultSet對象:rs
if (rs.next()) { //如果ResultSet的next()方法返回true,則說明目標(biāo)數(shù)據(jù)庫中的下一行有數(shù)據(jù)
user = new Users(); //初始化Users實(shí)體類,此類準(zhǔn)備用來初始化其域
user.setUserID(rs.getInt("userID")); //用數(shù)據(jù)庫中的值初始化Users實(shí)體類中的UserID字段
user.setUserName(userName); //用數(shù)據(jù)庫中的值初始化Users實(shí)體類中的UserName字段
user.setPassword(password); //用數(shù)據(jù)庫中的值初始化Users實(shí)體類中的Password字段
user.setStatus(rs.getInt("status")); //用數(shù)據(jù)庫中的值初始化Users實(shí)體類中的Status字段
}
} catch (Exception e) { //catch內(nèi)使用了Exception異常根類的printStackTrace()方法:表示將錯誤信息打印在堆棧上
e.printStackTrace();
} finally { //finally塊中的語句表示始終要執(zhí)行的語句,并且在try語句塊后執(zhí)行
this.closeAll(conn, pstmt, rs); //try語句塊中執(zhí)行完畢或發(fā)生異常則使用closeAll()關(guān)閉所有使用到的數(shù)據(jù)庫連接對象,此處省略this也可以,conn是Connection對象,pstmt是PreparedStatement對象,rs是ResultSet對象
}
return user; //此方法最后返回Users實(shí)體類的對象,注:如果方法定義有返回值則一定要加此關(guān)鍵字
}
/**
* 判斷數(shù)據(jù)庫中當(dāng)前用戶名是否存在
* @param userName 用戶名
* @return 存在返回true,否則返回false
*/
public boolean findUsers(String userName){ //此方法用來查找傳入的用戶是否存在,返回一個布爾類型的值,true表示存在,false表示不存在
String sql = "select * from users where userName=? "; //定義SQL語句并放入sql變量中,這樣的好處是簡化了代碼的長度和復(fù)用的便利
try {
conn = this.getConn(); //用BaseDao類的getConn()方法初始化Connection對象:conn
pstmt = conn.prepareStatement(sql); //用Connection對象的prepareStatement()方法初始化PreparedStatement對象:pstmt
pstmt.setString(1, userName); //設(shè)置SQL語句參數(shù)1的值:userName
rs = pstmt.executeQuery(); //使用PreparedStatement對象的executeQuery()方法初始化ResultSet對象:rs
if (rs.next()) { //如果數(shù)據(jù)庫中有記錄則返回true,此時方法停止
return true;
}
} catch (Exception e) {
e.printStackTrace(); //將錯誤信息打印到控制臺
} finally {
this.closeAll(conn, pstmt, rs); //關(guān)閉所有使用到的數(shù)據(jù)庫連接對象,此處可省略this關(guān)鍵字
}
return false; //最后的返回值可以是任意布爾類型的值
}
/**
* 添加用戶信息
* @param userName
* @param password
* @return 操作數(shù)據(jù)庫影響行數(shù)
*/
public int insertUser(String userName, String password,int status) { //插入一個用戶的方法,此方法類的參數(shù)跟數(shù)據(jù)庫中強(qiáng)制不為空的列是一一對應(yīng)的
String sql = "insert into users values(?,?,?) "; //定義SQL語句
String[] params = new String[] { userName, password ,status+""}; //定義字符串?dāng)?shù)組用來存放傳入的參數(shù),因?yàn)閭魅氲膮?shù)可能不止一個所以定義一個字符串?dāng)?shù)組來存放,困了余下的代碼都差不多所以我簡單寫了
return this.executeSQL(sql, params);
}
/**
* 查找所有的注冊用戶信息
* @return 用戶列表
*/
public List selectAllUser(){
List list=new ArrayList(); //實(shí)例化一個ArrayList對象,因?yàn)锳rrayList是List對象的子類
String sql = "select * from users ";
try {
conn = this.getConn();
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while(rs.next()) {
Users user = new Users();
user.setUserID(rs.getInt("userID"));
user.setUserName(rs.getString("userName"));
user.setPassword(rs.getString("password"));
user.setStatus(rs.getInt("status"));
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
this.closeAll(conn, pstmt, rs);
}
return list; //此方法返回一個List對象
}
/**
* 根據(jù)用戶ID,進(jìn)行刪除操作
* @param userID
* @return 執(zhí)行SQL語句所影響的數(shù)據(jù)庫行數(shù)
*/
public int deleteUserByID(String userID){
String sql="delete from users where userID = ? "; //?號表示占位符號此處要用一個變量表示
String[] param = new String[]{ userID };
return this.executeSQL(sql, param);
}
}
//PreaparedStatement和Statement比較而言,PreparedStatement更適合于做修改插入的操作,應(yīng)為此類是預(yù)編譯的類,他的執(zhí)行效率要高于Statement類。而普通的查詢則使用Statement就可以了。
//ResultSet是結(jié)果集的意思,他用來存放從數(shù)據(jù)庫中讀取到的所有數(shù)據(jù),他用next()方法來確定下一行是否還有數(shù)據(jù),用返回的布爾類型值類表示。使用ResultSet對象的getXX(index)方法獲取程序從數(shù)據(jù)庫中讀取到的值,index為參數(shù)位置,從1開始,1對應(yīng)數(shù)據(jù)中第一個字段。
//Connection是連接的意思,他的PreparedStatement和createStatement分別用來初始化PreaparedStatement對象和Statement對象。為SQL語句中的參數(shù)賦值用PreparedStatement對象的setXX(index,值)方法,參數(shù)位置從1開始遞增。
//List是一個接口,ArrayList是實(shí)現(xiàn)了List接口的類,也可以其為List的子類,所以List lst=new ArrayList();是一種編譯時多態(tài)的表現(xiàn),是完全允許的。其返回的是ArrayList子類的對象。ArrayList一般用來對數(shù)據(jù)的遍歷查詢,而LinkedList則比較擅長于增刪改,他們都是集合,在此處用來存放實(shí)體類的對象。
//try{}catch{}finally{}就不用我多說了吧!用來捕捉容易發(fā)生異常的代碼段,一些拋出異常的類是要求強(qiáng)制捕捉的,如果不捕捉編輯器會報(bào)告一個錯誤。finally{}塊中的代碼是無論代碼執(zhí)行正確與否則都會執(zhí)行,此處用來對數(shù)據(jù)庫連接對象執(zhí)行關(guān)閉操作。
//其實(shí)我也是一個初學(xué)者,說了這么多也許還有很多沒說到的地方,當(dāng)然這段代碼如果要解釋完全是要牽扯到很多Java知識,應(yīng)為篇幅和個人精力和知識量有限,先說到這兒了,各位也請多多包涵,多多指正吧!
dao,數(shù)據(jù)層,意思很清楚,我只做數(shù)據(jù)庫操作,每個dao只針對一張表操作,我不做任何業(yè)務(wù)
biz,業(yè)務(wù)層,我只做某方面的業(yè)務(wù)處理,如果需要數(shù)據(jù)庫工作,聯(lián)系下數(shù)據(jù)部門(dao)協(xié)助我,業(yè)務(wù)層不會出現(xiàn)數(shù)據(jù)操作代碼
你說的connection , SQL增刪改查方法這些一定是數(shù)據(jù)層的
哪個是繼承接口?你說的是實(shí)現(xiàn)接口吧
指的是把需要的方法抽象成接口類,并實(shí)現(xiàn)它
給些簡單的代碼:
//biz 接口
public interface UserBiz {
long addUser(Users users);
Users getUsersById(long id);
boolean isUserExists(Users users);
Users login(Users users);
}
//biz實(shí)現(xiàn)
public class UserBizImpl implements UserBiz {
private final UserDao dao;
public UserBizImpl(final UserDao dao) {
super();
this.dao = dao;
}
/*
* (non-Javadoc)
* @see biz.UserBiz#addUser(entity.Users)
*/
@Override
public long addUser(final Users users) {
return dao.add(users);
}
/*
* (non-Javadoc)
* @see biz.UserBiz#getUsersById(long)
*/
@Override
public Users getUsersById(final long id) {
return dao.getUsersById(id);
}
/*
* (non-Javadoc)
* @see biz.UserBiz#isUserExists(entity.Users)
*/
@Override
public boolean isUserExists(final Users users) {
if (!ObjectUtils.isEmpty(dao.getUsersByName(users
.getUserName()))) {
return true;
}
return false;
}
/*
* (non-Javadoc)
* @see biz.UserBiz#login(entity.Users)
*/
@Override
public Users login(final Users users) {
final Users users2 = dao.getUsersByName(users.getUserName());
if (ObjectUtils.isEmpty(users2)) {
return null;
}
if (users2.getUserPassword().equals(users.getUserPassword())) {
return users2;
}
return null;
}
}
//dao接口
public interface UserDao {
long add(Users users);
boolean del(long id);
Users getUsersById(long id);
Users getUsersByName(String name);
ListUsers search(Users condition);
boolean update(Users users);
}
//dao實(shí)現(xiàn)就不給了,因?yàn)槭褂胔ibernate實(shí)現(xiàn)
DAO是Data Access Object數(shù)據(jù)訪問接口,數(shù)據(jù)訪問:顧名思義就是與數(shù)據(jù)庫打交道。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。
在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應(yīng)用,應(yīng)該將所有對數(shù)據(jù)源的訪問操作抽象封裝在一個公共API中。
用程序設(shè)計(jì)的語言來說,就是建立一個接口,接口中定義了此應(yīng)用程序中將會用到的所有事務(wù)方法。在這個應(yīng)用程序中,當(dāng)需要和數(shù)據(jù)源進(jìn)行交互的時候則使用這個接口,并且編寫一個單獨(dú)的類來實(shí)現(xiàn)這個接口在邏輯上對應(yīng)這個特定的數(shù)據(jù)存儲。
擴(kuò)展資料:
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強(qiáng)大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚?,允許程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程 。
Java具有簡單性、面向?qū)ο蟆⒎植际?、健壯性、安全性、平臺獨(dú)立與可移植性、多線程、動態(tài)性等特點(diǎn) 。Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等。
JRE是個運(yùn)行環(huán)境,JDK是個開發(fā)環(huán)境。因此寫Java程序的時候需要JDK,而運(yùn)行Java程序的時候就需要JRE。而JDK里面已經(jīng)包含了JRE,因此只要安裝了JDK,就可以編輯Java程序,也可以正常運(yùn)行Java程序。
但由于JDK包含了許多與運(yùn)行無關(guān)的內(nèi)容,占用的空間較大,因此運(yùn)行普通的Java程序無須安裝JDK,而只需要安裝JRE即可。
參考資料來源:百度百科-java
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public interface ICommonDao {
public Serializable save(Object entity);
public void update(Object entity);
public void merge(Object entity);
public void delete(Object entity);
public Object findObject(Class clazz, Serializable id);
public List findList(String queryString);
public List findList(String queryString, Map args);
public Object findUniqueResult(String hql);
public List findList(final String hql, final int num);
}
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public interface ICommonService {
public Serializable save(Object entity);
public void update(Object entity);
public void merge(Object entity);
public void delete(Object entity);
public Object findObject(Class clazz, Serializable id);
public List findList(String queryString);
public List findList(String queryString, Map args);
public Object findUniqueResult(String hql);
public List findList(final String hql, final int num);
}
實(shí)現(xiàn)類,用CommonDaoImpl實(shí)現(xiàn)ICommonDao
用CommonServiceImpl實(shí)現(xiàn)ICommonService
實(shí)現(xiàn)的時候直接調(diào)用hibernateTemplate中的方法就行,或者自己寫點(diǎn)兒,都不難
//以下是我做的時候做的代碼,比較全,希望而已幫到你,記得采納
public class Dao extends HttpServlet{
private static final long serialVersionUID = 1L;
public static Connection getconnectoin(){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql:///shopping?useUnicode=truecharacterEncoding=utf-8",
"****",
"******);
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public void add(String ids){
String[] idss=ids.split(",");
try {
Connection conn= getconnectoin();
String sql = "insert into goo888 values(null,?)";
PreparedStatement ps = conn.prepareStatement(sql);
for (int i = 0; i idss.length; i++) {
ps.setInt(1, Integer.parseInt(idss[i]));
ps.execute();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public ListInfo goolist(String name) {
Info info = null;
System.out.println("姓名:"+name);
ListInfo list = new ArrayListInfo();
try {
Connection conn= getconnectoin();
String sql = "select b.id,a.name from wfp888 a join goo888 b on a.id=b.shop_id "
+ "where a.name like ? ";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "%"+name+"%");
ResultSet rs = ps.executeQuery();
while(rs.next()){
info = new Info();
info.setName(rs.getString("name"));
info.setId(rs.getInt("id"));
list.add(info);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public void delete(int id) {
try {
Connection conn= getconnectoin();
String sql = "delete from goo888 where id=? ";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, id);
ps.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
public ListInfo findAllInfo() {
Info info = null;
ListInfo list = new ArrayListInfo();
try {
Connection conn= getconnectoin();
String sql = "select * from wfp888 ";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
info = new Info();
info.setId(rs.getInt("id"));
info.setCode(rs.getString("code"));
info.setName(rs.getString("name"));
list.add(info);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}