在how2j上学SSM,整理一下笔记
Spring是一个基于IOC和AOP的结构J2EE系统的框架
(1).IOC 反转控制 是Spring的基础,Inversion Of Control
简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象
DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。

(2).AOP 即 Aspect Oriented Program 面向切面编程
首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。
所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务
所谓的周边功能,比如性能统计,日志,事务管理等等

周边功能在Spring的面向切面编程AOP思想里,即被定义为切面

(3).在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发
然后把切面功能和核心业务功能 “编织” 在一起,这就叫AOP

  1. 功能分两大类,辅助功能和核心业务功能
  2. 辅助功能和核心业务功能彼此独立进行开发
  3. 比如登陆功能,即便是没有性能统计和日志输出,也可以正常运行
  4. 如果有需要,就把"日志输出" 功能和 “登陆” 功能 编织在一起,这样登陆的时候,就可以看到日志输出了
  5. 辅助功能,又叫做切面,这种能够选择性的,低耦合的把切面和核心业务功能结合在一起的编程思想,就叫做切面编程

mybatis

测试文件做增删改查操作

package com.how2java;import java.io.IOException;
import java.io.InputStream;
import java.util.List;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.how2java.pojo.Category;public class TestMybatis {public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();Category c = new Category();c.setName("新增加的Category");session.insert("addCategory",c);listAll(session);session.commit();session.close();}private static void listAll(SqlSession session) {List<Category> cs = session.selectList("listCategory");for (Category c : cs) {System.out.println(c.getName());}}
}

 Category c = new Category();c.setId(6);session.delete("deleteCategory",c);listAll(session);session.commit();session.close();

获取

Category c= session.selectOne("getCategory",3);System.out.println(c.getName());//      listAll(session);session.commit();session.close();

 Category c= session.selectOne("getCategory",3);c.setName("修改了的Category名稱");session.update("updateCategory",c);listAll(session);session.commit();session.close();

listAll(session);session.commit();session.close();

Category的配置文件

<?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.how2java.pojo"><insert id="addCategory" parameterType="Category" >insert into category_ ( name ) values (#{name})</insert><delete id="deleteCategory" parameterType="Category" >delete from category_ where id= #{id}</delete><select id="getCategory" parameterType="_int" resultType="Category">select * from   category_  where id= #{id}</select><update id="updateCategory" parameterType="Category" >update category_ set name=#{name} where id=#{id}</update><select id="listCategory" resultType="Category">select * from   category_</select>
</mapper>

模糊查询

SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了四种匹配模式:

1,% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2,_ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';
只找出“三脚猫”这样name为三个字且第一个字是“三”的;

3,[ ] :表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'
将找出“张三”、“李三”、“王三”(而不是“张李王三”);如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”
SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'
将找出“老1”、“老2”、……、“老9”;

4,[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'
将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';
将排除“老1”到“老4”,寻找“老5”、“老6”、……

什么是sql注入

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

【底层实现原理】MyBatis是如何做到SQL预编译的呢?其实在框架底层,是JDBC中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译
sql注入原文链接

mybatis多对一修改代码:

package com.how2java;import com.how2java.pojo.Category;
import com.how2java.pojo.Product;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class TestMybatis {public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();//        List<Product> ps = session.selectList("listProduct");
//        for (Product p : ps) {//       System.out.println(p+" ��Ӧ�ķ����� \t "+ p.getCategory());
//    }Category c1 = session.selectOne("getCategory",1);System.out.println(c1.getName());System.out.println(c1.getProducts());Product p5 = session.selectOne("getProduct",5);System.out.println(p5);System.out.println(p5.getCategory());p5.setCategory(c1);session.update("updateProduct",p5);session.commit();session.close();}
}

CRUD:增删改查。
注意点:需要提交事务,session.commit()

<?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.how2java.pojo"><insert id="addCategory" parameterType="Category">insert into category_ (name)values(#{name})</insert>

使用注解开发
1.注解在接口上实现
@Select(“select* from category_”)
public List list();

2.需要在核心配置文件中绑定接口
绑定接口

3.测试

public class TestMybatis {public static void main(String[] args) throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();CategoryMapper mapper = session.getMapper(CategoryMapper.class);//add(mapper);//delete(mapper);//get(mapper);//update(mapper);listAll(mapper);session.commit();session.close();}private static void update(CategoryMapper mapper){Category c = mapper.get(8);c.setName("修改了Category的名称");mapper.update(c);listAll(mapper);}private static void get(CategoryMapper mapper){Category c = mapper.get(8);System.out.println(c.getName());}private static void delete(CategoryMapper mapper){mapper.delete(2);listAll(mapper);}private static  void add(CategoryMapper mapper){Category c = new Category();c.setName("新增加的Category");mapper.add(c);//调用listAll方法,传入mapper接口//调用此方法会打印数据库内对象的名字//这样就能看到add之后的变化listAll(mapper);}private static void listAll(CategoryMapper mapper){List<Category> cs = mapper.list();for (Category c : cs) {System.out.println(c.getName());}}
}

本质:反射机制实现
底层:动态代理

Log4j

为了应对这种情况,我们使用Log4j来进行日志输出。 采用如下代码,执行雷同的输出。 可以看到输出结果有几个改观:

  1. 知道是log4j.TestLog4j这个类里的日志
  2. 是在[main]线程里的日志
  3. 日志级别可观察,一共有6个级别 TRACE DEBUG INFO WARN ERROR FATAL
  4. 日志输出级别范围可控制, 如代码所示,只输出高于DEBUG级别的,那么TRACE级别的日志自动不输出
  5. 每句日志消耗的毫秒数(最前面的数字),可观察,这样就可以进行性能计算
    缓存
    1.什么是缓存【Cache】?
    存在内存中的临时数据,将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题
    2.为什么使用缓存?
    减少和数据库的交互次数,减少系统开销,提高系统效率
    3.什么样的数据可以使用缓存?
    经常查询并且不经常改变的数据 【可以使用缓存】

(day2-spring和mybatis学习)-->重点增删改查相关推荐

  1. SpringBoot实战系列1:Spring Boot+Mybatis+MySql实现增删改查

    前言 Spring boot项目目前是Java Web开发领域最受市场欢迎的Spring框架之一,也是构建分布式项目.微服务项目重要基础之一,Spring Boot免去了配置繁杂的依赖和配置,使得开发 ...

  2. 用Spring+jdbc 写一个数据库增删改查

    用Spring+Jdbc写一个数据库增删改查 先展示项目结构 ClassBiz.java package com.gxj.biz;import java.util.List;import com.gx ...

  3. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  4. Mybatis基础:增删改查、模糊查询、多条件查询

    Mybatis基础:增删改查.模糊查询.多条件查询http://www.bieryun.com/3132.html 1.新建测试数据库,根据实体类属性创建 2.实体类 [java] view plai ...

  5. Vue学习(增删改查、ES6模块化概念)-学习笔记

    文章目录 Vue学习(增删改查.ES6模块化概念)-学习笔记 增删改查案例 ES6模块化概念 Vue学习(增删改查.ES6模块化概念)-学习笔记 增删改查案例 <!DOCTYPE html> ...

  6. SpringBoot + MyBatis + MySQL +IDEA2021 增删改查 2021-06-04

    SpringBoot + MyBatis + MySQL +IDEA2021 增删改查 1.环境介绍 Windows 10 JDK 1.8 MySQL 8 IDEA 2021.1.2 2.开始操作.新 ...

  7. myBatis 简单的增删改查

    myBatis 简单的增删改查 前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml 的配置文件中, mapper namespace="com.fjh.inte ...

  8. mybatis教程--实现增删改查的入门教程

    1 开发环境 jdk1.7.0_72 eclipse:eclipse-3.7-indigo mysql:mysql5.1 1.1 创建数据库 先导入sql_table.sql,再导入sql_data. ...

  9. SpringBoot+mybatis+postgreSQL+thymeleaf增删改查

    本篇是用SpringBoot搭建一个增删改查的demo,编辑器是idea,适合初学者学习.源码在GitHub上,https://github.com/jiangttian/springboot/tre ...

最新文章

  1. Just for fun——写个爬虫抓取whois信息
  2. CentOS 7 NAT软路由
  3. oracle 日期 加一秒,Leap Second (闰秒) 在ORACLE环境的影响
  4. batch normalization的原理和作用_【推荐算法】Deep amp; Cross Network模型原理和实践...
  5. 电视视频直播在线播放网站PHP源码V1.2
  6. 成功破解:世界杀软“金奖”得主BitDefender 2008(官方中文版 + 注册机下载)
  7. Inno Setup 6.0.3+ 简体中文语言包
  8. 第一篇:wine介绍
  9. web应用开发相关技术,CSS盒模型概述
  10. 面试一个应届生,从不起眼到令人刮目相看
  11. 电商新趋势来临!?解析Dtop 环球嘉年华电商是否值得加入!
  12. html 样式之style属性的使用
  13. Calendar日期类获取上月同期需求
  14. STM32C8T6编码器电机测速与arduino光电模块测速
  15. QT5串口编程——编写简单的上位机
  16. 知名搜索引擎网站收录提交入口
  17. 【实战】恶搞图片生成器
  18. Android知识积累
  19. python基础循环语句
  20. 英语之痛:好久也让老外在启蒙期就开始学习汉语

热门文章

  1. springcloud:config配置中心(多配置文件引入)
  2. 【大学生软件测试基础】长方体体积 - 边界测试
  3. 二次型哈密顿量的矩阵对角化方法
  4. 期货价格和点价(期货 点价)
  5. 景联文科技出席全国信标委生物特征识别委会2021年下半年工作组集中会议
  6. 梅开二度!容联云AI荣登“千言数据集-语义解析”权威测评榜首
  7. java公路车组装教程_骑行入门:怎样组装一辆自行车——零部件的准备
  8. outlook qr码在哪里_原平防伪溯源码_橙程(北京)科技有限公司
  9. dnf剑魂buff等级上限_DNF男鬼剑三觉,剑魂重回“鬼剑一哥”地位,再现“一肩成神”风采...
  10. Unity 基础常用的脚本(一)