javaee的开发模式:
mvc,三层架构
web层:接收数据,用户交互
service层:写中间的逻辑
dao层:数据库访问代码
DBUtils如何使用
1.先导包
2.和正常的dao层一样书写
其中update还是增删改
query是查询
流程:
①创建方法
②获得JDBCUtils连接对象
③创建QueryRunner对象
④书写数据库
⑤(可以创建Object对象直接赋值),也可以(直接在update里面的可变参数书写)
⑥必写int row =qr.update(conn,sql.可变参数)
查询方法
①创建方法
②获得JDBCUtils连接对象
③创建QueryRunner对象
④书写数据库
⑤通过query方法,
书写第一条:Object [] obj=qr.query(conn, sql, new ArrayHandler());
list集合返回 ArrayListHandler所有的信息
BeanHandler第一条信息封装到javabean中
BeanListHandler封装所有javabean中
⑥必写int row =qr.update(conn,sql.可变参数)
第一queryRunner runner=new QueryRunner(DataSource dateSource存放的是调用的连接池工具类),省去了开头连接Connection的代码。
public class UserDao {
//添加用户
public void addUser() throws SQLException{
//获得连接对象
//创建QueryRunner对象
QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());//自动穿一个空闲连接池对象
String sql="insert into users (uid,username,password)values(?,?,?)";
Object[] obj={"aaa","宋大树","123456"};
int row=qr.update( sql, obj);
System.out.println("row");
}
//修改用户
public void updateUser() throws SQLException{
Connection conn=JDBCUtils.getConn();
QueryRunner qr=new QueryRunner();
String sql="UPDATE users SET username=? WHERE username=?";
Object[] obj={"礼物","李四"};
int row =qr.update(conn, sql, obj);
System.out.println(row);
}
//删除
public void deleteUser() throws SQLException{
Connection conn=JDBCUtils.getConn();
QueryRunner qr=new QueryRunner();
String sql=" delete from users where uid=?";
//Object[] obj={"123"};
int row =qr.update(conn, sql, "aaa");
System.out.println(row);
}
//ArrayListHandlar
//Object [] 查询所有用户信息(第一条)
public void get1() throws SQLException{
Connection conn=JDBCUtils.getConn();
//创建QueryRunner
QueryRunner qr=new QueryRunner();
String sql="select * from users";
Object [] obj=qr.query(conn, sql, new ArrayHandler());
for(Object o:obj){
System.out.println(o);
}
}
public void get2() throws SQLException {
Connection conn=JDBCUtils.getConn();
//创建QueryRunner
QueryRunner qr=new QueryRunner();
String sql="select * from users";
List<Object[]> list=qr.query(conn, sql, new ArrayListHandler());
for(Object [] obj:list){
for(Object o:obj){
System.out.println(o);
}
}
}
//BeanHandlar
public void get3() throws SQLException {
Connection conn=JDBCUtils.getConn();
//创建QueryRunner
QueryRunner qr=new QueryRunner();
String sql="select * from users where username=? and password=?";
Object [] obj={"小红帽","123456"};
Users user =qr.query(conn, sql, new BeanHandler<Users>(Users.class), obj);
System.out.println(user);
}
//BeanListHandlar
//List<JavaBean> 查询结果集的所有用户信息
public void get4() throws SQLException {
Connection conn=JDBCUtils.getConn();
//创建QueryRunner
QueryRunner qr=new QueryRunner();
String sql="select * from users "; //封装的对象
List<Users> list =qr.query(conn, sql, new BeanListHandler<Users>(Users.class));
System.out.println(list);
}
//ColumnListHandlar
//List<Column>类 查询某一字段的所有信息
public void get5() throws SQLException {
Connection conn=JDBCUtils.getConn();
//创建QueryRunner
QueryRunner qr=new QueryRunner();
String sql="select username from users "; //封装的对象
List<String>list= qr.query(conn, sql,new ColumnListHandler<String>());
System.out.println(list);
}
//ScalarHeader
//查询count\avg聚合函数的结果信息
public void get6() throws SQLException {
//创建QueryRunner
QueryRunner qr=new QueryRunner(MyDBUtils.getDataSource());
String sql="select count(*) from users "; //封装的对象
Long conut= qr.query( sql,new ScalarHandler<Long>());
int c=conut.intValue();
System.out.println(c);
}
DBUTlis连接池

修改代码:

就是用来管理conn的,通过池来获取Connection对象。主要是针对dao层
先导包→编写工具类(都是静态修饰的方法,或者静态代码块,或者静态常量)
JDBC事务
- 也就是在一次任务中要把所有的单元放在一个事务中执行。
- 默认的是一条sql语句就是一个事务
- 开启事务:start transaction
- 提交事务:commit(如果不提交只是存储到内存,提交之后真正更新数据)
- 回滚:rollback,如果没有提交事务则回滚到最初状态
- 如何修改DBUTlis事务
-
public class AccountDao { //转出方法 public void outMoney(Connection conn,String out,double money) throws SQLException{ QueryRunner qr= new QueryRunner(); String sql="update account set money=money-? where aname=?"; qr.update(conn,sql,money,out); } //out是转入账号也就是tom public void inMoney(Connection conn,String in,double money) throws SQLException{ QueryRunner qr= new QueryRunner(); String sql="update account set money=money+? where aname=?"; qr.update(conn,sql,money,in); } -
public void transfer(String out,String in,double money){ Connection conn=MyDBUtils.getConn(); try { //手动开启事务 conn.setAutoCommit(false); //收账人 accountDao.outMoney(conn,out, money);//往下走conn已经开始调取这一句方法 int y =1/0; //转账人 accountDao.inMoney(conn,in, money); conn.commit(); } catch (SQLException e) { //事务回滚 try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }//解决中文乱码 request.setCharacterEncoding("UTF-8"); //获取参数 String out=request.getParameter("out"); String in=request.getParameter("in"); String moneyStr=request.getParameter("money"); double money=Double.parseDouble(moneyStr); //调用Service层的转账方法 accountService.transfer(out, in, money); //解决乱码 response.setContentType("text/html;charset=UTF-8"); //重定向 response.getWriter().write("转账成功");

它的好处是即使出现异常,也不会出现钱转了,但是收方没有找到钱的问题。
事务只能走一个数据库语句,要不全部执行,要不不执行
事务具有原子性、一致性、隔离性、持久性。 - ajax
同步是服务器返回客户端之前,客户端无法操作。
异步是客户端请求服务器,服务器是否返回客户端,都可以操作。
ajax就是替代了request请求直接发送到到tomat服务器,做一个中转站。
json数据格式,键值对
1、对象{“key”“obj”} -
2.集合、/数组[{“name”:“李四”,}{}]容器
var person={"firstname":"张","lastname":"三丰","age":100}; //取值:变量名.方法名() alert(person.firstname); var persons=[ {"name":"张三","age":18}, {"name":"司南","age":19} ]; alert(persons[0].name); var shcool={ "oracle":[ {"name":"司南","age":20}, {"name":"李治烽","age":21} ] } alert(shcool.oracle[0].name);
3、和jq相关的ajax技术
其中
$.get(url,[data],[callback],[type])
$.post(url,[data],[callback],[type])
url地址,data请求服务器数据,callback回调函数,type数据类型(text,json,html)
$.ajax
asyc:true异步
dataType发送的参数
success:回调函数
type请求方式
url服务器地址

