package s2jsp.bysj.dao; //此类所在包的名称
创新互联公司专注于中大型企业的做网站、成都网站制作和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户上1000家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注成都品牌网站建设和互联网程序开发,在前进的路上,与客户一起成长!
import java.sql.Connection; //导入Connection类
import java.sql.PreparedStatement; //导入PreparedStatement类
import java.sql.ResultSet; //导入ResultSet类
import java.util.ArrayList; //导入ArrayList类
import java.util.List; //导入List类
import s2jsp.bysj.entity.Users; //导入Users实体类
public class UserDao extends BaseDao { //UserDao类继承了BaseDao类
private Connection conn; //声明私有变量:Connection对象
private PreparedStatement pstmt; //声明私有变量:PreparedStatement对象
private ResultSet rs; //声明私有变量:ResultSet数据集对象
/**
* 根据用户名和密码,查找相关用户信息
* @return Users类的对象:用户对象
*@userName 用户名
*@password 用户密码
*/
public Users findUsers(String userName, String password) {
Users user = null; //声明实体类Users对象
String sql = "select * from users where userName=? and password=? "; //定义sql变量,此变量用来代替执行的SQL语句
try { //将会发生异常的代码放在了try{}catch{}块中
conn = this.getConn(); //初始化了Connection对象:conn,getConn()方法是继承自BaseDao的方法
pstmt = conn.prepareStatement(sql); //初始化PreparedStatement对象:pstmt
pstmt.setString(1, userName); //为SQL语句中的参数1设置值
pstmt.setString(2, password); //为SQL语句中的参数2设置值
rs = pstmt.executeQuery(); //用PreparedStatement的对象的executeQuery()方法初始化ResultSet对象:rs
if (rs.next()) { //如果ResultSet的next()方法返回true,则说明目标数据库中的下一行有数据
user = new Users(); //初始化Users实体类,此类准备用来初始化其域
user.setUserID(rs.getInt("userID")); //用数据库中的值初始化Users实体类中的UserID字段
user.setUserName(userName); //用数据库中的值初始化Users实体类中的UserName字段
user.setPassword(password); //用数据库中的值初始化Users实体类中的Password字段
user.setStatus(rs.getInt("status")); //用数据库中的值初始化Users实体类中的Status字段
}
} catch (Exception e) { //catch内使用了Exception异常根类的printStackTrace()方法:表示将错误信息打印在堆栈上
e.printStackTrace();
} finally { //finally块中的语句表示始终要执行的语句,并且在try语句块后执行
this.closeAll(conn, pstmt, rs); //try语句块中执行完毕或发生异常则使用closeAll()关闭所有使用到的数据库连接对象,此处省略this也可以,conn是Connection对象,pstmt是PreparedStatement对象,rs是ResultSet对象
}
return user; //此方法最后返回Users实体类的对象,注:如果方法定义有返回值则一定要加此关键字
}
/**
* 判断数据库中当前用户名是否存在
* @param userName 用户名
* @return 存在返回true,否则返回false
*/
public boolean findUsers(String userName){ //此方法用来查找传入的用户是否存在,返回一个布尔类型的值,true表示存在,false表示不存在
String sql = "select * from users where userName=? "; //定义SQL语句并放入sql变量中,这样的好处是简化了代码的长度和复用的便利
try {
conn = this.getConn(); //用BaseDao类的getConn()方法初始化Connection对象:conn
pstmt = conn.prepareStatement(sql); //用Connection对象的prepareStatement()方法初始化PreparedStatement对象:pstmt
pstmt.setString(1, userName); //设置SQL语句参数1的值:userName
rs = pstmt.executeQuery(); //使用PreparedStatement对象的executeQuery()方法初始化ResultSet对象:rs
if (rs.next()) { //如果数据库中有记录则返回true,此时方法停止
return true;
}
} catch (Exception e) {
e.printStackTrace(); //将错误信息打印到控制台
} finally {
this.closeAll(conn, pstmt, rs); //关闭所有使用到的数据库连接对象,此处可省略this关键字
}
return false; //最后的返回值可以是任意布尔类型的值
}
/**
* 添加用户信息
* @param userName
* @param password
* @return 操作数据库影响行数
*/
public int insertUser(String userName, String password,int status) { //插入一个用户的方法,此方法类的参数跟数据库中强制不为空的列是一一对应的
String sql = "insert into users values(?,?,?) "; //定义SQL语句
String[] params = new String[] { userName, password ,status+""}; //定义字符串数组用来存放传入的参数,因为传入的参数可能不止一个所以定义一个字符串数组来存放,困了余下的代码都差不多所以我简单写了
return this.executeSQL(sql, params);
}
/**
* 查找所有的注册用户信息
* @return 用户列表
*/
public List selectAllUser(){
List list=new ArrayList(); //实例化一个ArrayList对象,因为ArrayList是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对象
}
/**
* 根据用户ID,进行删除操作
* @param userID
* @return 执行SQL语句所影响的数据库行数
*/
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更适合于做修改插入的操作,应为此类是预编译的类,他的执行效率要高于Statement类。而普通的查询则使用Statement就可以了。
//ResultSet是结果集的意思,他用来存放从数据库中读取到的所有数据,他用next()方法来确定下一行是否还有数据,用返回的布尔类型值类表示。使用ResultSet对象的getXX(index)方法获取程序从数据库中读取到的值,index为参数位置,从1开始,1对应数据中第一个字段。
//Connection是连接的意思,他的PreparedStatement和createStatement分别用来初始化PreaparedStatement对象和Statement对象。为SQL语句中的参数赋值用PreparedStatement对象的setXX(index,值)方法,参数位置从1开始递增。
//List是一个接口,ArrayList是实现了List接口的类,也可以其为List的子类,所以List lst=new ArrayList();是一种编译时多态的表现,是完全允许的。其返回的是ArrayList子类的对象。ArrayList一般用来对数据的遍历查询,而LinkedList则比较擅长于增删改,他们都是集合,在此处用来存放实体类的对象。
//try{}catch{}finally{}就不用我多说了吧!用来捕捉容易发生异常的代码段,一些抛出异常的类是要求强制捕捉的,如果不捕捉编辑器会报告一个错误。finally{}块中的代码是无论代码执行正确与否则都会执行,此处用来对数据库连接对象执行关闭操作。
//其实我也是一个初学者,说了这么多也许还有很多没说到的地方,当然这段代码如果要解释完全是要牵扯到很多Java知识,应为篇幅和个人精力和知识量有限,先说到这儿了,各位也请多多包涵,多多指正吧!
dao,数据层,意思很清楚,我只做数据库操作,每个dao只针对一张表操作,我不做任何业务
biz,业务层,我只做某方面的业务处理,如果需要数据库工作,联系下数据部门(dao)协助我,业务层不会出现数据操作代码
你说的connection , SQL增删改查方法这些一定是数据层的
哪个是继承接口?你说的是实现接口吧
指的是把需要的方法抽象成接口类,并实现它
给些简单的代码:
//biz 接口
public interface UserBiz {
long addUser(Users users);
Users getUsersById(long id);
boolean isUserExists(Users users);
Users login(Users users);
}
//biz实现
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实现就不给了,因为使用hibernate实现
DAO是Data Access Object数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间。
在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象封装在一个公共API中。
用程序设计的语言来说,就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。
扩展资料:
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点 。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
JRE是个运行环境,JDK是个开发环境。因此写Java程序的时候需要JDK,而运行Java程序的时候就需要JRE。而JDK里面已经包含了JRE,因此只要安装了JDK,就可以编辑Java程序,也可以正常运行Java程序。
但由于JDK包含了许多与运行无关的内容,占用的空间较大,因此运行普通的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);
}
实现类,用CommonDaoImpl实现ICommonDao
用CommonServiceImpl实现ICommonService
实现的时候直接调用hibernateTemplate中的方法就行,或者自己写点儿,都不难
//以下是我做的时候做的代码,比较全,希望而已帮到你,记得采纳
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;
}