JAVA_OA(六):登陆实例
- 例子逻辑简述
- SpringMVC中的jdbc
- 具体代码
例子逻辑简述
- 登陆信息的提交(提交方法:/user/login.do)
- Controller中执行@RequestMapping(“/user/login.do”)
- 找到判断方法UserDao,执行并返回结果
- Controller返回结果
这个是一般的登录流程图(但是,这次我们的登陆错误将会直接用Error页面代替):
SpringMVC中的jdbc
这个是jar包,我这次用的是Oracle,但是要注意版本3.28似乎不支持Oracle12c,但是支持11g。但是如果换成4的话,注意jdk要换成8,咳咳。
具体代码
1.先上非java文件
<!--加载数据库的连接配置 -->
<util:properties id="jdbc" location="classpath:db.properties"></util:properties>
<!--配置数据源 数据库连接池-->
<!-- 会一一注入到class中,value是db中的值,这里不懂可以看三 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="url" value="#{jdbc.url}"></property>
<property name="driverClassName" value="#{jdbc.driver}"></property>
<property name="username" value="#{jdbc.user}"></property>
<property name="password" value="#{jdbc.password}"></property>
<property name="maxActive" value="#{jdbc.maxActive}"></property>
<property name="maxWait" value="#{jdbc.maxWait}"></property>
</bean>
db.properties:
user=javaoa
password=******(此处保密)
url=jdbc:oracle:thin:@localhost:1521:orcl
driver=oracle.jdbc.OracleDriver
#数据源配置
maxActive=5
maxWait=5000
2.Controller的代码
@Resource
private TeacherDao UserrDao;
@RequestMapping("/user/login.do")
public String login(String id,String name,String password,HttpSession session){
String s=UserDao.login(name, password);
if(s.equals("true")){
session.setAttribute("login", "true");
return "redirect:list.do";
}else{
return "error";
//直接返回error页面
}
}
// list
@RequestMapping("/user/list.do")
public String list(ModelMap map){
List<User> list=UserDao.list();
map.addAttribute("listsss", list);
return "list";
//这里没有影响,你可以随便返回一个不是error的页面
}
3.Dao
**
* 数据库连接池的好处:
*
* 1 重用资源以减少链接次数
* 我用的时候 问数据源 要一个 用完了关闭 ;
* IO性能消耗
* 2 更好的屏蔽数据库的相关性,保护数据库
*
*/
@Component
public class UserrDao {
@Resource(name="ds")
private DataSource dataSource;
public String login(String name,String password){
Connection conn=null;
String s=null;
try {
conn=dataSource.getConnection();
String sql="select * from user where name=?";
/**
* 第一 个 连接效率比较高 用的是 预编译的sql(PreparedStatement)
* 第二个 可以防止sql注入
*/
PreparedStatement ps=conn.prepareStatement(sql);
ps.setString(1, name);
ResultSet rs=ps.executeQuery();
User user=new User();
while(rs.next()){
user.setPassword(rs.getString("password"));
}
if(password.equals(user.getPassword())){
s="true";
return s;
}else{
s="false";
return s;
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return s;
}
public List<User> list(){
List<User> tlist=new ArrayList<User>();
Connection conn=null;
String s=null;
try {
conn=dataSource.getConnection();
String sql="select * from User";
PreparedStatement ps=conn.prepareStatement(sql);
ResultSet rs=ps.executeQuery();
while(rs.next()){
User user=new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
tlist.add(t);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
//实际上是调用了重写的close方法,关闭了连接池--可以先无视
} catch (SQLException e) {
e.printStackTrace();
}
}
return tlist;
}
@Test
public void test1(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
User s=ac.getBean("testDao",UserDao.class);
System.out.println(s.getDataSource().toString());
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}