东软JavaWeb实训记-DAY5-MyBatis框架+jsp传值+登录过滤器

1.Mybatis:jdbc操作数据库的封装 持久化框架
a)创建 Mybatis 的配置文件:


b)sql语句放入映射文件中


2.持久化 :把瞬时状态的数据和持久状态数据转换的机制


瞬时状态:存放在内存中的临时数据,jvm停止 数据丢失
持久状态:存放在硬盘中的数据,不管jvm 数据都在
3.完成持久化的操作:
jdbc:
executeQuery :
executeUpdate :
io流
InputStream
OutPutStream
4.如何使用MyBatis
a)要添加MyBatis需要的jar文件
WEB-INF/lib 中
b)添加操作数据的驱动包
WEB-INF/lib
c)在 src 下创建mybatis的配置文件,以 xml 格式编译
d)创建 对应表的映射文件,用于编写 相应的sql语句
必须把该映射文件 添加到配置文件中


e)编写java代码完成数据库操作


api:应用程序接口,列出所有的类结构

5.如果把配置文件引用的dtd 设置为本地访问
dtd 通常 使用的是一个网址
把网址 映射为 本地的一个 文件
a)先找到 那个文件
b)再把 文件与 dtd 使用的网址 关联
6.MyBatis 操作数据库的步骤
a)创建配置文件
b)创建映射文件 ,并在配置文件中配置
c)在java类中读取配置文件
d)根据读取的配置文件 创建  SqlSessionFactory 对象
e)从SqlSessionFactory 中 打开 SqlSession 数据库链接
f)调用SqlSession中的方法 
insert
delete
update
select
g)关闭SqlSession链接



只要jsp 显示的数据 来自于数据库中,那么必须先访问serlvet 在跳转到jsp中显示


如何实现两个系统共享数据
oa
crm
操作同一个数据库

使用触发器
使用过程

带框架的完整项目结构:



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  <!-- namespace 指的是 该文件中 sql语句访问的位置
  	   通常是文件所在的 包名+文件名
  	   每一个映射文件的namespace 必须 唯一
   -->
<mapper namespace="com.neu.dao.UserInfoDao">
  
  <!-- 向表中添加一行数据  -->
  <!-- #{} 表示获取名为谁的数据
  		#{u_name} 从Map集合中获取 key 为u_name的值
   -->
  <insert id="save" parameterType="java.util.Map">
  	insert into user_info(u_id,u_name,u_sex,u_birth)
  	values(seq_user_id.nextval,#{u_name},#{u_sex},#{u_birth})
  </insert>
  
  <delete id="delete" parameterType="java.util.Map">
  	delete from user_info where 1=1 and u_id in (${u_id})
  	
  </delete>
  
  <update id="update" parameterType="java.util.Map">
  	update user_info set u_name=#{u_name},u_sex=#{u_sex}
  	where u_id=#{u_id}
  </update>
 <!-- 
 	查询到的每一行 用 一个 Map 集合封装
  -->
  <select id="search" resultType="com.neu.util.MyMap" parameterType="Map">
  	select * from user_info where 1=1
  </select>
  
</mapper>




package com.neu.util;

import java.util.HashMap;

public class MyMap extends HashMap {

	@Override
	public Object put(Object key, Object value) {
		return super.put(key.toString().toLowerCase(), value);
	}
}


package test;

import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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 Test {

	public static void main(String[] args) {
		try {
			//读取配置文件
			Reader reader=Resources
					.getResourceAsReader("mybatis_conf.xml");
//			创建 链接数据库的工厂类
			SqlSessionFactory factory=
					new SqlSessionFactoryBuilder()
						.build(reader);
//			获取数据库的链接,
//			openSession()获取的session需要自己手动提交事务
//			openSession(true) 获取的session会自动提交事务
			SqlSession session=factory.openSession(true);
			Map<String,String> map=new HashMap<String,String>();
//			map中的key 必须是表中列名
			map.put("u_sex", "女");
			
//			第一个参数:操作sql语句的 命名空间+id
//			第二个参数:sql需要的参数
//			int row=session
//					.insert("com.neu.dao.UserInfoDao.save", map);
			
//			List<Map<String, String>> list=
//					session.selectList("com.neu.dao.UserInfoDao.search",map);
//			System.out.println(list);
//			
//			//session.commit();
//			session.close();
			map=new HashMap<String,String>();
			map.put("u_id", "3,4");
			int row=session.delete("com.neu.dao.UserInfoDao.delete", map);
			System.out.println(row);
			
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}


<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:shanke"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
	<mapper resource="com/neu/dao/UserInfoDao.xml"/>
  </mappers>
</configuration>

更进一步



package com.neu.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.neu.util.MyBatisUtil;

public class BaseDao {

	protected SqlSession session;
	private String nameSpace;
	
	public BaseDao(String nameSpace){
		this.nameSpace=nameSpace;
	}

	protected final void getSession(){
		this.session=MyBatisUtil.getSession();
	}
	protected final void close(){
		MyBatisUtil.close(session);
	}
	
	public final int insert(String id,Object param){
		int row=0;
		try {
			getSession();
			row=session.insert(nameSpace+"."+id, param);
			session.commit();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			close();
		}		
		return row;
	}
	public final int update(String id,Object param){
		int row=0;
		try {
			getSession();
			row=session.update(nameSpace+"."+id, param);
			session.commit();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			close();
		}		
		return row;
	}
	public final int delete(String id,Object param){
		int row=0;
		try {
			getSession();
			row=session.delete(nameSpace+"."+id, param);
			session.commit();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}finally{
			close();
		}		
		return row;
	}
	public final List<Map<String,String>> search(String id,Object param){
		List<Map<String,String>> list=null;
		try {
			getSession();
			list=session.selectList(nameSpace+"."+id, param);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} finally{
			close();
		}
		return list;
	}
}





package com.neu.dao.impl;

import com.neu.dao.BaseDao;

/**
 * 
 * @author Administrator
 * <p>1.告诉BaseDao使用的nameSpace是什么</p>
 * <p>2.做特殊sql语句的处理</p>
 *
 */
public class UserInfoDao extends BaseDao {

	public UserInfoDao(){
		super("com.neu.dao.UserInfoDao");
	}
	
}

package com.neu.service;

import java.util.Map;

import com.neu.dao.impl.UserInfoDao;

public class UserInfoService {

	private UserInfoDao userInfoDao;
	
	public UserInfoService(){
		this.userInfoDao=new UserInfoDao();
	}
	
	public boolean doSave(Map<String, String[]> params){
		boolean flag=false;
		Map<String,String> map=null;
		//Map<String,String> map=ConvertUtil.convertMap(params);
		try {
			int row =userInfoDao.insert("save", map);
			if(row>0){
				flag=true;
			}
		} catch (Exception e) {
			//使用log4j记录日志
		}
		return flag;
	}
}








package com.neu.util;

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

public class ConvertUtil {

	public static Map<String, String> converterMap(Map<String,String[]> params){
		Map<String, String> map=null;
		if(null != params && params.size()>0){
			map=new HashMap<String, String>();
			for(Map.Entry<String,String[]> entry:params.entrySet()){
				String key=entry.getKey();
				String[] values=entry.getValue();
				String value="";
				if(null != values && values.length>0){
//					String temp=Arrays.toString(values);//
//					temp=temp.replace("[", "").replace("]", "")
//							.replace(" ", "");
					for(String str:values){
						value+=","+str;
					}
					value=value.substring(1);
				}
				map.put(key, value);
			}
			
		}
		return map;
	}
}



package com.neu.util;

import java.security.MessageDigest;

public class Md5Utils {
	static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
			'a', 'b', 'c', 'd', 'e', 'f' };
	public final static String md5(String s) {

		try {
			byte[] btInput = s.getBytes();
			MessageDigest mdInst = MessageDigest.getInstance("MD5");
			mdInst.update(btInput);
			byte[] md = mdInst.digest();
			int j = md.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}
			return new String(str);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
}

package com.neu.util;

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 MyBatisUtil {

	private static SqlSessionFactory factory;
	static{
		try {
			Reader reader=Resources
					.getResourceAsReader("mybatis_conf.xml");
			factory=new SqlSessionFactoryBuilder()
					.build(reader);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}
	
	public static SqlSession getSession(){
		if(factory == null){
			throw new RuntimeException("sqlFactroy构建失败");
		}
		SqlSession session=factory.openSession();
		return session;		
	}
	
	public static void close(SqlSession session){
		if(session!=null){
			try {
				session.close();
			} catch (Exception e) {
				e.printStackTrace();
			} finally{
				session=null;
			}
		}
	}
}

package com.neu.util;

import java.util.HashMap;
@SuppressWarnings("all")
public class MyMap extends HashMap {

	@Override
	public Object put(Object key, Object value) {
		// TODO Auto-generated method stub
		return super.put(key.toString().toLowerCase(), value);
	}
}


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.neu.dao.UserInfoDao">
  
  <!--  map.put("a","zhangsan")
  	#{a} 表示 使用 ?占位符	?  再赋值 为 zhangsan
  	${a} 表示 直接获取数据显示  zhangsan
   -->
  <insert id="save" parameterType="Map">
  	insert into user_info(u_id,u_name,u_sex,u_birth)
  		values(seq_user_id.nextval,#{u_name},#{u_sex},#{u_birth})
  </insert>
  <sql id="">
  	<include refid=""></include>
  </sql>
</mapper>

<?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>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:shanke"/>
        <property name="username" value="scott"/>
        <property name="password" value="tiger"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    	<mapper resource="com/neu/dao.UserInfoDao.xml"/>
  </mappers>
</configuration>

关于一些jsp页面的一些东西:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" 
	prefix="c"%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
	table {
		width: 70%;
		min-width: 500px;
		max-width: 700px;
		border: 1px solid black;
		border-collapse: collapse;
	}
	td{
		border: 1px solid black;
		text-align: center;
	}
	tr:hover{
		background-color: gray;
	}
	
</style>
</head>
<body>
<form action="TeasDeleteServlet" method="post" onsubmit="return checkForm();">
	<!-- 1  T1001  张飞 sasss -->
	<table>
		<tr>
			<td>
				<input type="checkbox" onclick="show(this.checked)">
			</td>
			<td>编号</td>
			<td>姓名</td>
			<td>联系电话</td>
			<td>操作</td>
		</tr>
		<c:forEach items="${sessionScope.teas}" var="tea" varStatus="i">
			<tr>
				<td><!-- 把主键的值 赋值给复选框 -->${i.index }
					<input type="checkbox" id="tea_${tea.tea_id }" name="tea_id" value="${tea.tea_id }">
				</td>
				<td>${tea.tea_no }</td>
				<td>${tea.tea_name }</td>
				<td>${tea.tea_tel }</td>
				<td>
					<a href="#" onclick="doDelete('${tea.tea_id }','${tea.tea_name }')">删除</a>
					<a href="#" onclick="toEdit('${tea.tea_id }')">修改</a>
				</td>
			</tr>
		</c:forEach>
		
		
		<tr>
			<td colspan="5" align="center">
				<input type="submit" value="批量删除">
			</td>
		</tr>
	</table>
</form>
</body>
<script type="text/javascript">
	function show(flag)
	{
		var chs=document.getElementsByName("tea_id");
		for(var i=0;i<chs.length;i++)
		{
			chs[i].checked=flag;
			//chs[i].checked=!chs[i].checked;
		}
	}
	
	function doDelete(id,name)
	{
		show(false);
		document.getElementById("tea_"+id).checked=true;
		var f=confirm("你确定要删除【"+name+"】数据吗?");
		if(f)
		{
			//url 重写
			window.parent.window.location.href="TeasDeleteServlet?tea_id="+id;
		}
	}
	function checkForm()
	{
		var index=0;
		var chs=document.getElementsByName("tea_id");
		for(var i=0;i<chs.length;i++)
		{
			if(chs[i].checked)
			{
				index=1;
				break;
			}
		}
		if(index==0){
			alert("请选择要删除的数据!!!");
			return false;
		}
		var f=confirm("你确定要删除这些数据吗?");
		return f;
	}
	function toEdit(id)
	{
		window.parent.window.location.href="ToEditServlet?tea_id="+id;
	}
</script>
</html>

登录过滤器:

package com.neu.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class LoginFilter
 */
@WebFilter({ "*.jsp", "/*Servlet"})
public class LoginFilter implements Filter {

    /**
     * Default constructor. 
     */
    public LoginFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req=(HttpServletRequest) request;
		HttpServletResponse resp=(HttpServletResponse) response;
		String uri=req.getRequestURI();
		if(uri.endsWith("login.jsp")
				||uri.endsWith("LoginServlet")
				||uri.endsWith("center.jsp")){
			chain.doFilter(request, response);
		}else{
			HttpSession session=req.getSession();
			Object obj=session.getAttribute("user");
			if(obj==null){
				resp.sendRedirect("center.jsp");
			}else{
				chain.doFilter(request, response);
			}
		}
		
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}


猜你喜欢

转载自blog.csdn.net/muyao987/article/details/75675548
今日推荐