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 mapperPUBLIC "-//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 {@Overridepublic 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 blocke.printStackTrace();}}}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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 {@Overridepublic Object put(Object key, Object value) {// TODO Auto-generated method stubreturn super.put(key.toString().toLowerCase(), value);}
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//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 configurationPUBLIC "-//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" οnsubmit="return checkForm();"><!-- 1  T1001  张飞 sasss --><table><tr><td><input type="checkbox" οnclick="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="#" οnclick="doDelete('${tea.tea_id }','${tea.tea_name }')">删除</a><a href="#" οnclick="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}}

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

  1. 东软JavaWeb实训记-DAY8-小组项目开发实践(文件上传下载等操作)

    项目结构 其他: 源代码: package com.neu.dao;public class FileInfoDao extends BaseDao {public FileInfoDao() {su ...

  2. javaweb实训第六天下午——Mybatis基础

    Mybatis基础 1.课程介绍 2.为什么需要Mybatis 3.初识Mybatis 3.1.Mybatis是什么 3.1.1.什么是框架 3.1.2.什么叫数据库持久化 3.1.3.什么是ORM ...

  3. JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(文章最后有源码)

    JavaWeb实训项目:基于SSM框架的CRM客户关系管理系统(附部分源码) 一.项目背景 项目演示 二.项目介绍 三.涉及技术 总结 源码地址 一.项目背景 "世上本来没有CRM,大家的生 ...

  4. java web开发实训心得,【JavaWeb实训心得体会材料】

    JavaWeb实训心得体会材料 <JavaWeb实训心得体会材料.doc>由会员分享,可免费在线阅读全文,更多与<JavaWeb实训心得体会材料>相关文档资源请在帮帮文库(ww ...

  5. [JavaWeb实训Day4]__jsoup爬虫(爬新闻页面)词云的生成( kumo库)

    目录 一.本次实验分析过程 二.Jee连接MySQL数据库 三.异步传值及界面设计 四.jsoup爬虫爬取新闻网页 五.新闻词云的生成( kumo库) 六.存入数据库 快速链接:[JavaWeb项目实 ...

  6. [JavaWeb实训Day3]__button_框架布局点击事件

    目录 一.基于JavaScript框架布局 二.button设置id 样式 三.button点击事件 快速链接:[JavaWeb项目实训]--总目录 我的运行环境在前面博客提到过,这里是在wc1项目下 ...

  7. JavaWeb实训项目 河南省旅游指南

    1 基本信息 1.1 系统名称 河南省旅游指南的设计与实现 1.2 开发运行环境 Window 10 64位 JDK 1.8.0 IDEA 2019版本 MySql 5.1.47 Tomcat 8.5 ...

  8. 实训项目:基于Springboot框架开发的知识库系统

    前言 最近有一个企业实训课,有安排一个基于springboot框架去开发一个知识库系统的项目,故去开发了一个系统. 源码地址 github:https://github.com/linwb-0924/ ...

  9. Bootstrap4+MySQL前后端综合实训-Day02-PM【新闻管理后台(登录页面、首页)、#left>a:nth-child(4) {}】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 主页 #left>a:nth-child(4) {} 登录页 主页 #left& ...

最新文章

  1. 【武书连】2021 中国一流大学名单(30 所)和中国大学综合实力 700 强出炉!
  2. R语言使用R原生函数plot和lines可视化线图、并使用lty参数自定义线条类型、lwd自定义设置线条的粗细、col参数自定义线条颜色(Change R base plot line types)
  3. go语言 rlock() defer runlock()_Go并发编程之美-读写锁
  4. Android Studio导入第三方类库的方法
  5. tp5 ajax 路由,tp5中ajax方式提交表单
  6. 坚持跑步与读书,方不辜负此生
  7. 因kuaipan等PPA造成的Duplicate sources.list entry 错误
  8. 【HDU 3038】How Many Answers Are Wrong(带权并查集,区间型)
  9. Linux常用远程连接工具介绍,总有一款适合你
  10. SpringBoot整合WebService实例
  11. 数字图像处理——Sobel算子锐化、Prewitt算子锐化
  12. 微分几何的20-23节笔记
  13. 自旋对于synchronized关键字的底层意义与价值分析:
  14. 增值电信业务经营许可证办理续期流程
  15. python阶梯图_不会你还不懂怎么用Python制图吧?师兄教你如何学会绘制漂亮的阶梯图...
  16. 仿微同商城后台API
  17. 中级人力资源管理师(中级经济师)备考攻略
  18. python3爬取微博评论api情感分析_如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析...
  19. 如何选择适合你的兴趣爱好(六十六),折纸
  20. 【从零开始JavaEE课设】《影院系统》成品展示——主页面

热门文章

  1. hydd的Linux笔记Day72
  2. Flutter系列之Container宽度自适应
  3. python数据分析与挖掘实战---chapter7航空公司客户价值分析
  4. 想学人工智能害怕数学?莫慌,入门很简单
  5. eclipse用Java输入_Java基础教程——使用Eclipse快速编写Java输入输出代码
  6. 基线_EQSignal 操作动画第三弹:基线校正
  7. 2022年博客之星排行榜 日榜 2022-12-30博客之星总磅
  8. 用python爬取qq空间内容_利用Fiddler抓包和py的requests库爬取QQ空间说说内容并写入文件...
  9. 车辆重识别/再辨识数据集: Vehicle Re-ID Datasets Collection
  10. Java Web 学习笔记3 Servlet生命周期