javaWeb校园宿舍管理解析(二)

上一章我们已经集成struts2,本章我们主要将mybatis集成进来,方便我们持久层代码的编写。

首先添加相应的包:mybatis-3.1.1.jar,oracle驱动包:ojdbc14.jar

创建管理员用户存储表,用来查询登录页选择管理员的用户,数据稍后再插入。

CREATE TABLE admin(
 Admin_ID number(11),
Admin_Username varchar(20),
Admin_Password varchar(20),
Admin_Name varchar(20),
Admin_Sex varchar(10),
Admin_Tel varchar(20)
)

创建configuration.xml。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- 注意:每个标签必须按顺序写,会提示错误:-->
<configuration>
	<!-- 属性配置 -->
	<properties resource="jdbc.properties"/>

	<!-- 设置缓存和延迟加载等等重要的运行时的行为方式 -->
	<settings>
		<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间  -->
		<setting name="defaultStatementTimeout" value="25000"/>
	</settings>

	<!-- 别名 -->
	<typeAliases>
		<typeAlias alias="Admin" type="com.bean.AdminBean"/>
	</typeAliases>

	<environments default="development">
		<!-- environment 元素体中包含对事务管理和连接池的环境配置 -->
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>
</configuration>

创建jdbc.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
username=project
password=project

创建表对应的实体类:

package com.bean;
public class AdminBean {

    private int Admin_ID ;
    private String Admin_Username ;
    private String Admin_Password ;
    private String Admin_Name ;
    private String Admin_Sex ;
    private String Admin_Tel ;
	public int getAdmin_ID() {
		return Admin_ID;
	}
	public void setAdmin_ID(int adminID) {
		Admin_ID = adminID;
	}
	public String getAdmin_Username() {
		return Admin_Username;
	}
	public void setAdmin_Username(String adminUsername) {
		Admin_Username = adminUsername;
	}
	public String getAdmin_Password() {
		return Admin_Password;
	}
	public void setAdmin_Password(String adminPassword) {
		Admin_Password = adminPassword;
	}
	public String getAdmin_Name() {
		return Admin_Name;
	}
	public void setAdmin_Name(String adminName) {
		Admin_Name = adminName;
	}
	public String getAdmin_Sex() {
		return Admin_Sex;
	}
	public void setAdmin_Sex(String adminSex) {
		Admin_Sex = adminSex;
	}
	public String getAdmin_Tel() {
		return Admin_Tel;
	}
	public void setAdmin_Tel(String adminTel) {
		Admin_Tel = adminTel;
	}
    

}

定义admin表的sql映射文件AdminUserMapper.xml,如果遇到mybatis配置问题,请自己查资料了解。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper     
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"     
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">     
   
<!-- namespace用于java代码调用时识别指定xml的mapper文件 -->
<mapper namespace="com.mybatis.model.Admin">
	<!-- 配置ORM映射 -->
	<resultMap type="Admin" id="admin_orm">
		<result property="Admin_ID" column="ADMIN_ID"/>
		<result property="Admin_Username" column="ADMIN_USERNAME"/>
		<result property="Admin_Password" column="ADMIN_PASSWORD"/>
		<result property="Admin_Name" column="ADMIN_NAME"/>
		<result property="Admin_Sex" column="ADMIN_SEX"/>
		<result property="Admin_Tel" column="ADMIN_TEL"/>
	</resultMap>
	<select id="selectByUsernameAndPassword" parameterType="map" resultType="Admin">
    	SELECT * FROM ADMIN WHERE ADMIN_USERNAME= #{Admin_Username} and ADMIN_PASSWORD=#{Admin_Password}
  	</select>
</mapper>

并将AdminUserMapper.xml,注册入configuration.xml中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- 注意:每个标签必须按顺序写,会提示错误:-->
<configuration>
	<!-- 属性配置 -->
	<properties resource="jdbc.properties"/>

	<!-- 设置缓存和延迟加载等等重要的运行时的行为方式 -->
	<settings>
		<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间  -->
		<setting name="defaultStatementTimeout" value="25000"/>
	</settings>

	<!-- 别名 -->
	<typeAliases>
		<typeAlias alias="Admin" type="com.bean.AdminBean"/>
	</typeAliases>

	<environments default="development">
		<!-- environment 元素体中包含对事务管理和连接池的环境配置 -->
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${driver}" />
				<property name="url" value="${url}" />
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<!-- ORM映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/model/AdminUserMapper.xml" />
	</mappers>

</configuration>

创建mybatis的工具类,主要是用于避免重复造轮子,类似JDBC连接、关闭连接一样,用工具类来实现。

package com.utils;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SessionFactoryUtil {

	private static final String RESOURCE = "Configuration.xml";
	private static SqlSessionFactory sqlSessionFactory = null;
	private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();

	static {
		Reader reader = null;
		try {
			reader = Resources.getResourceAsReader(RESOURCE);
		} catch (IOException e) {
			throw new RuntimeException("Get resource error:"+RESOURCE, e);
		}

		sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	}

	/**
	 * Function  : 获得SqlSessionFactory
	 */
	public static SqlSessionFactory getSqlSessionFactory(){   
        return sqlSessionFactory;   
    }

	/**
	 * Function  : 重新创建SqlSessionFactory
	 */
	public static void rebuildSqlSessionFactory(){
		Reader reader = null;
		try {
			reader = Resources.getResourceAsReader(RESOURCE);
		} catch (IOException e) {
			throw new RuntimeException("Get resource error:"+RESOURCE, e);
		}

		sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	}

	/**
	 * Function  : 获取sqlSession
	 */
	public static SqlSession getSession(){
		SqlSession session = threadLocal.get();

		if(session!=null){
			if(sqlSessionFactory == null){
				getSqlSessionFactory();
			}
			//如果sqlSessionFactory不为空则获取sqlSession,否则返回null
			session = (sqlSessionFactory!=null) ? sqlSessionFactory.openSession(): null;
		}

		return session;
	}

	/**
	 * Function  : 关闭sqlSession
	 */
	public static void closeSession(){
		SqlSession session = threadLocal.get();
		threadLocal.set(null);
		if(session!=null){
			session.close();
		}
	}
}

创建AdminDao持久层接口以及实现类。

package com.dao;

import com.bean.AdminBean;

public interface AdminDao {
	/**
	  * @date 2016-10-18 下午6:03:50
	  * @Title: CheckLogin
	  * @Description: 根据用户名称以及密码验证是否存在该管理员账号
	  * @return String    返回类型
	  * @throws
	 */
	public boolean CheckLogin(AdminBean admin);

}
package com.dao.impl;

import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.bean.AdminBean;
import com.dao.AdminDao;
import com.utils.SessionFactoryUtil;

public class AdminDaoImpl implements AdminDao{
	@Override
	public boolean CheckLogin(AdminBean admin) {
		SqlSession session = SessionFactoryUtil.getSqlSessionFactory().openSession();
		Map<String,Object> params = new HashMap<String ,Object>();
		params.put("Admin_Username", admin.getAdmin_Name());
		params.put("Admin_Password", admin.getAdmin_Password());
		AdminBean adminbean = (AdminBean) session.selectOne("com.mybatis.model.Admin.selectByUsernameAndPassword", params);
		session.close();
		if(adminbean!=null){
			return true;
		}
		return false;
	}
}

单元测试类通过显示"用户不存在"

package com.Junit;

import org.junit.Test;

import com.bean.AdminBean;
import com.dao.AdminDao;
import com.dao.impl.AdminDaoImpl;

public class AdminJunitTest {
	private AdminDao adminDao=new AdminDaoImpl();
	@Test
	public void testLoad(){
		AdminBean bean=new AdminBean();
		bean.setAdmin_Name("zhangsan");
		bean.setAdmin_Password("123");
		boolean exist = adminDao.CheckLogin(bean);
		if(exist){
			System.out.println("用户存在");
		}
		else{
			System.out.println("用户不存在!!");
		}
	}
}

我们往数据库塞一条数据:

insert into ADMIN (ADMIN_ID, ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_NAME, ADMIN_SEX, ADMIN_TEL)
values (1, ‘zhangsan‘, ‘123‘, ‘张三‘, ‘男‘, ‘159********‘);

执行上面的单元测试,测试结果:“用户存在”。

至此,mybatis的简单集成以及工具类都已经做好,剩下的就是action的配置以及其他功能dao的完成。

时间: 2024-08-07 16:59:53

javaWeb校园宿舍管理解析(二)的相关文章

javaWeb校园宿舍管理解析(三)

前两章主要集成Struts2以及mybatis,并进行的相应的小测试,现在我们来实现整个登录功能,说简单一下,登录功能就是登录页-->发送请求-->action-->dao-->主菜单. Struts2做为一个声明性架构,struts.xml作为他的入口,用来定义动作默认地方,很多企业习惯将功能模块化,然后在引入struts.xml,因为我们这个项目比较简单,我就不模块化了,所有动作都定义在struts.xml中. <?xml version="1.0" 

javaWeb校园宿舍管理解析(四)

关于3种身份的登录验证已经完成,现在我们开始逐步完成菜单中的选项. 首先看管理员进入系统的菜单选项,第一个是楼宇管理员,看源码关于该功能,只是简单的增删改查,工作中其实往往大多数也是针对实体类的增删改查,无非是持久层技术不同或者企业有大牛将这些方法统一,方便拿来直接用,先看效果页面. 上面一个页面关于楼宇管理员管理包含四个功能:查询(条件查询和全查询).删除.修改.新增. 首先我们来理清楚思路,管理员身份登录,进入index.jsp页面,我们会发现菜单相应操作都在left.jsp中,首先定位到-

javaWeb校园宿舍管理解析(一)

从网上看到一个开源的web项目-校园宿舍管理系统,大致看了一下源码,框架很简单,用的struts2+jdbc+jsp,虽然作为一个很简单的项目,但对于新手来说,直接看一套系统的源码,很快就会失去兴趣,本人作为一个新人过来很理解这种感受,因此对于这套系统,我准备将他重新翻写一遍,顺便将技术框架修改一下以便自己提高一下自己技术,在这里分享一下重新搭建项目的过程. 主体框架不动,仍用struts2,持久层方面我准备用mybatis,数据库用oracle11g. 废话不多说,直接开干! 首先创建一个Dy

[项目源码] JavaWeb校园宿舍管理系统

jsp校园宿舍管理系统源码,采用Servlet+JSP+MySQL.包含数据库文件,界面采用bootstrap,简洁大方. 项目导入eclipse后的目录结构如下: 关注下面公众号,回复“宿舍管理系统”下载源码 原文地址:https://www.cnblogs.com/dreamboy/p/11293750.html

Spring 源码解析之HandlerAdapter源码解析(二)

Spring 源码解析之HandlerAdapter源码解析(二) 前言 看这篇之前需要有Spring 源码解析之HandlerMapping源码解析(一)这篇的基础,这篇主要是把请求流程中的调用controller流程单独拿出来了 解决上篇文章遗留的问题 getHandler(processedRequest) 这个方法是如何查找到对应处理的HandlerExecutionChain和HandlerMapping的,比如说静态资源的处理和请求的处理肯定是不同的HandlerMapping ge

Android—— 4.2 Vold挂载管理_CommandListener (二)

在前一篇博客中介绍了个大体结构 Android-- 4.2 Vold挂载管理_主体构建 (一),按照代码的顺序结构来依次分析,这里来看看CommandListener这个类做了什么. 撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/38434263 一:CommandListener构造 在/system/vold/main.cpp的main函数中构建实例: cl = new CommandListener(); vm->setB

Android Fragment解析(二)

上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API. 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成等~~ 1.管理Fragment回退栈 类似与Android系统为Activity维护一个任务栈,我们也可以通过Activity维护一个回退栈来保存每次Fr

校园宿舍管理系统课程设计报告

课程设计报告 学    号   201610411418  /  2016104114122 姓    名   吴帝勇 /谢志良 班    级   16计科4班 题    目   校园宿舍管理系统 授课老师    袁飞 目录 第一章系统概述..............................................................................................................................1 1.

黑马程序员----内存管理之二《多对象的内存管理》

内存管理之二——<多对象的内存管理> 1.多对象的内存管理方式: 只要有人使用了这个对象,这个对象就不能被销毁: 只要你想使用这个对象,就让这个对象的引用计数器的值+1(让对象做一次retain操作): 当你不再使用这个对象,就让这个的对象的引用计数器的值-1(让对象做一次release操作): 谁alloc,谁就release: 谁retain,谁就release: 2.内存管理的代码规范: 只要调用了alloc必须有release/autorelease set方法的代码规范: 1.基本数