数据库名:taobaodb
配置文件:
JdbcTemplate主要提供以下五类方法:
-
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
-
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
-
query方法及queryForXXX方法:用于执行查询相关语句;
-
call方法:用于执行存储过程、函数相关语句。
1.单条数据查询(可用于登录判断用户名、密码)
a.获取jsp表单得到的表单信息;
User user = new User();
Map<String, String[]> map = request.getParameterMap();
b.将表单信息注入到User类的对象中;
try {
BeanUtils.populate(u1,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
c.按user的用户名、密码查询数据库,得到一个对象u2,如果u2不是null,那么u2和user的信息是一致的,也就是表单填的信息正确
public User findUser(User user) {
User u=null;
try{
u=jt.queryForObject("select userName,userPwd from userinfo where userName=? and userPwd=?",
new BeanPropertyRowMapper<User>(User.class),user.getUsername(),user.getUserpwd());
}catch (Exception e){
}
return u;
}
如果返回的u为null说明数据库中没有查询到符合条件的信息
单元测试代码:
import javax.sql.DataSource;
import java.io.IOException;
import java.util.Properties;
public class MySql {
@Test
public void addData(){
Properties p=new Properties();//配置文件对象
/*加载配置文件
MySql.class当前类的class文件,getClassLoader类的加载器,getResourceAsStream获取资源流*/
try {
p.load(MySql.class.getClassLoader().getResourceAsStream("druid.properties"));
//创建连接池
DataSource ds = DruidDataSourceFactory.createDataSource(p);
JdbcTemplate jt=new JdbcTemplate(ds);
User user=new User();
user.setUserName("Tom");
user.setUserPwd("666666");
//查询(单条)
try{ //如果数据库中没有查询到此条数据会报错,try catch一下
User u2 =
jt.queryForObject(
"select userName,userPwd from userinfo where userName=? and userPwd=?",
new BeanPropertyRowMapper<User>(User.class),
user.getUserName(),user.getUserPwd());
System.out.println(u2);}catch (Exception e){ }
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果
C:javaJDKinjava.exe
八月 10, 2019 10:36:41 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
User{userName='Tom', userPwd='666666'}
Process finished with exit code 0
2.count sum
String sql="select count(*) from user";
int count= jdbcTemplate.queryForObject(sql, Integer.class);
System.out.println(count);
3.多条数据查询
try{ //如果数据库中没有查询到此条数据会报错,try catch一下
RowMapper<User> rowMapper=new BeanPropertyRowMapper<User>(User.class);
String sql="select userName,userPwd from userinfo";
List<User> users=jt.query(sql,rowMapper);
for (User u:users) {
System.out.println(u);
}
}catch (Exception e){ }
运行结果:
八月 10, 2019 10:59:10 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
User{userName='Tom', userPwd='666666'}
User{userName='Alice', userPwd='666***'}
User{userName='Alan', userPwd='*6666#'}
User{userName='Ikun', userPwd='888888'}
User{userName='Bob', userPwd='123456'}
User{userName='Olive', userPwd='222223'}
User{userName='Oreo', userPwd='233233'}
Process finished with exit code 0
3.插入数据(可用于注册)
A.插入单条数据
try{
String sql="insert into userinfo (userName,userPwd,typeId,userStatus) values (?,?,?,?)";
int count= jt.update(sql, new Object[]{"孙悟空","87654321",3,"齐天大圣正常"});
System.out.println("成功插入数据,影响行数:"+count);
}catch (Exception e){ }
运行结果
八月 10, 2019 11:10:58 上午 com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl info
信息: {dataSource-1} inited
成功插入数据,影响行数:1
Process finished with exit code 0
B.批量插入
String sql="insert into userinfo (userName,userPwd,typeId,userStatus) values (?,?,?,?)";
List<Object[]> batchArgs=new ArrayList<Object[]>();
batchArgs.add( new Object[]{"孙行者","1111111",3,"正常"});
batchArgs.add( new Object[]{"者行孙","8222221",3,"大圣正常"});
jt.batchUpdate(sql, batchArgs);
4.删除数据
//删除userId为8,9的数据
String sql="delete from userinfo where userId=? or userId=?";
jt.update(sql,9,8);
5.修改(更新)数据
String sql="update userinfo set userStatus=? where userName=?";
jt.update(sql,"者行孙异常","者行孙");
String sql="update userinfo set userStatus=? where userName=?";
jt.update(sql,new Object[]{"Objec方式修改","者行孙"});